站长网 语言 JMeter进阶—详解Java sampler的设计方法

JMeter进阶—详解Java sampler的设计方法

JMeter Java Sampler介绍我们通常使用jmeter做http或者https请求的测试,但是有些场景我们需要直接调用Java接口进行性能测试, jmeter通过Java请求可以实现该需求(这样就可以处理一些公司自定义的协议了,开发提供协议接口,然后我们通过java sampler进行调

JMeter Java Sampler介绍

我们通常使用jmeter做http或者https请求的测试,但是有些场景我们需要直接调用Java接口进行性能测试, jmeter通过Java请求可以实现该需求(这样就可以处理一些公司自定义的协议了,开发提供协议接口,然后我们通过java sampler进行调用)。本文将会详细介绍jmeter中如何编写 java请求并对其进行调用!

 

添加Java请求

JMeter进阶——详解Java sampler的设计方法(附源码)

Java请求如下:

 

JMeter进阶——详解Java sampler的设计方法(附源码)

其中上图里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("####测试结束####"); 

这里对上述代码做详细分析:

 

主要用到的方法如下:

 

JMeter进阶——详解Java sampler的设计方法(附源码)

方法执行的先后顺序为:

 

getDefaultParameters() –>

 

setupTest(JavaSamplerContext context)–>

 

runTest(JavaSamplerContext context) –>

 

teardownTest(JavaSamplerContext context)

 

代码运行后,打开日志结果如下,参数para 对应代码String str=arg0.getParameter("para");

 

JMeter进阶——详解Java sampler的设计方法(附源码)

从日志中可以看到

 

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请求的显示名称,如下图:

 

JMeter进阶——详解Java sampler的设计方法(附源码)

setResponseData("ResponseData:参数匹配0个","UTF-8"); 打印到Response Data,如下图:

 

JMeter进阶——详解Java sampler的设计方法(附源码)

最后,方法setSuccessful(true)会影响测试结果

 

在IDE中开发Jmeter Java 请求

 

在IDE中开发Jmeter Java 请求与普通java开发一致,引入需要的java包以及jmeter相关jar包即可,引入Jmeter lib\ext下的ApacheJMeter_core.jar和ApacheJMeter_java.jar到IDE中!

本文来自网络,不代表站长网立场,转载请注明出处:https://www.tzzz.com.cn/html/biancheng/yuyan/2021/1103/18815.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部