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

Posted 陪你看渔舟唱晚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在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,即可

以上是关于在Jmeter中设置全局变量,实现跨线程组传参的主要内容,如果未能解决你的问题,请参考以下文章

jmeter测试之跨线程传参

JMeter跨线程调用token(全局变量)

jmeter全局变量配置:将token运用到全局(跨线程组使用变量)

小程序项目复盘 用全局变量传参的问题

Jmeter跨线程组传值

jmeter 跨线程组调用变量