题目,如上图;
采用beanshell postprocessor结合fastjson库的方法;
先配置环境,我用的是jmeter 5.11,fastjson用到的1.2.68的版本;需要将fastjson.jar包放到jmeter的安装路径的lib\ext库中,并且在jmeter的Test Plan中引用这个jar包;
BeanShell Sampler构造json响应结果;代码如下;
return "{\"Status Code\":200,\"ret\":{\"id\":\"id\",\"imageList\":[{\"originUrl\":\"图片链接1\",\"originWidth\":200,\"originHeight\":300},{\"originUrl\":\"图片链接2\",\"originWidth\":300,\"originHeight\":300}]}}"
BeanShell PostProcess代码如下;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; String rs = prev.getResponseDataAsString();//获取响应结果 JSONObject aa = JSON.parseObject(rs);//整个响应结果作为JSON对象; JSONObject ret=aa.getJSONObject("ret");//获取某一部分对象。即,json串中{}的内容; JSONArray imageList=ret.getJSONArray("imageList");//获取列表。即json串中的[]的内容; log.info("结果:"+imageList); //不能写成log.info(imageList);这样会报错;需要加字符串; boolean result; for(int i=0;i<imageList.size();i++){ String x=imageList.getJSONObject(i).getString("originHeight"); String y=imageList.getJSONObject(i).getString("originWidth"); log.info(x+" "+y);//查看结果; if(!(x.equals("300")) || !(y.equals("200"))){//注意整数需要使用"括起来,作为字符串; log.info("第"+(i+1)+"项服务器返回结果不正确"); result=true; } } if(!result){ log.info("服务器返回结果正确"); }
com.alibaba的fastjson简介
fastjson是一个Java语言编写的高性能功能完善的JSON库。
常用api;
1.String JSON.toJSONString(Object object) //将对象序列化成json字符串;//我认为String代表类型;可以使用String类型的变量去接收这个值;
2.JSONObject JSON.parseObject(String text) //将json字符串反序列化成JSON对象;
3.JSONArray JSONObject.getJSONArray(String key) //根据key得到json中的json数组;
4.JSONObject JSONArray.getJSONObject(int index) //根据下标拿到json数组的json对象;
5.String JSONObject.getString(String key) //根据key拿到json的字符串值;
6.int JSONObject.getIntValue(String key) //根据key拿到json的int值;
7.boolean JSONObject.getBooleanValue(String key) //根据key拿到json的boolean值;
参考:https://www.cnblogs.com/qiaoyeye/p/7730288.html