用JMeter测试monggodb的请求
JMeter测试MongoDB性能有两种方式,一种是利用JMeter直接测试MongoDB【即通过MongoDB协议测试】,另一种是写Java代码方式测试MongoDB【即通过java请求测试】
注:
1、用于插件不准,所以在使用JMeter直接测试MongoDB时例如find()、insert()等命令返回结果会不准,因此3.0里去掉了mongodb的协议,如果要用JMeter测试MongoDB我们一般选择写Java代码的方式【即第二种方式】,具体情况会在后面说明。
2、JMeter2.10、JMeter2.11版本里有mongodb协议,3.0里无mongodb协议,如果想使用该协议注意JMeter版本的选择
第一种JMeter直接进行测试MongoDB
1.启动JMeter,新建线程组,设置线程组属性
2.右键添加-MongoDB Source Config

3.右键添加-Sampler-MongoDB Script

4.右键-监听器-察看结果树


可以看出JMeter测试count()命令结果和mongodb查询结果一直,但是JMeter由于插件不准,有的命令不准,例如find()、insert()命令,具体如下:
insert命令测试:

insert测试结果:


会发现虽然请求发送成功了,但是返回的结果是一串很长的字符串,很难确定插入是否成功,通过客户端查询,数据已插入成功;JMeter直接录入db.foo.find()和insert()命令响应结果相似,响应结果也是一串类似字符串,而不是数据结果,所以我们一般不用该种方法测试mongodb,具体如下图:


第二种JMeter结合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.DBObject;
import com.mongodb.Mongo;
import com.mongodb.MongoOptions;
import com.mongodb.ServerAddress;
import com.mongodb.WriteResult; 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 {
//MongoDB连接池配置
//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("myTest"); //获取myTest数据库
} 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();
//1、获取一个集合foo
DBCollection coll = db.getCollection("foo"); //获取一个集合foo
//2、对集合foo进行插入操作
if ("w".equalsIgnoreCase(context.getParameter("rw"))) {
// long key = 1;
//2.1 构造一个文档doc
BasicDBObject doc = new BasicDBObject();
//2.2 向文档中放入数据
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");
//2.3 将文档插入到集合foo中
coll.insert(doc);
} results.setSuccessful(true);
results.sampleEnd();
return results;
} /*public static void main(String args[]) throws Exception {
Arguments a = new Arguments();
a.addArgument("rw", "w");
final JavaSamplerContext c = new JavaSamplerContext(a);
long startTime = 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();
}
long endTime = System.currentTimeMillis();
System.out.println(endTime-startTime);
} */ }
注:在编写java代码时要引入几个包,如图
2.生成jar包,放在Jmeter_HOME/lib/ext文件夹下
3.启动JMeter,新建线程组,Java请求,察看结果树,聚合报告

用JMeter测试monggodb的请求的更多相关文章
- jmeter测试 flask 接口请求
jmeter测试 flask 接口请求 flask的代码如下: #!/usr/bin/env python # -*- coding: utf-8 -*- from flask import Flas ...
- 【Jmeter测试】接口请求完成后,查询数据库结果,检测数据存储是否正确
Jmeter脚本逻辑 发送POST请求,把数据保存到数据库中 发讯数据库,数据库查询结果保存的变量中 使用BeanShell判断数据库查询结果 Jmeter脚本结构 第一个箭头指的是JDBC Conn ...
- jmeter测试TCP服务器/模拟发送TCP请求 设置16进制发送(转)
转载留存:http://blog.sina.com.cn/s/blog_46d0362d0102v8ii.html 性能测试需要模拟多种场景,经常受制于资源限制,没办法建立贴近实际部署环境的场景.因而 ...
- 转:应用JMeter测试solr请求
使用JMeter测试solr请求 一.安装JMeter 在官网http://jmeter.apache.org/download_jmeter.cgi下载JMeter 直接解压JMeter安装包 Li ...
- jmeter测试HTTP请求
HTTP超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.(详情参考看一下百科) HTTP发送请求有GE ...
- jmeter测试TCP服务器/模拟发送TCP请求
jmeter测试TCP服务器,使用TCP采样器模拟发送TCP请求. TCP采样器:打开一个到指定服务器的TCP / IP连接,然后发送指定文本并等待响应. jmeter模拟发送TCP请求的方法: 1. ...
- jmeter测试mysql数据库之JDBC请求
所有jmeter基本组件功能本文不做介绍.jmeter要链接mysql数据库,首先得下载mysql jdbc驱动包(注:驱动包的版本一定要与你数据库的版本匹配,驱动版本低于mysql版本有可能会导致连 ...
- jmeter ---测试TCP服务器/模拟发送TCP请求
jmeter测试TCP服务器/模拟发送TCP请求 jmeter测试TCP服务器,使用TCP采样器模拟发送TCP请求. TCP采样器:打开一个到指定服务器的TCP / IP连接,然后发送指定文本并等待响 ...
- jmeter的http post请求与测试Java请求
1.jmeter 测试Java请求 1.1 建立测试类,在被测程序中添加测试类 1.2 将测试程序打包,打成不可运行的包 1.3 将打好的包,放在$JMETER_HOME/lib/exts下面,把测试 ...
随机推荐
- SQL SERVER 2008复制数据库时发生执行SQL Server代理作业错误
1. 情况说明 在利用SQL SERVER数据库复制向导,能够很方便的将一个数据库从一台服务器复制到另一台服务器上,具体操作步骤也十分简单. 不过在实际操作过程常发生“执行SQL SERVER代理作业 ...
- Hive-0.x.x - Enviornment Setup
All Hadoop sub-projects such as Hive, Pig, and HBase support Linux operating system. Therefore, you ...
- Spark核心——RDD
Spark中最核心的概念为RDD(Resilient Distributed DataSets)中文为:弹性分布式数据集,RDD为对分布式内存对象的 抽象它表示一个被分区不可变且能并行操作的数据集:R ...
- iOS关于通知传值Bool类型的注意点
比如: [[NSNotificationCenter defaultCenter] postNotificationName:@"Notification_Name" object ...
- MPLS与LDP从入门到了解
多协议标签交换(MPLS)是一种用于快速转发数据包的技术,它的出现就是为了提高转发效率.因为IP转发大多靠软件进行,在转发的每一跳都要进行至少一次最长匹配查找,操作复杂导致转发速度比较慢.有些厂商借鉴 ...
- winform 用户控件、 动态创建添加控件、timer控件、控件联动
用户控件: 相当于自定义的一个panel 里面可以放各种其他控件,并可以在后台一下调用整个此自定义控件. 使用方法:在项目上右键.添加.用户控件,之后用户控件的编辑与普通容器控件类似.如果要在后台往窗 ...
- [No0000A1]人体排毒时间表,别再信了
经常可以看到有「人体排毒时间表」这样的说法,不同的媒体反复传播,大同小异.这些说法里,大多把人体的系统器官都给安排了一个特定的时段,认为在某时段是某器官的排毒时间,睡觉能排一切毒.事实上果真如此么?让 ...
- 深入C#编程
1.NET框架 1.1.NET框架结构 VB.NET C# F# lronruby others.... .NET FrameWork(FCL) 公共语言进行时(CLR) 操作系统 .NET框架具有两 ...
- 开发 ASP.NET vNext 续篇:云优化的概念、Entity Framework 7.0、简单吞吐量压力测试
继续上一篇<开发 ASP.NET vNext 初步总结(使用Visual Studio 2014 CTP1)>之后, 关于云优化和版本控制: 我本想做一下MAC和LINUX的self-ho ...
- [转]extjs grid的Ext.grid.CheckboxSelectionModel默认选中解决方法
原文地址:http://379548695.iteye.com/blog/1167234 grid的复选框定义如下: var sm = new Ext.grid.CheckboxSelection ...