一、http请求的脚本编写
以线上打款接口为例:
1、启动jmeter,建立一个测试计划。
启动:打开jmeter文件夹,bin文件→jmeter.bat(Windows执行文件)文件,就可以启动jmeter了
2、添加用户定义参数,定义IP和端口号
3、添加Http信息头管理器
4、添加Http Cookie管理器
5、添加逻辑控制器及登录http接口的请求
6、添加线上打款Http接口的请求
7、添加聚合报告查看结果
二、Java请求的脚本编写
以扫码支付接口为例:
目的:对开放平台的加密接口进行测试
(1)、核心步骤
1.创建一个Java maven工程;
2.将JMeter的lib目录下的jar文件添加进此工程的POM.xml中
<dependencies>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.1.8</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>21.0-rc1</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.0</version>
</dependency>
</dependencies>
3.创建一个类并实现JavaSamplerClient接口或继承AbstractJavaSamplerClient,并重写;
public Arguments getDefaultParameters();设置可用参数及的默认值;
public void setupTest(JavaSamplerContext arg0):每个线程测试前执行一次,做一些初始化工作;
public SampleResult runTest(JavaSamplerContext arg0):开始测试,从arg0参数可以获得参数值;
public void teardownTest(JavaSamplerContext arg0):测试结束时调用;
4.打包成Runnable Jar File;
mvn install
5.将此jar包放入JMETER_HOME\lib\ext目录;
6.以管理员身份打开JMeter;
7.创建线程组、Java Request、查看结果树,进行测试;
(2)、实例
public class perfOrderScan implements JavaSamplerClient {
private SampleResult results;
private String type;
private String total_fee;
private String store_id;
private String cashier_id;
// 设置传入的参数,可以设置多个,已设置的参数会显示到Jmeter的参数列表中
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("type", "0");// 设置参数,并赋予默认值0
params.addArgument("total_fee", "0");// 设置参数,并赋予默认值0
params.addArgument("store_id", "0");// 设置参数,并赋予默认值0
params.addArgument("cashier_id", "0");// 设置参数,并赋予默认值0
return params;
}
// 初始化方法,实际运行时每个线程仅执行一次,在测试方法运行前执行
public void setupTest(JavaSamplerContext arg0) {
results = new SampleResult();
}
// 测试执行的循环体,根据线程数和循环次数的不同可执行多次
public SampleResult runTest(JavaSamplerContext arg0) {
type = arg0.getParameter("type"); // 获取在Jmeter中设置的参数值
total_fee = arg0.getParameter("total_fee"); // 获取在Jmeter中设置的参数值
store_id = arg0.getParameter("store_id"); // 获取在Jmeter中设置的参数值
cashier_id = arg0.getParameter("cashier_id"); // 获取在Jmeter中设置的参数值
results.sampleStart();// jmeter 开始统计响应时间标记
try {
String method = "openapi.payment.order.scan";
String merchant_order_sn = RandomUtil.simpleUUID();
Map content = Maps.newHashMap();
content.put("merchant_order_sn", merchant_order_sn);
content.put("type",type);
content.put("total_fee",total_fee);
content.put("store_id",store_id);
content.put("cashier_id",cashier_id);
String biz_content = JSONUtil.toJsonStr(content);
JSONObject response = ATSBaseTest.postOpenapiRequest(method,biz_content,null,null);
// 通过下面的操作就可以将被测方法的响应输出到Jmeter的察看结果树中的响应数据里面了。
if (response != null && response.size() > 0) {
results.setResponseData("结果是:"+response, null);
results.setDataType(SampleResult.TEXT);
}
results.setSuccessful(true);
// System.out.println(response);
// 被测对象调用
} catch (Throwable e) {
results.setSuccessful(false);
e.printStackTrace();
} finally {
results.sampleEnd();// jmeter 结束统计响应时间标记
}
return results;
}
// 结束方法,实际运行时每个线程仅执行一次,在测试方法运行结束后执行
public void teardownTest(JavaSamplerContext arg0) {
}
//调试代码
// public static void main(String[] args) {
// // TODO Auto-generated method stub
// Arguments params = new Arguments();
// params.addArgument("type", "1");// 设置参数,并赋予默认值0
// params.addArgument("total_fee", "0.01");// 设置参数,并赋予默认值0
// params.addArgument("store_id","7771");
// params.addArgument("store_id","1512948");
// JavaSamplerContext arg0 = new JavaSamplerContext(params);
// perfOrderScan test = new perfOrderScan();
// test.setupTest(arg0);
// test.runTest(arg0);
// test.teardownTest(arg0);
// }
}
(3)、JMeter Java Sampler介绍
Arguments | getDefaultParameters() 用于获取界面的参数 |
SampleResult | runTest(JavaSamplerContext context) 类似于LR的Action,result.sampleStart()一个事务开始,result.sampleEnd()一个事务 结束 |
void | setupTest(JavaSamplerContext context) 初始化方法,类似于LR的init和Junit中的setUp() |
void | teardownTest(JavaSamplerContext context) 类似于LR的end和Junit中的tearDown() |
执行的先后顺序为:
getDefaultParameters() --> setupTest(JavaSamplerContext context)
--> runTest(JavaSamplerContext context)
--> teardownTest(JavaSamplerContext context)
常用的方法:
①、addArgument("name", "value") 定义参数
②、sampleStart() 定义事务的开始,类似于LR的lr_start_transaction,和LR一样事务间不要放无关代码
③、sampleEnd() 定义事务的结束,类似于LR的lr_end_transaction
④、setSuccessful(true、false) 设置运行结果的成功或失败,Jmeter统计成功失败的次数,在聚合报告中能够体现。
(4)、添加线程组和Java Request