网站首页 > 教程文章 正文
JMeter Java Sampler介绍
我们通常使用jmeter做http或者https请求的测试,但是有些场景我们需要直接调用Java接口进行性能测试, jmeter通过Java请求可以实现该需求(这样就可以处理一些公司自定义的协议了,开发提供协议接口,然后我们通过java sampler进行调用)。本文将会详细介绍jmeter中如何编写 java请求并对其进行调用!
添加java请求
Java请求如下:
其中上图里com.my.demo.JmeterDemo2,即我们需要调用的Java类;str是我们需要传入的参数。那么Jmeter中如何实现对java请求的调用呢?我会在本文详细讲解!
设计Java请求思路与代码解析
如何编写jmeter java请求,简单地说分如下几点:
1写一个类,叫做Demo,使其继承AbstractJavaSamplerClient;
2.在public SampleResult runTest(JavaSamplerContext arg0)方法里,写处理java代码的逻辑;
3.在public Arguments getDefaultParameters()方法里定义从jmeter中传入java代码的参数;
4.把类Demo 打成jar包并放入jmeter的\lib\ext 目录下(如果Demo需要依赖其它jar包需要一起放入\lib\ext目录下)
实例代码如下:
import org.apache.commons.lang3.StringUtils;
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 JmeterDemo2 extends AbstractJavaSamplerClient
{
private SampleResult sr;
public Arguments getDefaultParameters() {
Argumentsparams = new Arguments();
params.addArgument("str", "");
return params;
}
public SampleResult runTest(JavaSamplerContext arg0) {
this.sr.setSampleLabel("commonsio-demo2");
try {
Stringstr=arg0.getParameter("para");
//使用jar包中StringUtils类的countMatches方法来统计字符串a的个数
int num=StringUtils.countMatches(str, "a");
if (num==0) {
this.sr.setResponseMessage("ResponseMessage:参数匹配0个"); //Sample Result 中的Response message
this.sr.setResponseData("ResponseData:参数匹配0个","UTF-8"); //Response Data的值,会被后面的覆盖
this.sr.setSuccessful(true);//Sample Result 中的结果
}else {
this.sr.setResponseMessage("ResponseMessage:参数匹配"+num+"个");
this.sr.setResponseData("ResponseData:参数匹配"+num+"个","UTF-8");
this.sr.setSuccessful(false);
}
}catch (Exception e) {
this.sr.setResponseMessage(e.getMessage().toString());
this.sr.setSuccessful(false);
}finally {
//this.sr.setResponseData("结束测试", "UTF-8");
super.getNewLogger().info("####测试执行####");
try {
Thread.sleep(500);
}catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return this.sr;
}
public void setupTest(JavaSamplerContext context) {
super.setupTest(context);
super.getNewLogger().info("####测试开始####");
this.sr = new SampleResult();
this.sr.sampleStart();
}
public void teardownTest(JavaSamplerContext context) {
super.teardownTest(context);
this.sr.sampleEnd();
super.getNewLogger().info("####测试结束####");
}
}
这里对上述代码做详细分析:
主要用到的方法如下:
方法执行的先后顺序为:
getDefaultParameters() -->
setupTest(JavaSamplerContext context)-->
runTest(JavaSamplerContext context) -->
teardownTest(JavaSamplerContext context)
代码运行后,打开日志结果如下,参数para 对应代码String str=arg0.getParameter("para");
从日志中可以看到
setupTest(JavaSamplerContext context) 中的代码被执行1次,打印
####测试开始####
teardownTest(JavaSamplerContext context) 中的代码被执行1次,打印
####测试结束####
而runTest中的方法super.getNewLogger().info("####测试执行####"); 被执行5次,因为在线程组中,设置执行5次。(线程组线程执行的次数,影响java请求中的runTest,而不会影响setupTest和teardownTest)。方法super.getNewLogger().info("")会把值写入日志。
setResponseMessage("ResponseMessage:参数匹配0个");打印到Sample Result 中的Response message里;setSampleLabel("commonsio-demo2");设置java请求的显示名称,如下图:
setResponseData("ResponseData:参数匹配0个","UTF-8"); 打印到Response Data,如下图:
最后,方法setSuccessful(true)会影响测试结果
在IDE中开发Jmeter Java 请求
在IDE中开发Jmeter Java 请求与普通java开发一致,引入需要的java包以及jmeter相关jar包即可,引入Jmeter lib\ext下的ApacheJMeter_core.jar和ApacheJMeter_java.jar到IDE中!
猜你喜欢
- 2025-09-06 Fiddler抓包测试基础教程_fiddler抓包tunnel to
- 2025-09-06 面试前这些接口测试知识要点,终于梳理好了,拿走不谢
- 2025-09-06 12K+ Star!新一代的开源持续测试工具!
- 2025-09-06 性能测试利器-Locust框架解析_测试用的框架
- 2025-09-06 Fiddler入门教程全家桶,建议收藏
- 2025-09-06 性能测试完整流程_性能测试流程介绍
- 2025-09-06 Elasticsearch 8.X DSL 如何优化更有助于提升检索性能?
- 2025-09-06 软件负载测试工具常用的有哪些?_负载测试用例
- 2025-09-06 接口测试——requests 的基本了解
- 2025-09-06 性能测试工具Locust_性能测试工具哪个好用
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- mybatis plus page (35)
- vue @scroll (38)
- 堆栈区别 (33)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)
- redis aof rdb 区别 (33)
- 302跳转 (33)
- http method (35)
- js array splice (33)