一般,提取请求的响应体某个字段时可以采用正则提取器、边界提取器、json提取器等等,操作比较简单。
除此之外,还可以使用Beanshell后置处理器提取响应体的字段值,将json格式的响应体为字符串类型的内容转换为JSON对象,从而利用JSON对象的方法轻松的得到我们期望的值。
前提
需要提前下载好json.jar插件,然后将该jar包放入jmeter安装目录/lib/ext下。
请求返回报文如下
{ "code": 0,
"success": true,
"message": "成功",
"data": {
"amount": 8000,
"SpuIdlist": [{
"SkuId": 22044,
"name": "iphone13"},
{"SkuId": 22045,
"name": "huawei"}]
}
}
取data下的amount
思路:
- new一个JSONObject对象
- 利用对象的get(“字段”)方法获取字段内容,获取的类型根据实际获取的内容决定,String、int、数组等都有可能
- 继续获取下一个层级data下面amout的值,每一个层级间用点 . 表示,由于amount值为整型,打印时要转换成String类型
import org.json.*; //导入org.json包
String Response = prev.getResponseDataAsString(); //获取响应数据Response
log.info("响应体数据:" + Response);
JSONObject responseJson = new JSONObject(Response); //整个Response作为JSON对象
success = responseJson.get("success"); //通过对象的get("字段")方法获取字段内容
log.info("响应code字段:" + success);
amount= responseJson.get("data").get("amount");
log.info("响应amount字段:" + amount.toString());
如果需要继续获取SpuIdlist数组的话,
方法1:
接上文
amount= responseJson.get("data").get("SpuIdlist");
log.info("响应SpuIdlist数组:" + SpuIdlist.toString());
方法2:
import org.json.*; //导入org.json包
String Response = prev.getResponseDataAsString(); //获取响应数据Response
JSONObject responseJson = new JSONObject(Response); //整个响应体Response转化为JSON对象
//通过responseJson对象,按层级获取数组第一个元素的值,直接转换为json对象
JSONObject listJson=(JSONObject)responseJson.get("data").get("SpuIdlist").get(0);
log.info(listJson.get("SkuId"));