Jmeter取样器之Java Request(2)
背景
测试实验室需要构造常口数据1-2亿,存在的问题:单线程插入耗时太长,效率低。Jmeter可以实现多线程处理,且可通过调用jar包实现java请求。
操作步骤
1、Java项目工程中创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写;
public Arguments getDefaultParameters();设置可用参数及的默认值;
public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
public void teardownTest(JavaSamplerContext arg0):测试结束时调用;
实例文件见附件:
import com.dragonsoft.testlab.action.MHzCzrkjbxxAction;
import com.dragonsoft.testlab.action.MHzCzrkjbxxActionNew;
import com.dragonsoft.testlab.action.MWbSwjlAction;
import com.dragonsoft.testlab.common.CLKData;
import com.dragonsoft.testlab.common.DBconn;
import com.dragonsoft.testlab.common.IdCardGenerator;
import com.dragonsoft.testlab.common.SameFamilyDataGenerator;
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 java.sql.Connection;
/**
* @Description
* @Author Meiying_jiang
* @Date 2018/6/20 10:27
*/
public class JmeterJava extends AbstractJavaSamplerClient {
private String record;
private String ywkconn_ip;
private String ywkconn_user;
private String ywkconn_password;
private String clkconn_ip;
private String clkconn_user;
private String clkconn_password;
/** Holds the result data (shown as Response Data in the Tree display). */
private Long resultData;
// 这个方法是用来自定义java方法入参的。
// params.addArgument("num1","");表示入参名字叫num1,默认值为空。
//设置可用参数及的默认值;
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("record", "1");
params.addArgument("ywkconn_ip","192.168.0.13");
params.addArgument("ywkconn_user","csbsys");
params.addArgument("ywkconn_password","dragon");
params.addArgument("clkconn_ip","192.168.0.13");
params.addArgument("clkconn_user","csbsys");
params.addArgument("clkconn_password","dragon");
return params;
}
//每个线程测试前执行一次,做一些初始化工作;
public void setupTest(JavaSamplerContext arg0) {
}
//开始测试,从arg0参数可以获得参数值;
public SampleResult runTest(JavaSamplerContext arg0) {
record = arg0.getParameter("record");
ywkconn_ip = arg0.getParameter("ywkconn_ip");
ywkconn_user = arg0.getParameter("ywkconn_user");
ywkconn_password = arg0.getParameter("ywkconn_password");
clkconn_ip = arg0.getParameter("clkconn_ip");
clkconn_user = arg0.getParameter("clkconn_user");
clkconn_password = arg0.getParameter("clkconn_password");
SampleResult sr = new SampleResult();
sr.setSampleLabel( "Java请求");
try {
sr.sampleStart();// jmeter 开始统计响应时间标记
// //代码块,常口
// long start = System.currentTimeMillis();
// Connection ywkconn = DBconn.dbconn(ywkconn_ip,ywkconn_user,ywkconn_password);
// Connection clkconn = DBconn.dbconn(clkconn_ip,clkconn_user,clkconn_password);
// long end = System.currentTimeMillis();
// System.out.println("连接数据库耗时:"+(end - start));
// long start1 = System.currentTimeMillis();
// //往数据库插入数据
// int count=Integer.valueOf(record);//插入的记录数
// //户政_常住人口基本信息
//// MHzCzrkjbxxAction.hzczrk(count,ywkconn,clkconn);
// MWbSwjlAction.wb(count,clkconn);
// long end1 = System.currentTimeMillis();
// System.out.println("插入用时:"+(end1 -start1));
// //关闭数据库,统一放外层关闭
// ywkconn.close();
// clkconn.close();
//插入常口三代关系数据和户信息数据
long start = System.currentTimeMillis();
//定义循环次数
int record = 5000;
//连接数据库
Connection ywkconn = DBconn.dbconn("192.168.0.13","csbsys","dragon");
//身份证生成类实例化
IdCardGenerator idcard = new IdCardGenerator();
//策略库类实例化
CLKData clkdb = new CLKData();
//同户关系类实例化
MHzCzrkjbxxActionNew hz = new MHzCzrkjbxxActionNew();
//同户关系生成类实例化
SameFamilyDataGenerator sameFamily = new SameFamilyDataGenerator();
sameFamily.sameFamily(ywkconn,clkdb,idcard,hz,record);
//关闭数据库,统一放外层关闭
ywkconn.close();
long end = System.currentTimeMillis();
long time = end - start;
System.out.println("插入 "+record +" 花费总时间:"+time);
// 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
resultData = end-start;
sr.setResponseData("结果是:"+resultData, null);
sr.setDataType(SampleResult.TEXT);
// System.out.println(resultData);
sr.setSuccessful(true);
} catch (Throwable e) {
sr.setSuccessful(false);
e.printStackTrace();
} finally {
sr.sampleEnd();// jmeter 结束统计响应时间标记
}
return sr;
}
//测试结束时调用;
@Override
public void teardownTest(JavaSamplerContext arg0) {
}
// main只是为了调试用,最后打jar包的时候注释掉。
// public static void main(String[] args)
// { // TODO Auto-generated method stub
// Arguments params = new Arguments();
// params.addArgument("num1", "1");//设置参数,并赋予默认值1
// params.addArgument("num2", "2");//设置参数,并赋予默认值2
// JavaSamplerContext arg0 = new JavaSamplerContext(params);
// com.dragonsoft.testlab.JmeterJava test = new com.dragonsoft.testlab.JmeterJava();
// test.setupTest(arg0);
// test.runTest(arg0);
// test.teardownTest(arg0);
// }
}
2、将Java项目工程打成Jar包(确保打包内容包括类JmeterJava的内容);
3、将此jar包放入JMETER_HOME\lib\ext目录;
4、打开Jmeter,创建线程组、Java Request、查看结果树,进行测试,Java Request中选择相应的类名如下所示:

附录:
1、Jmeter安装及使用,详见192.168.23.1共享文件,路径如下所示

2、Idea打Jar注意点:需勾选build on make,每次打包直接执行菜单栏Build》Rebulid Project即可完成打包。

浙公网安备 33010602011771号