jmeter3种方法提取返回结果中的数据以及跨线程组使用数据

jmeter使用过程中经常需要使用到前一个接口的返回结果作为下一个接口的入参,大部分接口的返回消息都是json格式,下面介绍三种最常用的方式获取json消息里的参数值。以登录认证接口为例,取出请求头中的x_auth_token给后续的接口使用。

方法1:后置处理器-json提取

对于json串来说这是最简单的方法

Names of created variables:是自己定义一个变量名称,用来存放值,以便后续使用,可以写多个变量,用;号隔开,如果写了多个那后面的也都要填写相应的个数
JSON Path expressions:是json表达式,格式是$.x_auth_token表示获取x_auth_token的值
Match No. (0 fro Random):选择匹配到的第几个值,1表示选择匹配到的第1个值,0是随机,这里我们只匹配到一个,所以写0或者1都无所谓
Default Values:当表达式匹配不到值时设定的默认值,注意如果这个提取器同时获取2个或以上的值时,这个默认值是必填的,而且要与变量个数对应,这里我们只需要取一个值,所以可以不填默认值

方法2:后置处理器-正则提取器

稍微了解过正则表达式的都可以试试

引用名称:自己定义一个变量名称,用来存放值
正则表达式:我们这里写的是"refresh_token" : “(.*?)” 意思是后面那个双引号里所有的、任何的字符都匹配到。可以用在线正则表达式测试工具验证表达式是否正确
    ():括起来的部分就是要提取的
    .:任意单个字符
    *:0-n次。
    ?:匹配0次或1次。  
模板:正则表达式中如果写了多个表达式,每一个表达式视为一个模板,用$n$表示,需要第几个模板的取值就写几,我们这里只有一个表达式,所以写$1$就行。
匹配数字:选择正则表达式匹配到的结果,0代表随机取值,1表示选择匹配到的第1个值,通常情况下填0,这里我们只匹配到一个,所以写0或者1都无所谓
缺省值:当表达式匹配不到值时设定的默认值

方法3:后置处理器-beanshell后置处理器

有一点编程基础就可以写(需要在测试计划中导入org.json  jar包)

import org.json.JSONObject;
import org.json.JSONArray;
String response=prev.getResponseHeaders(); // 取出返回信息头部的信息(一般用于登录获取token)
// String response=prev.getResponseDataAsString();//取出接口的返回消息(一般用于接口的返回结果(获取到存储)作为下一个接口的入参)
JSONObject jsonstring=new JSONObject(response);//放进json对象里
String token_value=jsonstring.getString("x_auth_token");//返回消息的refresh_token没有嵌套在外层中,直接取值就行
vars.put("x_auth_token",token_value);//最后把取到的值放进jmeter变量中,前面是后续接口要引用的变量名称,后面是脚本里用来取值的变量名称
${__setProperty(x_auth_token,${x_auth_token})}; // 作为全局变量

:如果要取的参数还有外层,则要一层一层写
在json中{}是对象,用getJSONObject方法
[]是数组,用getJSONArray方法

不要忘了vars.put方法把取到的值放进jmeter参数中,否则这只是脚本里的一个变量,不能作为jmeter的变量使用

以上是接口后置处理器的三种提取返回结果的方法。

获取到的结果在后续接口中引用的方法:
1,如果是同一个线程组下的接口,直接用${变量名}引用,我这里是${x_auth_token}
2,如果是不同的线程组下的接口,则在引用时加一个方法,写成${__property(x_auth_token)}

要先在前面那个接口中把变量变成全局变量才能跨线程组使用,就是在前一个接口中写一个beanshell后置处理器
代码: ${__setProperty(x_auth_token,${x_auth_token})};
把参数变成全局变量,后续其他线程组的接口直接使用这个参数


3,在下一个线程组中引用该全局变量

${__property(x_auth_token)}

文字参考资料:https://blog.csdn.net/jessi212/article/details/108886738

爱生活,更爱给我带来生活的人
原文地址:https://www.cnblogs.com/chenyq/p/14148341.html