写在前面
学习了jmeter测试之后,学会了简单的接口请求测试,但是在现实场景中,很多情况下需要根据业务场景来进行接口测试,这是需要编码来完成的。这篇博文简单叙述了如何编写自定义的java 接口请求,从而达到根据业务需求来测试接口。
创建一个maven工程(这里创建过程就不叙述了)
这里直接给出maven依赖
UTF-8
UTF-8
org.apache.jmeter
ApacheJMeter_java
3.2
provided
com.alibaba
fastjson
1.2.58
jmeter-test
maven-assembly-plugin
jar-with-dependencies
com.demo.Test
make-assembly
package
single
创建测试类package com.demo;
import java.util.Random;
import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
import com.alibaba.fastjson.JSONObject;
public class Test implements JavaSamplerClient {
private static final String[] apps = {"109000", "109001", "109002", "109003", "109004", "109005", "109006",
"109007", "109008", "109009",};
private static final String[] mobiles = {"19956596670", "19956596671", "19956596672", "19956596673", "19956596674",
"19956596675", "19956596676", "19956596677", "19956596678", "19956596679",};
// URLNAME 就是在图形化界面当中显示的变量名称
private static final String ACCOUNT = "account";
private static final String PSWD = "pswd";
private static final String MOBILE = "mobile";
private static final String MSG = "msg";
private static final String NEEDSTATUS = "needstatus";
// 用来存储响应的数据,目的是将响应结果放到察看结果树当中
private String resultData;
//这个就是用来初始化一些固定参数的,如果不需要可以删除
public Arguments getDefaultParameters() {
System.out.println("getDefaultParameters run");
Arguments arguments = new Arguments();
arguments.addArgument(PSWD, "123456");
arguments.addArgument(MSG, "【云树科技】测试短信");
arguments.addArgument(NEEDSTATUS, "true");
return arguments;
}
/**
* 这个方法就是一个初始化方法,我们所有的初始化的动作都可以在这里写
*
* @param javaSamplerContext
*/
public void setupTest(JavaSamplerContext javaSamplerContext) {
}
/**
* 这个方法就是实现你具体功能逻辑的方法
*
* @param javaSamplerContext
* @return
*/
public SampleResult runTest(JavaSamplerContext javaSamplerContext) {
SampleResult result = new SampleResult();
System.out.println("runTest run");
String pswd = javaSamplerContext.getParameter(PSWD);
String msg = javaSamplerContext.getParameter(MSG);
String needStatus = javaSamplerContext.getParameter(NEEDSTATUS);
String url = "http://192.168.20.121/test";
JSONObject json = new JSONObject();
json.put(ACCOUNT, apps[new Random().nextInt(10)]);
json.put(PSWD, pswd);
json.put(MOBILE, mobiles[new Random().nextInt(10)]);
json.put(MSG, msg);
json.put(NEEDSTATUS, needStatus);
// resultData = "这就是响应结果";
resultData = HttpUtil.sendJsonPost(url, json);
System.out.println(resultData);
result.setSampleLabel("自定义java请求访问");
result.setSuccessful(true);// 告诉查看结果树访问是否成功
result.setResponseData(resultData, null);
result.setDataType(SampleResult.TEXT);
return result;
}
/**
* 这个方法就是来做一些收尾的工作的。
*
* @param javaSamplerContext
*/
public void teardownTest(JavaSamplerContext javaSamplerContext) {
System.out.println("teardownTest run");
}
public static void main(String[] args) {
Second request = new Second();
Arguments arguments = new Arguments();
arguments.addArgument(PSWD, "123456");
arguments.addArgument(MSG, "【云树科技】测试短信");
arguments.addArgument(NEEDSTATUS, "true");
JavaSamplerContext javaSamplerContext = new JavaSamplerContext(arguments);
request.runTest(javaSamplerContext);
}
}
注意:
1.测试类中一定要用main方法,且一定要运行一次main方法,保证可以顺利调通接口,收到返回值,不然即使达成jar包后也不能运行
2.runTest()方法为业务逻辑实现的地方,所有业务逻辑都可以在这里面做处理。
getDefaultParameters()是初始化一些固定的请求参数,如果参数是变动的,可以不用在这里面初始化,可以在runTest()里面进行参数初始化,具体请看我 json.put(ACCOUNT, apps[new Random().nextInt(10)]);这一行代码,我的ACCOUNT就是变量。
打包测试
利用maven命令mvn clean package打包,打包时会生成两个包,注意,一定要选择包名中有jar-with-dependencies的jar包,然后放入jmeter -->lib --> ext 目录下
运行jmeter
在jmeter -->bin 目录下,直接运行jmeter.bat,如下图
添加测试计划(如果界面是英文,直接修改bin目录下jmeter.properties中第37行,修改为language=zh_CN即可)
1.右击测试任务,如下图
2.第一步后,在测试计划下会有个setUp线程(可以自定义命名)组目录,右击,添加jave请求。
3.第二步后,在setUp线程下会有个java请求,选择类名称,找到你刚才编写的测试类
4.根据自己需求,添加结果树,聚合结果等,这里演示添加汇总报告,继续右击setUp线程,添加汇总报告
添加成功后如下图
5.配置测试计划。左键单击setUp线程组,会看到如下图片:
主要修改以下参数:
线程数:一次性启动多少线程,根据自己测试标准来填写
Ramp-UP时间:表示多少秒内启动完成这些线程,比如我设置的是1,则表示1秒内要启动线程数配置的所有线程
循环次数:表示上面线程数一共循环执行多少次,比如我线程数设置的是50,循环次数是10,则最后请求次数应该为500次
下面的调度器配置,可以自行去研究下,这里不做详细说明。
持续时间:代表测试一共要持续多少时间,上面循环次数勾上永久时,需要填写这个参数
启动延迟:启动后多长时间才开始测试,有点定时测试的意思
至此,jmeter测试演示完毕。注意,运行前要保存配置,一般保存在bin目录下。