在Jmeter中设置全局变量,实现跨线程组传参

工作中应用场景:
A线程组里面的一个输出,是B线程组里面的一个输入,如果B线程想引用A线程的变量,就必须设置全局变量。例如你想在A接口中拿到它返回的某个值(常用的就是登陆后的token),此时你想在B中引用它,就需要将它设置成全局变量,在其他线程组中也可以用。

想法:

1.使用正则表达式或者json提取器,在A线程组中提取到你想要传递的参数,

2.使用函数setProperty将其导入到BeanShell后置处理(或者BeanShell处理器)

3.在B线程组中,使用property函数(或者P函数)去引用从A线程组中传递来的参数

一、我想拿到接口返回的 "title": "鱿鱼游戏"时它的id值(这里是要取这个title对应的其它字段的值)

此时可以使用JSON提取器,设置的内容如下:

 解释一下JSON提取器里面的参数意思:

names of created variables :接收值的变量名,多个变量时用分号分隔
json path:json path表达式,也是用分号分隔
match no:0随机;n取第几个匹配值;-1匹配所有,后续引用用 变量名_N 取第N个值。
default values:缺省值,匹配不到值的时候取该值
例子中的值:

names of created variables :ID

json path:$..[?(@.title=='鱿鱼游戏')].["id"]

 match no:1

二.将获取到的变量值,通过setProperty函数将变量值通过BeanShell后置处理(或者BeanShell处理器)传递到公共空间去。

Ctrl+shift+f1快捷键打开函数助手或者点击

找到setProperty函数:

接着将所生成的函数值:${__setProperty(newID,${ID},error)}

添加到1.BeanShell 后置处理程序中的Script下:

2.也可以添加到BeanShell 取样器的脚本下:

 其实后面熟悉了,或者记住了在上述的BeanShell后置处理(或者BeanShell处理器)中添加的函数setProperty的取值:

${__setProperty(全局变量名,${A线程组获取的变量值},error)}

三、使用property函数(或者P函数)将二中的全局变量引入

1.也是去函数助手中找到property函数:

将复制到的函数值,去到B线程组中去引用:

 2.或者使用P函数

将复制到的函数值,去到B线程组中去引用:

 后面熟练了这两个函数就可以直接使用,而不要通过函数助手:

1.${__property(全局变量名,,error)}}

2.${__P(newID,)}

四、备注

1.因为此次是为了获取这个属性值 "title": "鱿鱼游戏"时它的id值,所以json提取器中的表达式是使用:

$..[?(@.title=='鱿鱼游戏')].["id"],

如果只是为了获取"title": "鱿鱼游戏",鱿鱼游戏这个值-----$.subjects.[1].title

我们怎么知道自己写的json的提取器的方法对不对,可以使用jmeter在响应中自带的JSON Path Tester自带的工具,按下图写入,点击Test即可

 2.之前在解释JSON提取器中的参数解释时:

match no:0随机;n取第几个匹配值;-1匹配所有,后续引用用 变量名_N 取第N个值。

例如设置如下:

names of created variables :title

json path:$.subjects.*.title

 match no:-1

 其中$.subjects.*.title,获取的是全部的title值,就代表它是有多个值:

 此时你如果只想使用数组组中第二个值,即 "title": "鱿鱼游戏",

那么你在你所需要用到这个变量的地方:title_2,即可

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值