MongoDBJMeter压力测试(Java代码)

知识养成了思想,思想同时又在融化知识。这篇文章主要讲述MongoDBJMeter压力测试(Java代码)相关的知识,希望能为你提供帮助。
1.前言使用JMeter对MongoDB进行压力测试,可选的方法不多。通过修改JMeter的jmeter.properties文件的方式(自行百度),是可以使MongoDB Script的Sampler可用,但此种方式官方已不推荐,且无法设置连接池,所以最建议使用java脚本的方式最优。
2.Java测试脚本的编写说明【MongoDBJMeter压力测试(Java代码)】JMeter官方对Java测试脚本已经封装万接口,只需要实现接口的方法即可,本操作的难点在于接口方法的理解,以下直接上代码,请认真阅读相关的注释。

package com.qin;

import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.bson.Document;
import java.util.Arrays;


/**
* 继承JavaSamplerClient类,并重写以下四个方法:
* setupTest(),初始化函数,每个用户开始时执行1次
* runTest(),测试函数,核心方法,每个用户执行N次
* teardownTest(),结束函数,每个用户结束时执行1次
* getDefaultParameters(),默认参数提供方法,主要用于JMeter界面中的参数提示
*/
public class JmeterMongoTest implements JavaSamplerClient

// 定义全局的mongo client
private static MongoClient client = null;
private static MongoDatabase db = null;
static
if (client == null)
//定义mongo连接的参数
MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
builder.connectionsPerHost(10);
builder.connectTimeout(5000);
builder.socketTimeout(5000);
builder.requiredReplicaSetName("replica"); //使用副本集的方式进行连接
ServerAddress address1 = new ServerAddress("192.168.1.100", 12701);
ServerAddress address2 = new ServerAddress("192.168.1.101", 12701);

//mongo身份认证
MongoCredential credential = MongoCredential.createCredential("rwuser", "admin", "passowrd".toCharArray());

//单实例的连接方法以下
//client = new MongoClient(address, builder.build());
client = new MongoClient(Arrays.asList(address1, address2), credential, builder.build());

//指定database
db = client.getDatabase("datagov");



/**
* 初始化函数,每个并发用户只执行一次
* @param javaSamplerContext
*/
@Override
public void setupTest(JavaSamplerContext javaSamplerContext)
// write your code here


/**
* 运行函数,每个用户运行N次,每单个用户每个loop时执行的是本方法
* @param javaSamplerContext
* @return
*/
@Override
public SampleResult runTest(JavaSamplerContext javaSamplerContext)
SampleResult sampleResult = new SampleResult();
sampleResult.setSampleLabel("INSERT"); //对应Summary Report中的Label项
sampleResult.sampleStart();

// 从JMeter中读取传入参数值,javaSamplerContext是JMeter的上下文环境,
// 可以在JMeter中使用CSV设置参数
String id = javaSamplerContext.getParameter("id");
String name = javaSamplerContext.getParameter("name");

//执行MongoDB的操作,此处只做插入
MongoCollection< Document> collection = db.getCollection("jmeter_test");
Document document = new Document();
document.append("id", id);
document.append("name", name);
collection.insertOne(document);

//设置返回结果,在JMeter结果树列表中可以查看返回结果
String response = id + "," + name;
sampleResult.setResponseData(response, "utf-8");
//System.out.println(response);

// 结束,需要告诉JMeter执行成功
// 此处代码不严谨,应使用try方法对抛错设置setSuccessful(false),请自行完善
sampleResult.setSuccessful(true);
sampleResult.sampleEnd();
return sampleResult;


/**
* 停止函数,每人用户停止时只执行一次
* @param javaSamplerContext
*/
@Override
public void teardownTest(JavaSamplerContext javaSamplerContext)
// write your code here
return;


/**
* 默认参数函数
* @return
*/
@Override
public Arguments getDefaultParameters()
Arguments arguments = new Arguments();
arguments.addArgument("id", "00000");
arguments.addArgument("name", "liushengqin");
return arguments;


//使用main函数对功能进行调试完成后,再生成jar包
/*
public static void main(String[] args)
// write your code here
Arguments a = new Arguments();
a.addArgument("id", "00000");
a.addArgument("name", "Hello");
final JavaSamplerContext context = new JavaSamplerContext(a);
JmeterMongoTest jmeterMongoTest = new JmeterMongoTest();
jmeterMongoTest.runTest(context);
//System.out.println(db.getCollection("root_word").count());

*/

在建立Java工程时,需要注意以下几点:
(1)外部jar包
在写上述测试脚本时,需要添加以下外部jar包,以下jar包均可以在JMeter安装目录下的lib/目录或lib/ext/目录可以找到,直接拷贝使用即可。但以下mongoDB的驱动包我是下了一个最新版,所以最后一定要记得替换掉lib/目录下的旧的驱动。
ApacheJMeter_core.jar
ApacheJMeter_java.jar
jorphan.jar
oro-2.0.8.jar
slf4j-api-1.7.30.jar
mongo-java-driver-3.12.11.jar

(2)getDefaultParameters的问题
此函数的用途主要是在J

    推荐阅读