目录
java请求
作用场景
JavaTest类源码分析
编写java请求样例
新建java工程,导入jmeter主要依赖。
编写java请求类,继承AbstractJavaSamplerClient,
导入工程为jar包,放置jmeter安装目录下lib/ext目录
重启jmeter,添加java请求,查看到我们新编写的java请求类
查看运行结果,
java请求
JMeter最大利刃-java请求,通过简单代码,实现java能做的所有事
作用场景
目前一般应用架构都喜欢MQ、kafka等中间件,进行异步和解耦处理;所有性能测试中也有大量测试项目,直接发送请求到MQ、kafka等中间件上产生压力测试。此时使用java请求元件,就是最大利器。java 请求就是直接通过编写java 代码进行java api 调用,实现性能测试。
JMeter提供org.apache.jmeter.protocol.java.test.JavaTest类,实现java请求的简单例子。我们可以模仿它来扩展java请求元件,用来做接口测试。
JavaTest类源码分析
- 查看JMeter源代码中JavaTest类,分析发现JavaTest继续了AbstractJavaSamplerClient类,这个抽象类主要方法3个,JavaTest中主要是覆盖这3个方法
- 2. 查看AbstractJavaSamplerClient类,主要有3个方法,实现JavaSamplerClient接口
- 3. JavaSamplerClient接口类,主要4个方法,主要方法如下:
通过源代码分析,主要就是这个4个方法
setupTest方法 ,在线程执行前执行一次此方法
runTest,在线程中反复执行方法
teardownTest方法,在线程中结束时,执行一次此方法
getDefaultParameters方法,设置java界面中默认值
所以我们要编写一个java请求,只要继承AbstractJavaSamplerClient,实现一个runTest方法,因为其它方法,其实可以根据需求进行覆盖。
编写java请求样例
我们使用编写java请求脚本,最好使用java的IDE工具,如eclipse;开发脚本步骤如下:
-
新建java工程,导入jmeter主要依赖。
主要导入jar包如下,可以从jmeter安装目录中lib下引入,这个可能保证版本一致
编写java请求类,继承AbstractJavaSamplerClient,
主要脚本如下
package com.pt.jmeter;
import java.io.Serializable;
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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class JavaTest01 extends AbstractJavaSamplerClient implements Serializable {
private static final long serialVersionUID = 1958462245182570120L;
private static final Logger LOG = LoggerFactory.getLogger(JavaTest01.class);
/**
* 线程主要执行方法
* 编写主要测试代码
*/
@Override
public SampleResult runTest(JavaSamplerContext arg0) {
LOG.warn("线程执行,主要执行runTest");
String param1 = arg0.getParameter("param1");
String param2 = arg0.getParameter("param2");
String param3 = arg0.getParameter("param3");
LOG.warn("param1:" +param1+" ,param2:" +param2+" ,param3:" +param3);
SampleResult srResult =new SampleResult();
srResult.setDataEncoding("UTF-8");
//开启取样计时
srResult.sampleStart();
LOG.warn("执行主要测试api" );
//结束计时
srResult.sampleEnd();
//设置取样器data
srResult.setSamplerData("请求body");
srResult.setDataType(SampleResult.TEXT);
//设置响应code
srResult.setResponseCode("响应code");
//设置响应内容
srResult.setResponseMessage("响应内容");
srResult.setResponseData("响应内容", null);
//设置取样是否成功,true为成功,false为失败
srResult.setSuccessful(true);
return srResult;
}
/**
* 线程执行前,执行此方法
* 编写执行前,需要提前当初使化代码,如登陆,建立连接等
*/
@Override
public void setupTest(JavaSamplerContext context) {
LOG.warn("线程执行前,执行1次setupTest");
}
/**
* 线程结束时,执此行方法
* 一般线程后,需要释放的代码,如退出,关闭资源等
*/
@Override
public void teardownTest(JavaSamplerContext context) {
LOG.warn("线程结束时,执行1次teardownTest");
}
/**
* 设置java请求界面默认参数
*/
@Override
public Arguments getDefaultParameters() {
LOG.warn("执行设置,java请求界面默认值参数");
Arguments params = new Arguments();
params.addArgument("param1", "test1");
params.addArgument("param2", "test2");
params.addArgument("param3", "test3");
return params;
}
public static void main(String[] args) {
JavaTest01 jTest01=new JavaTest01();
Arguments arguments =new Arguments();
arguments.addArgument("param1", "test1");
arguments.addArgument("param2", "test2");
arguments.addArgument("param3", "test3");
JavaSamplerContext arg0 =new JavaSamplerContext(arguments);
jTest01.setupTest(null);
jTest01.runTest(arg0);
jTest01.teardownTest(null);
}
}
编写好,此次类,可以此类当成一个模块类,每一次java脚本,只根据需要修改部分脚本及调用api,请进行使用了。
导入工程为jar包,放置jmeter安装目录下lib/ext目录
注意:需要代码中有使用其它第三方jar包,如果打包是普通jar包(如上图)需要拷贝第三方jar包到JMeter安装目录lib/ext目录
重启jmeter,添加java请求,查看到我们新编写的java请求类
查看运行结果,
设置1个线程,运行2次场景,运行。
查看日志显示,查看脚本方法运行情况(如下图);单线程分析,线程启动后,首先运行setupTest方法,再运行2次runTest方法;线程结束后,再运行teardownTest方法