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断言