在我们实际的业务请求中,服务器响应用户请求的数据格式为JSON,然而我们通常需要提取接口A的响应值作为接口B的入参;那么在实际的应用中,从json响应值取得这个参数作为下一下接口的入参数呢?比如对于用户这个请求,
/communicator/app/share/getSharelist246.action?sessionId=5DE154A0AAFC0323D4BF090D32674DEC&page=1&rows=2
服务器端响应如下图所示:
此时我们需要提取这个响应结果中的picUrl的值作为其他接口的入参数,我们应该如何做呢?在Jmeter工具中方法有三:
一、正则表达式:
点击右键-添加正则表达式,
引用名称:填写提取值的变量名(即在Jmeter工具需要使用的变量名称);
正则表达式处:提取内容的正则表达式; ()表示提取,对于你要提取的内容需要用小括号括起来。
模板:用$$引用起来,如果在正则表达式中有多个提取表达式(多个括号括起来的部分),则可以是$1$,$2$等等,表示解析到的第几个值给picUrl,正则表达式的提取模式,值从1开始,值0对应的是整个匹配的表达式。匹配数字(0代表随机):0代表随机,-1代表所有,其余正整数代表将在已提取的内容中第几个匹配的内容。这里需要提取的是第二个匹配的值。缺省值:正则匹配失败时取的值。
二、使用jp@gc - JSON Path Extractor配置元件提取
TIPS,使用这个配置元件提取时,首先需要在获取在在jmeter的plugins网站http://jmeter-plugins.org/downloads/all/选择 JMeterPlugins-ExtrasLibs-X.X.X.zip下载,解压以后将lib和lib/ext中的jar包放到jmeter安装目录对应位置,然后重启jmeter,才可以使用这个配置元件
在Sampler上面添加后置处理器-->jp@gc - JSON Path Extractor,
方法三:使用BeanShell PostProcessor元件提取
TIPS1.在使用这个元件提取时,首先需要将fastjson.jar工具包中拷贝到 jmeter lib 文件夹下后,然后重启 jmeter在Sampler上面添加后置处理器-->BeanShell PostProcessor
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject; //引入 fastjson.jar包
String json=prev.getResponseDataAsString(); //将用户的请求返回值转换成String存储在json变量中
JSONObject jso = JSON.parseObject(json); //将json字符串转换成一个Object对象存储在jso中
JSONArray datas = jso.getJSONArray("rows"); //从 jso对象中获取获取至rows列表存放在datas中
vars.put("picUrl",datas.getJSONObject(0).getString("picUrl")); 从列表中获取第一个对象的的 picUrl值,存放在Jmtere变量picUrl中