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

本文介绍如何使用JMeter 5.4.3的BeanShell后置处理器,解析接口返回的JSON数据,提取normalList中status值,并处理离线状态,包括IMEI和statusStr的获取和全局变量存储。
摘要由CSDN通过智能技术生成
  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. 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. 如果响应数据如图一所示,我们也可以不通过遍历,通过下标直接取到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. 如果报错出现以下情况试试换个json.jar.
    在这里插入图片描述
  2. jmeter引入jar包执行报错Error invoking bsh method:。我们可以把包只放在lib目录下,不需要在测试计划添加jar(添加也没事)。如果是将jar包放在lib->ext中,再在测试计划中添加这个jar包可能会报错
    在这里插入图片描述

交流学习:

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值