方法一:
使用常用的正则表达式,在上一个接口下面添加正则表达式的提取器,获取你想要得到的值
但是正则表达式也会有它自己的局限性,当返回的json很复杂的时候,或则需要使用到循环或者foreach控制器的时候,经常无法满足我们场景
方法二:
使用后置处理器【JSON Extractor】,同样也是在上一个接口下面添加后置处理器【JSON Extractor】,获取你想要得到的值,根据上一个接口具体返回的json格式去自定义【JSON path expressions】json路径表达式
例子:需要获取faceToken字段的值
表达式的匹配规则:
$.data.content[*].similarFace[*].faceToken
同样跟正则中的规则,MATCH NUMBERS的值中-1是匹配所有的含义
方法三:
使用BeanShell Sampler来取上一个接口的返回值
例如:我现在需要取到下图红色框住的facetoken字段
首先我们先在上一个接口后面添加一个BeanShell Sampler,首先我们需要在jmeter下面的lib/ext下面将json.jar包放进去,然后重启jmeter;再到线程组中载入json.jar的包
需要使用的json.jar包下载地址:
链接:https://pan.baidu.com/s/1zjDyPbVwKqn9NeLl-QCRrQ&shfl=sharepset
提取码:ua6o
文中代码:
import java.util.*;
import java.lang.*;
import org.json.*;
import org.json.JSONObject;
import org.json.JSONAarry;
String response_data = prev.getResponseDataAsString();//自定义一个变量response_data,来获取请求的返回值
log.info("接口的值"+response_data);
JSONObject response = new JSONObject(response_data);//自定义一个对象response,将返回值构造JSON对象
JSONArray content = response.get("data").getJSONArray("content");//自定义一个列表list,来获取响应中data对象下的list数组
//log.info("content的内容:"+content);
JSONObject content_data = null;//创建1个空的json对象content_data,用于接收值
//log.info("content数组的长度"+content.length());
for (i = 0;i < content.length();i++){
content_data = (JSONObject)content.getJSONObject(i);//将数组中的每一个值构造成一个对象,赋值给list_data
log.info("content_data的内容:"+content_data);
JSONArray similarFace = content_data.get("similarFace");
//log.info("similarFace的内容:"+similarFace);
JSONObject similarFace_data = null;
//log.info("similarFace数组的长度"+similarFace.length());
//String[] result = new String[similarFace.length()];
for(j = 0;j < similarFace.length();j++){
JSONObject similarFace_data = (JSONObject)similarFace.getJSONObject(j);
// log.info("similarFace_data的内容:"+similarFace_data);
String faceToken = similarFace_data.get("faceToken").toString();
//log.info("faceToken的内容:"+faceToken);
//result[j] = faceToken;
//log.info("result的值等于"+result);
vars.put("faceToken_dev",faceToken);
}
}