场景:测试支付接口,需要一个对参数加密。本次先用求和算法代替
实现方式
1:实现自定义方法,如下 public int sum(int a,int b)
public class MathTest {
public int sum(int a,int b)
{
return a+b;
}
}
需要的jar包
JMETER_HOME\lib\ext目录下copy
1:ApacheJMeter_core.jar
2: ApacheJMeter_java.jar
jmeter调用自定义代码方法
*/
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 JmeterHttpTest extends AbstractJavaSamplerClient {
// private SampleResult sampleresult = new SampleResult();
private MathTest test=null;
private static long start = 0;
private static long end = 0;
private String resultData;
//把测试的一些默认数据在程序运行前显示到JMeter客户端
@Override
public Arguments getDefaultParameters()
{
Arguments params = new Arguments();
params.addArgument("key1","1");
params.addArgument("key2","2");
return params;
}
//子类用它来 记录log
// protected org.apache.log.Logger getLogger()
// {
// return null;
// }
//初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行
public void setupTest(JavaSamplerContext context)
{
//获取界面中传递的值
String value1 = context.getParameter("key1");
//获取界面中传递的值
String value2 = context.getParameter("key2");
test=new MathTest();
start = System.currentTimeMillis();
}
//测试执行的循环体,根据线程数和循环次数的不同可执行多次
public SampleResult runTest(JavaSamplerContext context) {
//获取界面中传递的值
String value1 = context.getParameter("key1");
//获取界面中传递的值
String value2 = context.getParameter("key2");
int num1= Integer.parseInt(value1);
int num2= Integer.parseInt(value2);
SampleResult sampleresult = new SampleResult();
sampleresult.setSamplerData("请求参数num1:"+num1+"\n请求参数num2:"+num2);
// private SampleResult sampleresult = new SampleResult();
// TODO Auto-generated method stub
try {
sampleresult.sampleStart();
resultData = String.valueOf(test.sum(num1,num2));
if (resultData != null && resultData.length() > 0) {
sampleresult.setResponseData("结果是:"+resultData, null);
sampleresult.setDataType(SampleResult.TEXT);
sampleresult.setSuccessful(true);
}
} catch (Exception e) {
sampleresult.setSuccessful(false);
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
sampleresult.sampleEnd();// jmeter 结束统计响应时间标记
}
// sampleresult.sampleEnd();//重复结束,删除
return sampleresult;
}
//结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行
public void teardownTest(JavaSamplerContext context)
{
end = System.currentTimeMillis();
// 总体耗时
System.err.println("cost time:" + (end - start) + "毫秒");
}
}
注意点:
1: sampleresult.sampleStart();开始记时间。
2: sampleresult. sampleEnd();开始记时间。
3: params.addArgument("key1","1"); 添加默认参数
4:sampleresult.setSuccessful(true); 自定义断言结果
操作步骤,将代码工程导出为可执行jar
1:利用jmeter自带java请求调用自定义方法步骤
1⃣️将此jar包放入JMETER_HOME\lib\ext目录;
2⃣️重启jmeter
3⃣️建线程组、Java Request、查看结果树,进行测试;
如下图选择自己的jar,key 1 和 key2 可自定义,其他和测试http 请求一致
2:在jmeter中直接编写java代码
1:如果自己的jar过多,可以在jmeter根目录下新建一个文件夹如cxf
2:在jmeter_home/bin/jmeter.properties文件中添加
plugin_dependency_paths=./cxf
新建BeanShell Sampler
${x} ${y}空格隔开
x和y取自定义变量
调试的时候,打开选项-log Viewer