在我所接触的jmeter脚本编写中,接触到的的最多的取样器就是http取样器,但是如果用来测试rpc等就不合适了,看网上的资料发现了java请求的魅力,就总结下java请求的编写吧
1.导入包到工程,将jmeter\lib下的所有jar包,尤其是ext中的ApacheJMeter_core.jar,ApacheJMeter_java.jar都是必须的,这是保险起见
2.编写class文件
package wuchun;
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;
//这四个包就在我们刚才导入的jmeter jar包中
public class Test extends AbstractJavaSamplerClient {
private static long start = 0;
private static long end = 0;
private String id = "0";
@Override
public Arguments getDefaultParameters() {
//可选,定义可用参数及默认值
Arguments args = new Arguments();
args.addArgument("id", "123456789"); // 添加默认参数及对应值 //参数名称:id 参数值:123456789
return args;
}
@Override
public SampleResult runTest(JavaSamplerContext context) {
// 必选,定义线程运行的请求
String id = context.getParameter("id");
SampleResult sr = new SampleResult(); // 为避免多线程问题,设置sr为局部变量
sr.setSampleLabel("request1"); // 设置采样标签,对应GUI 聚合报告里的Label值
try {
//Start
sr.sampleStart(); // 开始统计响应时间,取样器开始运行
// TODO
System.out.println(id);
sr.setSamplerData("id="+id);//设置请求的数据,在查看结果树中可以看到
sr.setResponseData("id="+id, "utf-8"); //设置响应的数据第一个参数 设置JMeter GUI "查看结果树" 请求对应的"响应数据" // 执行压测前 建议注释掉,第二个参数 为编码, 设置JMeter GUI "取样器结果" DataEncoding: utf-8 // 第二个参数为 "", 则表示默认为 GBK编码
sr.setDataType(SampleResult.TEXT); // 设置JMeter GUI "取样器结果" Data type ("text"|"bin"|""):text
sr.setResponseMessageOK(); // 设置JMeter GUI "取样器结果" Response message: OK
sr.setResponseCodeOK(); // 设置JMeter GUI "取样器结果" Response code: 200
} catch (Exception e) {
sr.setSuccessful(false);//设置请求失败
sr.setResponseMessage("server error"); // 设置JMeter GUI "取样器结果" Response message: server error
sr.setResponseCode("500"); // 设置JMeter GUI "取样器结果" Response code: 500
e.printStackTrace();
} finally {
// End
sr.sampleEnd();//设置取样器结束运行
}
return sr;
}
@Override
public void setupTest(JavaSamplerContext context) {
// 开始时间
System.out.println("setup....");
start = System.currentTimeMillis();
}
@Override
public void teardownTest( JavaSamplerContext context){
// 结束时间
System.out.println("teardown....");
end = System.currentTimeMillis();
// 总体耗时
System.err.println("cost time:" + (end - start) / 1000);
}
}其中重要的就是这几个方法
public Arguments getDefaultParameters();可选,定义可用参数及默认值;
public void setupTest(JavaSamplerContext arg0):可选,测试前执行,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0);必选,实现自定义请求;
public void teardownTest(JavaSamplerContext arg0):可选,测试结束时调用;
3.将上述打jar包,并放入lib\ext中
4.重启jmeter,添加java请求,设置如下
5.运行,结果如下
总结:java请求更为灵活,可以自定义请求的内容,其中重要的就是四个方法,请求和返回可以自定义,参数也可以结合jmeter进行参数化