JMeter自定义Java Sample
2020-11-27 本文已影响0人
一飞冲不了天
自定义Java Sample需要实现AbstractJavaSamplerClient抽象类。AbstractJavaSamplerClient抽象类有几个主要的方法:
1、setupTest 用来做一些初始化的操作,每一线程只会调用该方法一次。
2、teardownTest 用来做一些清理的操作,每一线程只会调用该方法一次。
3、getDefaultParameters 设置sample的参数以及默认值,这个方法设置的参数会显示在Java request组件的界面上。
4、runTest 这个方法就是sample的核心方法,每次迭代都会调用,并且返回SampleResult对象。由于该方法是抽象方法,所以自定的sample一定要实现该方法,其他方法可根据情况选择是否重写。
一、用idea或其他IDE工具创建一个maven项目
二、在porm.xml文件中,引入以下几个依赖项
<dependencies>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>4.0</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>4.0</version>
</dependency>
</dependencies>
三、创建一个java类,并实现AbstractJavaSamplerClient类
四、实现runTest方法,并适当重写其他几个方法(以下是示例)
package lym.iflytek.mt_scylla;
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;
public class IflytekSample extends AbstractJavaSamplerClient {
private IatDemo iat;#业务类,具体代码不再贴出来
public Arguments getDefaultParameters() {
/*
这个方法由JMeter调用,添加的Arguments参数会在界面上展示出来,可以设置默认值。
* */
Arguments arg = new Arguments();
arg.addArgument("addr", "");
arg.addArgument("appid", "");
arg.addArgument("token", "");
arg.addArgument("rate", "");
arg.addArgument("filePath", "");
arg.addArgument("printLog", "false");
arg.addArgument("encoding", "utf-8");
arg.addArgument("costTimeType", "3");
return arg;
}
public void setupTest(JavaSamplerContext context) {
/*进行初始化操作,每一个线程只执行一次*/
String addr = context.getParameter("addr");
String appid = context.getParameter("appid");
String token = context.getParameter("token");
String rate = context.getParameter("rate");
String printLog = context.getParameter("printLog");
String costTimeType = context.getParameter("costTimeType");
iat = new IatDemo(addr, appid, token, rate, printLog, costTimeType);
System.out.println(Thread.currentThread().getName()+":初始完成");
}
public void teardownTest(JavaSamplerContext context){
/*做一些清理操作,每个线程只执行一次*/
try {
iat.UninitializeEx();
System.out.println(Thread.currentThread().getName()+":逆初始化完成");
} catch (IflytekException e) {
getNewLogger().error(e.getMessage(), e);
}
}
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
/*每次迭代都会调用,并且返回SampleResult对象,该对象保存了每次运行的执行结果*/
String filePath = javaSamplerContext.getParameter("filePath");
String encoding = javaSamplerContext.getParameter("encoding");
String costTimeType = javaSamplerContext.getParameter("costTimeType");
#SampleResult ,用来保存每次运行的结果,以便JMeter进行数据统计。
SampleResult sampleResult = new SampleResult();
#通过参数控制运行时间的统计范围,如果你的业务没那么复杂,
#完全可以在runTest开始时设置开始时间,方法结束时设置结束时间。
if (costTimeType.equals("1")) {
sampleResult.sampleStart();#设置运行的开始时间
}
try {
String allresult = iat.start(filePath, sampleResult);
sampleResult.setSamplerData(filePath);#设置输入数据
sampleResult.setDataType(SampleResult.TEXT);#设置数据类型
sampleResult.setResponseData(allresult, encoding);#设置sample接收到的数据
sampleResult.setSuccessful(true);#设置sample执行结果
sampleResult.setResponseCodeOK();#设置sample执行状态码
} catch (Exception e) {
sampleResult.setSuccessful(false);
sampleResult.setResponseCode("500");
sampleResult.setResponseMessage(e.getMessage());
getNewLogger().error(e.getMessage(), e);
}
if (costTimeType.equals("1")) {
#设置运行的结束时间,结束时间-开始时间,就是整个sample的运行时间
#(JMeter就是用这个时间来计算平均响应时间的)。可以根据实际情况,设置在不同的位置。
sampleResult.sampleEnd();
}
if (sampleResult.getStartTime() == 0) {
sampleResult.sampleStart();
}
if (sampleResult.getEndTime() == 0) {
sampleResult.sampleEnd();
}
return sampleResult;
}
public static void main(String[] args) {
IflytekSample sample = new IflytekSample();
Arguments arg = new Arguments();
arg.addArgument("addr", "192.168.0.1:1234");
arg.addArgument("appid", "00000000");
arg.addArgument("token", "11111111");
arg.addArgument("rate", "41000");
arg.addArgument("filePath", "1.wav");
arg.addArgument("printLog", "true");
arg.addArgument("costTimeType", "2");
JavaSamplerContext javaSamplerContext = new JavaSamplerContext(arg);
sample.setupTest(javaSamplerContext);
SampleResult sampleResult = sample.runTest(javaSamplerContext);
System.out.println(sampleResult.getResponseDataAsString());
sample.teardownTest(javaSamplerContext);
}
}