jmeter获取上一个接口返回值的几种方法

方法一:

使用常用的正则表达式,在上一个接口下面添加正则表达式的提取器,获取你想要得到的值

但是正则表达式也会有它自己的局限性,当返回的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); } }

经验分享 程序员 微信小程序 职场和发展