在JMeter中引用外部的jar包以及扩展适合的Java程序

1.把写好的应用打包,放到lib/ext下,JMeter运行时即可找到。同时还要把用户自己编写的应用所依赖的包放在lib下。运行JMeter。界面打开后,右键“测试计划”,添加线程组;右键“线程组”-添加-Sampler-Java请求,在类名称处选择刚才写好的类。

 2.扩展Java请求

要扩展Java请求此应用,要用到lib/ext/ApacheJMeter_java.jar,他封装此应用。
首先,需要继承ApacheJMeter_java.jar中的抽象类AbstractJavaSamplerClient,它提供了四个抽象方法:

void setupTest(JavaSamplerContext arg0),SampleResult runTest(JavaSamplerContext arg0), void teardownTest(JavaSamplerContext arg0), Arguments getDefaultParameters()。setupTest和teardownTest与JUnit中的类似,分别在测试的开始和结束时执行。 runTest为主要测试方法,所有测试程序都在这里完成,JavaSamplerContext参数封装测试中需要的所有外界数据(如配置信息等)。其 SampleResult封装了所有测试结果(如:测试是否成功?程序执行时间等),getDefaultParameters用于把测试的一些默认数据在程序运行前显示到JMeter客户端,这个可以和runTest配合使用,实现数据的呈现和配置。

package jmetertest;

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 jmetertest.SignedRequestHelper;

/**
* APP接口签名jmeter请求
*
*
*/
public class SignedRequestTest extends AbstractJavaSamplerClient {
private SampleResult results;
private String plainText;
private boolean isGET;
private String mode;
private String resultData;


// 设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("plainText", "");//设置参数,并赋予默认值0
params.addArgument("mode","GET");//设置参数,并赋予默认值0
return params;
}


// 初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行
public void setupTest(JavaSamplerContext arg0) {
results = new SampleResult();
}


// 测试执行的循环体,根据线程数和循环次数的不同可执行多次
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
plainText = arg0.getParameter("plainText"); // 获取在Jmeter中设置的参数值
mode = arg0.getParameter("mode");// 获取在Jmeter中设置的参数值
isGET = mode.equals("GET");
results.sampleStart();// jmeter 开始统计响应时间标记
try {
// 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。

resultData = String.valueOf(SignedRequestHelper.sign(plainText, isGET));
if (resultData != null && resultData.length() > 0) {
results.setResponseData("result:"+resultData, null);
results.setDataType(SampleResult.TEXT);
}
// System.out.println(resultData);
results.setSuccessful(true);
} catch (Throwable e) {
results.setSuccessful(false);
e.printStackTrace();
} finally {
results.sampleEnd();// jmeter 结束统计响应时间标记
}
return results;
}


// 结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行
public void teardownTest(JavaSamplerContext arg0) {
System.out.println(resultData);
}
/*public static void main(String[] args) {
// TODO Auto-generated method stub
Arguments params = new Arguments();
params.addArgument("plainText", "0");//设置参数,并赋予默认值0
params.addArgument("mode", "GET");//设置参数,并赋予默认值0
JavaSamplerContext arg0 = new JavaSamplerContext(params);
SignedRequestTest test = new SignedRequestTest();
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
} */
}

原文地址:https://www.cnblogs.com/hong0632/p/6093585.html