咱们在作jmeter接口测试的时候,有时候碰到开发没返回数据total,只返回了一条条记录,但是呢,咱们又须要知道到底返回了多少条数据时,咋办呢?咋办呢?咋办呢?java
不要急,接下来,让咱们见证奇迹是如何诞生的!!!json
可能有人在网上看到不少关于解析json返回数据的文章,看来看去都是同样的,因而乎,我亲测了一下,果真没用!!!(多是本人技术太渣,没法领悟其中的真髓)没办法,只能看log信息一次次试咯!终于在各类大佬的帮助下搞好了!数组
第一步:将fastjson-1.2.62.jar包置于jmeter的lib目录下,并将该jar包添加到测试计划的Library中;不然会报:Typed variable declaration : Class: JSONObject not found in namespace的错误(保险起见,再将fastjson-1.2.62.jar包一样置于jmeter的lib/ext目录下,一样将该jar包添加到测试计划的Library中)函数
咱们再来看看要解析的数据格式post
咱们要获取到item数组长度,即item下有多少条数据。测试
第二步:咱们要获取到这些数据,来一个接口请求,获取一下数据,而后在接口请求下加一个后置处理器BeanShell PostProcessor。话很少说,代码撸起来!(接口大家本身搞一个,我就不贴了)spa
import com.alibaba.fastjson.*;日志
//获取请求的返回值
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+"=========================");对象
//将data转成JSONObject类型
JSONObject jsonData = data_obj.getJSONObject("data");blog
//日志打印jsonData值
log.info("==============jsonData=="+jsonData+"=========================");
//获取做为下一个请求post的参数值item(获取字符串)
//String item = jsonData.get("item").toString();
//获取做为下一个请求post的参数值item(获取JSONArray)
JSONArray item = jsonData.getJSONArray("item");
log.info("==============item=="+item+"=========================");
//获取item字符串的长度
//int len = item.length();
//获取item数组的长度
int len = item.size();
String itemLen = Integer.toString(len);
log.info("==============itemLen=="+itemLen+"=========================");
vars.put("itemNum",itemLen);
把上面的代码就这样塞到BeanShell PostProcessor进去。各位观众,看到没有,我几乎是每一行一个Log,我太难了。
第三步:执行一下,运气好的话就会看到jmeter日志里打印出如下的日志信息了
顺便说一下,代码里最后一行vars.put("itemNum",itemLen);这个是塞一个itemNum变量到jmeter里,方便后面去调用。这样一来,就获取到咱们想要的数据了。
划重点:BeanShell PostProcessor为啥有标红的呢?由于网上不少的全是这样写的:JSONObject data_obj = new JSONObject(response_data); 结果我也这样试了,理所固然我失败了,报错了,Can't find constructor: com.alibaba.fastjson.JSONObject( java.lang.String ) in class:,而后我去翻json源码,一看就两构造器:public JSONObject()和public JSONObject(boolean isNull),压根儿就没有public JSONObject(String text)这样的构造函数,不报错才怪勒!换个方法转化JSONObject对象,找到了JSON.parse(String text); 这样完美解决。