1.Jmeter在3.0以后就弃用了MongoDB Script
所以我选择编写自己的java请求进行mongoDB压测。
先贴上界面:
红色标出来的就是自己编写的java请求
2.编写java请求
建立一个maven工程,然后导入依赖
4.0.0
com.li.demo
com.li.demo.Mango
0.0.1-SNAPSHOT
jar
com.li.demo.Mango
http://maven.apache.org
UTF-8
org.mongodb
mongo-java-driver
3.11.2
org.apache.jmeter
ApacheJMeter_mongodb
5.0
junit
junit
3.8.1
test
org.apache.maven.plugins
maven-compiler-plugin
3.3
1.8
1.8
UTF-8
true
org.apache.maven.plugins
maven-shade-plugin
2.3
package
shade
false
META-INF/spring.handlers
META-INF/spring.schemas
com.li.demo.com.li.demo.Mango.App
我这里引入了mongo-java-driver和ApacheJMeter_mongodb,然后还需要用到jmeter,这是因为要继承AbstractJavaSamplerClient,才可以成为jmeter可运行可识别的java请求。
这个jmeter2.2的jar包我通过maven导入不了,所以下载下来,外部引入。
继承AbstractJavaSamplerClient新建一个类,然后代码如下:
package com.li.demo.com.li.demo.Mango;
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 org.bson.Document;
import com.mongodb.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
public class MangoTest extends AbstractJavaSamplerClient {
public static void main(String[] args) {
System.out.println("hello world");
}
public SampleResult runTest(JavaSamplerContext arg0) {
// TODO Auto-generated method stub
System.out.println("开始执行!");
SampleResult sampleresult = new SampleResult();
sampleresult.sampleStart();
sampleresult.setSampleLabel("MongodbSampler" + Thread.currentThread().getId());
MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
MongoDatabase mongoDatabase = mongoClient.getDatabase("test");
System.out.println("成功");
MongoCollectioncollection = mongoDatabase.getCollection("test");
Document doc=new Document();
doc.put("sss1", 10);
collection.insertOne(doc);
/*if ( responseData!= "" || !responseData.equals("")) {
//设置响应数据为查询结果
sampleresult.setResponseData(responseData.getBytes());
}else {
sampleresult.setResponseData(("the return data is null !").getBytes());
} */
sampleresult.setSuccessful(true);
sampleresult.sampleEnd();
return sampleresult;
}
@Override
public Arguments getDefaultParameters() {
// TODO Auto-generated method stub
Arguments params=new Arguments();
params.addArgument("ip","127.0.0.1");
params.addArgument("port","27017");
params.addArgument("dbname","test");
params.addArgument("collection","test");
return params;
}
}
之所以新建一个main方法是之后要导出jar包的时候要导出成可执行的jar包,所以需要一个入口方法main。
runTest()是java请求的主要代码,里面是你的逻辑,可以是各种mangoDB的数据操作
getDefaultParameters()是设置输入参数。在runTest里可以用context.getParameter("参数名")获取到界面输入的参数
3.打包问题,因为引入了第三方jar包,打包是一个问题
右键项目,Export-》
选择Runnable JAR file
导出为:
一个jar包和依赖文件夹。一起放到jmeter的lib/ext下即可。
4.很坑很坑的java.lang.NoSuchMethodError: com.mongodb.MongoClient.getDatabase报错
结果是jmeter的lib下就有
而且是最高优先级,所以选择先加载了这个jar包,版本还很低。所以没有找到那个getDatabase方法!