设为首页 收藏本站
查看: 1011|回复: 0

[经验分享] JMeter学习(十九)JMeter测试MongoDB

[复制链接]

尚未签到

发表于 2015-7-7 10:52:12 | 显示全部楼层 |阅读模式
  JMeter测试MongoDB性能有两种方式,一种是利用JMeter直接进行测试MongoDB,还有一种是写Java代码方式测试MongoDB性能。
  
  第一种方法
  1.编写Java代码,内容如下:



package com.test.mongodb;
import java.io.File;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.util.UUID;
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.Mongo;  
import com.mongodb.MongoOptions;  
import com.mongodb.ServerAddress;  
import com.mongodb.WriteResult;  
/**
*  
* @author  2014-10-14
* @remark  一次性插入多条数据测试MongoDB的性能   
*/  
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("127.0.0.1", 27017), options);  
db = m.getDB("iflashbuy-log");  
} catch (Exception e) {  
throw new RuntimeException(e);  
}  
}  
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("rw", "w");
return params;
}
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("area");  
if ("w".equalsIgnoreCase(context.getParameter("rw"))) {  
long key = 1;  
BasicDBObject doc = new BasicDBObject();               
doc.put("_id", UUID.randomUUID());  
doc.put("_class", "com.iflashbuy.bi.source.pojo.AreaDataEntity");  
doc.put("province", "广东");  
doc.put("city", "广州");  
doc.put("pv", 35522924);  
doc.put("uv", 52556);  
doc.put("orderCount", 963);  
doc.put("orderTotal", 1548563);  
doc.put("entpriseCode", "00540001");  
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();  
}  
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 < 5; i++) {  
new Thread() {  
public void run() {  
TestMongodb t = new TestMongodb();  
for (int j = 0; j < 2; j++) {  
t.runTest(c);  
}  
}  
}.start();  
}  
}  
*/
}  
  2.生成jar包,放在Jmeter_HOME/lib/ext文件夹下
  3.启动JMeter,新建线程组,Java请求,察看结果树,聚合报告,图形结果
DSC0000.jpg
  4.执行测试
  检查MongoDB已添加成功数据。
  
  第二种方法
  1.启动JMeter,新建线程组,设置线程组属性
  2.右键添加-MongoDB Source Config
  设置属性Server Address List:127.0.0.1
  MongoDB Source:jmeterdbsource,如下图设置:
DSC0001.jpg
  3.右键添加-Sampler-MongoDB Script
  设置属性MongoDB Source:引用MongoDB source config中设置的好的名称,jmeterdbsource
  Database Name:数据库名称,iflashbuy-log
  Script:脚本
DSC0002.jpg
  4.右键-监听器-察看结果树
DSC0003.jpg
  
  以上两种方式,都可用于测试MongoDB的性能。
  小结:学习Jmeter有一阵子了,越来越体会到Jmeter对于Java的支持太强大了.
  
  附:
  Mongodb亿级数据量的性能测试 http://www.iyunv.com/lovecindywang/archive/2011/03/02/1969324.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-84057-1-1.html 上篇帖子: mongodb部署 下篇帖子: PHP操作MongoDB
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表