JMeter获取json响应的某个列表长度的2种方法

在做json断言时,遇到一个问题,我需要获取到某个json响应值的某个列表长度,该json响应内容如下:

{
    "success": true,
    "msg": null,
    "obj": {
        "pat_total": 191,
        "pats": [{},{},{}...]
   }
}
实现该需求有两种方法,分别为在beanshell后置处理器中添加脚本代码以及直接使用jp@gc - JSON/YAML Path Extractor插件

方法1:
1、https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2/2.0.22,下载fastjson2-2.0.22.jar

2、将jar包放到jemter文件夹lib中,并在测试计划中添加该jar包

3、在http取样器下添加BeanShell PostProcessor,添加如下脚本代码

import com.alibaba.fastjson2.*;

//获取请求的返回值
String response_data = prev.getResponseDataAsString();
//日志打印获取请求的返回值
log.info("================response data: "+response_data+"====");
//将String类型的返回值构造成JSONObject对象
JSONObject data_obj = JSON.parse(response_data);
//日志打印data_obj值
log.info("================data_obj: "+data_obj+"==============");
//将obj转成JSONObject类型
JSONObject jsonObj = data_obj.getJSONObject("obj");
//日志打印jsonObj值
log.info("================jsonObj: "+jsonObj+"================");
//获取pats
JSONArray pats = jsonObj.getJSONArray("pats");
//日志打印pats值
log.info("================pats: "+pats+"================");
//获取pats列表长度
int len = pats.size();

String len_str = Integer.toString(len);
log.info("================len: "+len+"========================");
//把长度塞进pats_len这个JMeter变量里
vars.put("pats_len",len_str);

4、在其他地方即可直接使用${pats_len}调用该长度进行断言

方法2:
1、进入插件管理器,若JMeter中没有该选项,则前往https://jmeter-plugins.org/install/Install/进行下载jar包,将其放到lib/ext中,并重启JMeter

2、搜索json,找到并下载

3、在http取样器下使用该插件进行提取

运行结果:

然后添加BeanShell断言

当然也可以直接在http取样器下添加 jp@gc - JSON/YAML Path Assertion进行断言,而不需要提取器和beanshell断言


posted @ 2023-06-06 18:58  少年不太冷2  阅读(649)  评论(0)    收藏  举报