当前位置:   article > 正文

Jmeter---BeanShell解析JSON格式的响应数据_jmeter beanshell解析响应json

jmeter beanshell解析响应json
  1. 首先,分析一下接口的响应数据,了解接口返回数据的结构类型,如下数据所示,我们想要获取的是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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  1. JMeter目录,获取设备在线请求接口的响应数据,在该请求下添加beanshell后置处理器(Jmeter版本:5.4.3)
    在这里插入图片描述
  2. 这里需要使用到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);
     }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  1. 如果响应数据如图一所示,我们也可以不通过遍历,通过下标直接取到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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  1. 如果报错出现以下情况试试换个json.jar.
    在这里插入图片描述
  2. jmeter引入jar包执行报错Error invoking bsh method:。我们可以把包只放在lib目录下,不需要在测试计划添加jar(添加也没事)。如果是将jar包放在lib->ext中,再在测试计划中添加这个jar包可能会报错
    在这里插入图片描述

交流学习:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/1014181
推荐阅读
相关标签
  

闽ICP备14008679号