在我所接触的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进行参数化
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架