基于jmeter的java请求的二次开发
常用的方法:
①、addArgument("name", "value") 定义参数
②、sampleStart() 定义事务的开始,类似于LR的lr_start_transaction,和LR一样事务间不要放无关代码
③、sampleEnd() 定义事务的结束,类似于LR的lr_end_transaction
④、setSuccessful(true、false) 设置运行结果的成功或失败,Jmeter统计成功失败的次数,在聚合报告中能够体现。
二、实例介绍:
1、操作步骤:
◆ 用idea新建一个普通的java项目
◆ 引入jmeter的lib目录下的所有的jar包
◆ 编写测试类
◆ 测试类测试通过后,把项目导出为jar包放到 jmeter lib/ext目录下
◆ 启动jmeter,新建java请求,选择你编写的测试类,编写jmeter的测试用例
2、idea新建项目: file->new project->选择sdk->java ee
3、引入jmeterlib下的jar包:File –> Project Structure–> Modules->Dependencies -> + 选择Library 选择对应的jmeter目录下的lib
4、编写测试类
待测试的类
public class SercertGenerate { public String generate(String[] args) {
String key = args[0];
String secret = args[1];
String method = args[2];
String path = args[3];
String gmtDate = getGMTDate(); System.out.println(gmtDate);
String signStr = "date: " + gmtDate + "\n" + method + " " + path + " HTTP/1.1"; return signStr;
} public String getGMTDate() {
DateFormat dateFormat = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss 'GMT'", Locale.US);
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
return dateFormat.format(Calendar.getInstance().getTime());
} // public static void main(String[] args) {
//
// String[] strarray = {"7930665351","31d5b2fa00c64b25b6db60434e51ecd3","GET","/test?test=1"};
// System.out.println(generate(strarray));
//
//
//
// }
}
测试类
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import org.apache.jmeter.config.Arguments; public class SercertGenerateTest extends AbstractJavaSamplerClient { private String key;
private String secret;
private String method;
private String path;
private String gmtDate; private String resultData; /*
* 通过getDefaultParameters()可以来定义入参
*
* */
public Arguments getDefaultParameters() {
//定义属性对象,用来添加GUI参数
Arguments params = new Arguments();
params.addArgument("key", "");
params.addArgument("secret", "");
params.addArgument("method", "");
params.addArgument("path", "");
return params;
} //每个线程测试前执行一次,做一些初始化工作;
public void setupTest(JavaSamplerContext arg0) {
} //开始测试,从arg0参数可以获得参数值;
public SampleResult runTest(JavaSamplerContext arg0) {
key = arg0.getParameter("key");
secret = arg0.getParameter("secret");
method = arg0.getParameter("method");
path = arg0.getParameter("path");
SampleResult sr = new SampleResult();
sr.setSampleLabel("Java request");
try {
sr.sampleStart();// jmeter 开始统计响应时间标记
SercertGenerate sercertGenerate = new SercertGenerate();
// 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
gmtDate = sercertGenerate.getGMTDate(); String[] strarray = {key,secret,method,path};
resultData = sercertGenerate.generate(strarray); if (resultData != null && gmtDate != null) {
sr.setResponseData("日期结果是:" + gmtDate + "加密结果是:" + resultData, null);
sr.setDataType(SampleResult.TEXT); }
System.out.println(resultData); sr.setSuccessful(true);
} catch (Throwable e) {
sr.setSuccessful(false);
e.printStackTrace();
} finally {
sr.sampleEnd();// jmeter 结束统计响应时间标记
}
return sr;
} //测试结束时调用;
public void teardownTest(JavaSamplerContext arg0) {
// System.out.println(end);
// System.out.println("The cost is"+(end-start)/1000);
} public static void main(String[] args)
{ // 测试测试类是否有问题,打包的时候需要注释掉
Arguments params = new Arguments();
params.addArgument("key", "7930665351");
params.addArgument("secret", "31d5b2fa00c64b25b6db60434e51ecd3");
params.addArgument("method", "GET");
params.addArgument("path", "/test?test=1");
JavaSamplerContext arg0 = new JavaSamplerContext(params);
SercertGenerateTest test = new SercertGenerateTest();
test.setupTest(arg0);
test.runTest(arg0);
test.teardownTest(arg0);
} }
5、idea导出jar包:File > Project Structure > Artifacts + > JAR > Empty 选择你的项目源文件的模块(注意:这里不是选择的web这个模块) Build > Build Artifacts... > sampleName > Build/Rebuild
6、jar包放到jmeter的lib/ext目录后,启动jmeter,新建java请求
原文:https://blog.csdn.net/haiweizhourong/article/details/82153991