JMeter开发插件之一(JMeter开发Java Request Sampler测试mongodb)
2016-10-24 14:16
393 查看
前言
目前,在整个互联网上很少找到关于使用JMeter测试mongodb的文章,因此通过学习并参考一些文章后,再经过实践,将分享给大家在JMeter的Java Request中如何测试mongodb,当然希望大家可以举一反三的思维,测试不同的数据库(Mysql,Oracle和Sql Server),而不仅仅限制于测试mongodb。希望对测试人员有所帮助,如果文章中有描述错误,请大家指出,谢谢。
学习参考文档地址:http://blog.csdn.net/xreztento/article/details/52473418
简介
在Jmeter提供了一种纯java的编码方式来构建Sampler的组件,但构建java sampler的前提条件必须要有java的编程基础。通过继承AbstractJavaSamplerClient抽象类后重写setupTest,runTest和teardownTest的方法可以构建成为JAVA Sampler的组件。案例设计以及实现创建思路
1.编写一个访问mongodb的类,并提供一个查询数据的方法。访问mongodb的类称为MongodbClient,查询方法称为query,该方法的返回数据类型为MongoCursor。
2.编写一个TestMongodbSamplerClient通过继承AbstractJavaSamplerClient抽象类后重写setupTest,runTest和teardownTest的方法,在runTest方法中实现调用query的查询方法,并将返回的设置在result.setResponseData()方法中,以便可以在查看结果树(View Result Tree)中看到响应的数据。
开发环境
1.编写MongodbClient类的代码必须将mongo-java-driver-3.3.0.jar文件导入到项目工程中。可到mongodb的官方进行下载,下载地址:http://mongodb.github.io/mongo-java-driver/,该jar文件除了在项目工程中引用外,也需要拷贝一份在JMeter的lib中。2.编写TestMongodbSamplerClient类需要在项目工程下导入以下jar文件,而这些文件可在JMeter的lib目录中找到:
ApacheJMeter_componets.jar
ApacheJMeter_core.jar
ApacheJMeter_java.jar
Jorphan.jar
Logkit-2.0.jar
3.将这些jar文件放入到lib目录下,并进行引用。
编写MongodbClient类
MongodbClient根据数据库的URL地址和数据端口号连接后,通过指定数据库名称获得操作数据库的对象,通过设定集合名称返回操作集合的对象,对集合进行查询操作。MongodbClient代码如下:
package com.mongodb.client; import org.bson.Document; import com.mongodb.MongoClient; import com.mongodb.client.FindIterable; import com.mongodb.client.MongoCollection; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongoDatabase; public class MongodbClient<Document, findIterable> { public MongoClient mongoClient = null; public MongoDatabase database = null; public MongoCollection<org.bson.Document> collection = null; public FindIterable<Document> findIterable = null; public MongoCursor<Document> mongoCursor = null; public void ConnectionMongoClient(String host, int port, String databaseName) { try { mongoClient = new MongoClient(host, port); database = mongoClient.getDatabase(databaseName); System.out.println("Connection Successfully !"); } catch (Exception e) { System.out.println("Mongodb Connection Exception:"); e.printStackTrace(); } } public MongoCursor query(String collectionName, String queryStr) { collection = database.getCollection(collectionName); findIterable = (FindIterable<Document>) collection.find(); mongoCursor = findIterable.iterator(); System.out.print("Query Successfully !"); String str = ""; return mongoCursor; } public void closeConnection() { if (mongoClient != null) { mongoClient.close(); } } }
编写TestMongodbSamplerClient类
TestMongodbSamplerClient类是必须通过继承AbstractJavaSamplerClient抽象类后,重写方法去实现的。而setupTest、runTest、teardownTest方法是完成整个测试声明周期,其中setupTest与teardownTest在整个线程执行中只执行一次用于初始化和结束。package test.mongodb.sampler; import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient; import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext; import org.apache.jmeter.samplers.SampleResult; import org.bson.Document; import com.mongodb.client.MongoCursor; import com.mongodb.client.MongodbClient; public class TestMongodbSamplerClient extends AbstractJavaSamplerClient { public static String host = null; public static int port = 0; public String collection = ""; public MongodbClient mc = null; public MongoCursor<Document> mongoCursor = null; /* 获取页面填写的参数 */ @Override public void setupTest(JavaSamplerContext context) { } @Override public SampleResult runTest(JavaSamplerContext arg0) { // TODO Auto-generated method stub SampleResult result = new SampleResult(); result.setSampleLabel("MongodbSampler" + Thread.currentThread().getId()); result.sampleStart(); mc = new MongodbClient(); mc.ConnectionMongoClient("10.190.130.73", 27017, "apiDB"); mongoCursor = mc.query("HttpRequestSampler", ""); while(mongoCursor.hasNext()) { collection = collection + mongoCursor.next().toString() + "\n"; System.out.println("collection" + collection); } if (collection != "" || !collection.equals("")) { result.setResponseData(collection.getBytes()); }else { result.setResponseData(("the return data is null !").getBytes()); } mc.closeConnection(); result.setSuccessful(true); result.sampleEnd(); return result; } @Override public void teardownTest(JavaSamplerContext context) { } }
在TestMongodbSamplerClient类中实现的是无参数参数请求,也就是说在JAVARequest中没有设置任何参数。接下来近三个重写的方法作用可进行说明:
public void setupTest(JavaSamplerContextcontext),启动整个线程过程中,该方法只执行一次,在该方法中,我们可以做一些初始化事件的准备或者获
取在JAVA Request中设置的参数的值。获取参数的值的方法如下:
@Override
public
void setupTest(JavaSamplerContext context) {
host =
context.getParameter("host");
port =
context.getIntParameter("port");
collection =
context.getParameter("collection");
}
使用context.getParameter("host")就是获取host的直,如果设置
host=10.190.130.70,那么host就是10.190.130.70.通过这样的参数设置方法,可更加灵活地设置mongodb的参数,随时可修改成不同的数据库地址,
数据库名称和端口号。PublicSampleResult runTest(JavaSamplerContext arg0),该方法会根据设定的线程数来运行,调用mongodb的操作方法就在
该方法中实现操作,是这个类的核心方法,以下是runTest的代码模版:
@Override
public SampleResult runTest(JavaSamplerContextarg0) {
// TODOAuto-generated method stub
SampleResult result =
new SampleResult();
result.setSampleLabel("MongodbSampler" + Thread.currentThread().getId());
result.sampleStart();
操作mongodb的核心代码区域。
result.setSuccessful(true);
result.sampleEnd();
return
result;
}
在方法中必须要new一个SampleResult的实例对象,有该对象可以设定View Result tree的响应数据,最后需要返回对象。
result.setSampleLabel(),该方法设定View Result Tree中显示的请求名称和Aggregate Report中的Label名称。
result.sampleStart(),该方法设置执行的开始时间.
result.setResponseData(),该方法设定响应的数据,在View Result Tree中可看到响应的数据。
result.setSuccessful(),该方法设定执行是否成功。
result.sampleEnd(),该方法设置执行结束时间。
当然result对象中原因不止目前介绍的几个操作方法,还有很多的操作,如果还需要其他的设置或者了解更多信息,可以对查看SampleResult类的源代码。
public voidteardownTest(JavaSamplerContext context)在该方法中在整个生命周期中,只执行一次,可在该方法中,编写一些十分资源的一些操作代码。
导出jar包
选择中创建的项目,右键打开Export,在Export窗口中,选择JAR file,将项目导出成为jar文件。
设置输出jar文件的路径。
拷贝导出的jar文件到JMeter的lib/ext目录下
将TestMongodbSampler.jar拷贝到JMeter的lib/ext目录下后,必须要重新启动JMeter工具才生效。
执行TestMongodbSampler插件
启动JMeter后分别创建线程组,Java Request组件,查看结果树以及聚合报告。
创建线程组
创建Java Request组件请求,并且选中test.mongodb.sampler.TestMongodbSamplerClient,由于没有编写获取参数的代码,所以在Send Parameters With the Request
中不用设置参数。
运行成功后,查看View Result Tree中的响应数据
运行成功后查看聚合报告中的数据。
以上就是整个编写Sampler组件到运行的整个过程,每一个步骤都是经过实践的。当然如果在描述的地方有错误,可留言指出错误,后续会继续学习编写插件的方法,将分享更多的技术给大家。
相关文章推荐
- jmeter - 开发java插件,进行测试
- Jmeter开发Sampler测试插件
- jmeter使用BeanShell Sampler测试自己写的java接口(一)
- Jmeter Sampler (取样器插件开发) 制定自己的 Sampler
- jmeter使用BeanShell Sampler测试自己写的java接口(二)
- jmeter java sampler测试java接口(一)javatest解读
- Java开发中网页截图的示例,采用jquery.imageaeraselect-0.9.10这个插件实现,自己详细测试过,可以使用。
- 【JAVA秒会技术之压力测试工具】JMeter在电商开发中的简单应用
- jmeter java sampler测试java接口(二)测试自己的代码
- Jmeter Sampler (取样器插件开发) 制定自己的 Sampler
- jmeter开发自己的sampler插件
- Jmeter 取样器插件开发(Jmeter Sampler)
- 如何为Apache JMeter开发插件(四)——几种类型的Sampler
- 使用Jmeter中的Java Request进行性能测试
- jmeter进行java request 测试
- 我的Firefox插件开发之旅(5)——编译和测试第一个Plugin例子:npruntime
- JAVA开发包、Eclipse 插件安装/更新小汇
- 寻求对java测试开发有兴趣的朋友
- Java(swt+jface) 开发的Eclipse插件下载
- Eclipse插件开发之添加简单的GUI元素-Java基础-Java-编程开发