- 首先,分析一下接口的响应数据,了解接口返回数据的结构类型,如下数据所示,我们想要获取的是normalList里面的status值,但是响应结果是列表,可能是会存在多个记录。所以在实现过程中我们通过遍历normalList中的所有数据,或者是通过下标的方式获取。
{
"code": 0,
"data": {
"normalList": [
{
"gsTime": "2022-06-07 15:34:38",
},
"otherPosTime": "",
"voltage": "",
"statusStr":"离线",
"statusAb": "离线>12天",
"powerStatus": "0",
"imei": "123456",
"direction": "90",
"status": "OFFLINE"
}
]
},
"ok": true
}
- JMeter目录,获取设备在线请求接口的响应数据,在该请求下添加beanshell后置处理器(Jmeter版本:5.4.3)
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/94ffab0640bedf4793df9ce9b4fac5aa.png)
- 这里需要使用到JSONObject, 以及JSONArray,通过遍历取出所有List中的数据。下载json.jar包,下载到jmeter工具下的lib目录中(我使用的是fastjson-1.2.72.jar)。
下载链接:https://pan.baidu.com/s/1DV63KsScW9XX60MulmCS0g
提取码:dls1
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONArray; // 导包
String response = prev.getResponseDataAsString(); // 得到接口响应结果response
JSONObject jsonObject = JSONObject.parseObject(response); // 定义json对象
// 取响应结果中的data可以通过getJSONObject来获取
// list 需要通过getJSONArray来取
JSONArray data = jsonObject.getJSONObject("data").getJSONArray("normalList");
for (int i = 0; i < data.size(); i++) {
// 取出来要转json格式在取值
JSONObject jo = data.getJSONObject(i);
log.info(jo.toJSONString());
String status = jo.getString("status");
// 通过put 设置成全局变量,在下一个接口使用${}进行调用
vars.put("status",status);
// 以下判断语句是根据我需要实现的内容来进行判断的
if(status.equals("OFFLINE")){
String imei = jo.getString("imei");
log.info("imei:{}", imei);
String statusStr = jo.getString("statusStr");
log.info("statusStr:{}", statusStr);
vars.put("imei",imei);
vars.put("statusStr",statusStr);
}
}
- 如果响应数据如图一所示,我们也可以不通过遍历,通过下标直接取到List中的值。具体实现如下
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONArray;
String response = prev.getResponseDataAsString();
JSONObject jsonObject = JSONObject.parseObject(response);
JSONArray dataList = jsonObject.getJSONObject("data").getJSONArray("normalList");
JSONObject data = (JSONObject)dataList.get(0);
String status = data.getString("status");
log.info("状态:{}",status);
- 如果报错出现以下情况试试换个json.jar.
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1a00930e7d3704baa07d9a81ce9c8574.png)
- jmeter引入jar包执行报错Error invoking bsh method:。我们可以把包只放在lib目录下,不需要在测试计划添加jar(添加也没事)。如果是将jar包放在lib->ext中,再在测试计划中添加这个jar包可能会报错
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f3e71ae78fdc377e9620ecb908ed2405.png)
交流学习: