Jmeter针对API接口的测试
jmeter简介与安装
Apache JMeter是Apache组织开发的基于Java的测试工具,安装jmeter之前,需要先安装设置java环境,jdk下载地址
JMeter 下载地址
解压后,以管理员身份运行bin/jmeter.bat
注意 一定要以管理员身份运行 否则部分功能将会出现问题
image.pngjmeter基础使用
单一接口测试
我们现在所定义的接口一般为http/https请求方式,如何创建一个http请求测试呢?
打开jmeter,创建一个测试计划,并保存测试计划
右击测试计划 添加线程组 设置好线程组名称,比如说我们要测登陆功能,将线程组名称设置为登陆
image2.png创建测试请求
image3.png对接口测试
以登陆接口为例,登陆接口的定义如下
image5.png接上一步的步骤,我们在http请求中填写的参数应该如下
image6.png创建接口响应结果
image7.png运行测试
如图,这样我们就可以看到结果的响应信息了
image8.png
断言测试接口响应结果是否达到了预期
我们的接口都是采取json格式,我们需要编写代码解析json格式,此外需要引入额外的json解析包
json.jar大家百度自行下载
将该文件复制到jemter的lib目录下,重新启动jmeter
beanshell解析json
添加一个beanshell断言,关于beanshell的语法及使用,参考下面的文章
image9.png基础的json解析代码
image10.png代码说明
import org.json.*;
//获取接口响应数据,此两行代码无需变更
String responseData = prev.getResponseDataAsString();
JSONObject dataObj = new JSONObject(responseData);
//根据响应的json串,获取result code字段,例如,接口的响应信息为 {"reuslt::{"code":"10000"}},那么我们通过下面的代码可以取得10000这个值
String resultCode = dataObj.get("result").get("code").toString();
log.info("resultCode:"+resultCode);
// 字符串的等于比较请使用equals
if (resultCode.equals("10000"))
{
//到预期结果,将Failure设置true,表示无需断言,测试通过,FailureMessage 为断言信息,
Failure = false;
FailureMessage = "ok";
}
else
{
//未达到预期效果,测试失败
Failure = true;
FailureMessage = "fail";
}
如果测试未通过,测试结果中将显示红色
image11.png流程测试
上面的测试我们只是测试了单一接口,但测试过程中我们需要进行完善的流程测试,比如说支付,需要用户先登陆,然后在填写支付金额等信息进行支付,这是一个系列的流程,需要对一系列的流程测试,测试步骤接上面的内容进行
对于支付接口,我们需要从登陆接口获取usid以及access_token
还是上面那段代码,获取usid及access_token并赋值到jmeter变量中
import org.json.*;
//获取接口响应数据,此两行代码无需变更
String responseData = prev.getResponseDataAsString();
JSONObject dataObj = new JSONObject(responseData);
//根据响应的json串,获取result code字段,例如,接口的响应信息为 {"reuslt::{"code":"10000"}},那么我们通过下面的代码可以取得10000这个值
String resultCode = dataObj.get("result").get("code").toString();
log.info("resultCode:"+resultCode);
// 字符串的等于比较请使用equals
if (resultCode.equals("10000"))
{
//获取usid及access_token
String usid = dataObj.get("data").get("profile").get("id").toString();
String access_token = dataObj.get("data").get("access_token").toString();
//赋值到jmeter变量
vars.put("usid",usid);
vars.put("access_token",access_token);
//到预期结果,将Failure设置true,表示无需断言,测试通过,FailureMessage 为断言信息
Failure = false;
FailureMessage = "ok";
}
else
{
//未达到预期效果,测试失败
Failure = true;
FailureMessage = "fail";
}
新建一个http请求
1.png此时我们已将这两部流程串联起来了,请求信息中查看上述两个字段已经从登陆结果中获取并传入
331.png一个基础的流程测试这样完成了