import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.Mongo;
import com.mongodb.MongoOptions;
import com.mongodb.ServerAddress;
import com.mongodb.WriteResult;
/**
*
* @author ke.chenk 2011-12-21 上午9:48:58
* @mail lingqi1818@gmail.com
*/
public class TestMongodb extends AbstractJavaSamplerClient {
private static Mongo m;
private static DB db;
private static AtomicLong read_key = new AtomicLong(0);
private static FileOutputStream fos;
static {
try {
fos = new FileOutputStream(new File("jmeter_error.log"));
MongoOptions options = new MongoOptions();
options.autoConnectRetry = true;
options.connectionsPerHost = 1000;
options.maxWaitTime = 5000;
options.socketTimeout = 0;
options.connectTimeout = 15000;
options.threadsAllowedToBlockForConnectionMultiplier = 5000;
m = new Mongo(new ServerAddress("10.20.141.22", 28018), options);
// m = new Mongo(new ServerAddress("10.20.159.19",28018), options);
db = m.getDB("test");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
public SampleResult runTest(JavaSamplerContext context) {
// System.out.println(read_key.getAndIncrement());
SampleResult results = new SampleResult();
// System.out.println(context.getParameter("rw"));
results.sampleStart();
DBCollection coll = db.getCollection("test");
if ("w".equalsIgnoreCase(context.getParameter("rw"))) {
long key = 1;
BasicDBObject doc = new BasicDBObject();
doc.put("count", 100);
doc.put("offer_price", 150);
doc.put("industry_name", "捕鱼,原材料,加工品,十个字以内");
doc.put("category_id", 10);
doc.put("offer_title", "黑猫白猫抓到老鼠就是好猫");
doc.put("sum_payment", 100);
doc.put("sum_product_payment", 1);
doc.put("gmt_completed", new Date());
doc.put("is_completed", true);
doc.put("status", "new");
doc.put("gmt_create", new Date());
doc.put("gmt_modified", new Date());
doc.put("_id", read_key.getAndIncrement());
doc.put("offer_id", key);
doc.put("buyer_member_id", "lingqi" + key);
doc.put("seller_member_id", "yeling" + key);
db.requestStart();
WriteResult rs = coll.insert(doc);
try {
if (rs.getError() != null) fos.write(rs.getError().getBytes());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("w error->" + rs.getError());
db.requestDone();
}
if ("r".equalsIgnoreCase(context.getParameter("rw"))) {
BasicDBObject query = new BasicDBObject();
query.put("_id", read_key.getAndIncrement());
DBCursor cur = coll.find(query);
System.out.println(cur.count());
}
results.setSuccessful(true);
results.sampleEnd();
return results;
// return null;
}
public static void main(String args[]) throws Exception {
Arguments a = new Arguments();
a.addArgument("rw", "w");
final JavaSamplerContext c = new JavaSamplerContext(a);
long start = System.currentTimeMillis();
for (int i = 0; i < 50; i++) {
new Thread() {
public void run() {
TestMongodb t = new TestMongodb();
for (int j = 0; j < 10000; j++) {
t.runTest(c);
}
}
}.start();
}
// DBCollection coll = db.getCollection("test");
// System.out.println(db.getLastError());
// BasicDBObject in = new BasicDBObject();
// BasicDBList values = new BasicDBList();
// values.add(1);
// values.add(2);
// values.add(3);
// in.put("$in", values);
// BasicDBObject query = new BasicDBObject();
// query.put("_id", in);
// System.out.println(query);
// //System.out.println(coll.find(query).hasNext());
// System.out.println(coll.count());
// System.out.println(coll.findOne());
/*
* String map = "function() { emit(this.offer_price, {count:1});}"; String reduce = "function(key, values) {";
* reduce = reduce + "var total = 0;"; reduce = reduce +
* "for(var i=0;i<values.length;i++){total += values[i].count;}"; reduce = reduce + "return {count:total};}";
* String result = "resultCollection"; MapReduceOutput mapReduceOutput = coll.mapReduce(map, reduce.toString(),
* result, null); DBCollection resultColl = mapReduceOutput.getOutputCollection(); DBCursor cursor =
* resultColl.find(); while (cursor.hasNext()) { System.out.println(cursor.next()); }
*/
// DBCursor cursor = coll.find();
// long start = System.currentTimeMillis();
// while (cursor.hasNext()) {
// System.out.println(cursor.next());
// }
// System.out.println(System.currentTimeMillis()-start);
}
}
分享到:
相关推荐
在2.10版本中,JMeter进一步扩展了其功能,尤其在支持非关系型数据库(NoSQL)如MongoDB和搜索引擎Elasticsearch的测试方面有了显著提升。 一、JMeter简介 JMeter是由Apache软件基金会开发的一款完全基于Java的开放...
- **自动化测试辅助**:一些插件提供代码生成或导入功能,帮助快速构建和维护测试计划,例如录制回放功能,可以快速生成基于真实用户行为的脚本。 - **数据可视化**:通过丰富的图表和报告,JMeter GUI插件能更好...
在这个压缩包中,提供了针对MySQL、JSON以及MongoDB数据库进行JMeter测试所需的特定jar包。下面将详细阐述这些知识点: 1. **JMeter**: Apache JMeter是一款由Apache软件基金会开发的负载和性能测试工具。它可以...
6. **脚本录制与回放**:JMeter内置了代理服务器功能,可以录制用户的浏览器操作并生成测试脚本,方便回放和编辑。这对于创建复杂的测试场景非常有用。 7. **分布式测试**:JMeter支持分布式测试,可以在多台机器上...
Apache JMeter是一款强大的性能测试工具,专为评估和测试各种应用程序的性能而设计。它是一个开源项目,由Apache Software Foundation维护,广泛应用于Web应用、FTP服务器、数据库和其他类型的服务器的负载和性能...
Apache JMeter是一款强大的开源压力测试工具,主要用于对Web应用程序进行性能和负载测试。这款工具最初设计为HTTP服务器的测试工具,但随着时间的发展,它已经扩展到支持多种协议,包括FTP、SMTP、POP3、JDBC等,...
8. **常用开源测试平台**:熟悉Jenkins、Travis CI等持续集成工具,以及JMeter、LoadRunner等性能测试工具,实现自动化测试和性能评估。 9. **客户端专项测试**:针对GUI、网络、多媒体等方面的测试,确保用户体验...
2. 性能测试:学习使用LoadRunner、JMeter进行性能测试,理解性能指标如响应时间、并发用户数等。 3. 持续集成:熟悉Jenkins、Travis CI等持续集成工具,实现测试脚本的自动化执行。 四、数据库与网络知识 1. ...
4. **安全性测试**:检测SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)等安全漏洞。 5. **自动化测试**:利用Selenium、JUnit、TestNG等工具进行回归测试,提高效率,减少手动测试的工作量。 6. **用户体验(UX...
学会编写测试脚本和分析测试结果是提高测试效率的关键。 5. **版本控制**:Git是常见的版本控制系统,用于协同开发和版本管理。熟悉Git的基本操作如克隆、提交、推送和合并分支,可以更好地协作和跟踪代码变更。 6...
7. 测试策略:功能测试用例、性能测试工具(如JMeter)、安全测试方法(如SQL注入测试)、兼容性测试环境搭建 8. 版本控制:Git的使用 9. 项目构建与部署:Webpack、npm或Maven命令、服务器环境配置(如Apache或...
在这个计划中,主要涉及的技术包括百度云内容审核API、Python脚本、MongoDB和MySQL数据库、repository/service/controller的单元测试、JMeter性能测试、Nginx负载均衡、前端优化、消息队列、Redis缓存、安全认证、...
- 回归测试:修改代码后重新进行测试,确保新功能的加入不会影响原有功能。 #### 2. **测试工具与技术** - **自动化测试工具**:Selenium、JUnit、TestNG等。 - **性能测试工具**:LoadRunner、JMeter等。 - **...
3. **单元测试与代码覆盖率**:团队实现了repository/service/controller各层的单元测试,达到了类覆盖率和代码行数覆盖率100%,确保了代码质量。尽管在测试过程中遇到了junit5与powermockito的兼容问题,但通过调整...
这个压缩包很可能包含了用于测试或演示的彩票Web应用的所有必要文件,比如HTML、CSS、JavaScript代码、图片资源、数据库配置文件以及可能的服务器端脚本如PHP或Java。 在深入分析之前,让我们先了解一些基本概念: ...
可能包含的文件有测试脚本、数据库配置文件、测试报告模板、数据库连接库(如JDBC或MongoDB驱动)等。 测试脚本可能使用了像Jest或Mocha这样的测试框架,它们提供了一套结构化的测试API,使得编写和组织测试变得...
在测试过程中,开发者会使用各种工具来辅助测试,例如JUnit用于Java的单元测试,Selenium用于Web应用的自动化UI测试,JMeter用于性能测试,Postman用于API接口的测试等。同时,持续集成/持续部署(CI/CD)工具如...
可能包括以下文件和文件夹:`index.html`(主页)、`style.css`和`script.js`(样式和脚本文件)、`app.py`或`server.js`(后端服务)、`db.js`或`models.py`(数据库操作)、`tests`目录(测试代码)、`.gitignore`...
对于更复杂的测试场景,可能还需要Selenium、JMeter等工具进行功能测试和性能测试。 在实际的测试过程中,开发者需要关注代码覆盖率、性能指标(如响应时间、并发处理能力)、内存占用、错误日志等,确保应用在各种...
自动化测试工具如JUnit、Selenium和JMeter可以帮助提高测试效率。 8. **部署与运维**:网站上线前,需要配置服务器环境,选择合适的服务器如AWS、Google Cloud或阿里云,并设置持续集成/持续部署(CI/CD)流程,以...