jmeter如何设置全局变量以及调用方法

Posted a00ium

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jmeter如何设置全局变量以及调用方法相关的知识,希望对你有一定的参考价值。

当遇到如跨线程组调用变量等情况,需要设置全局变量。

1、打开函数助手

技术图片

输入需要的值然后点击生成按钮,或者直接使用${__setProperty(newuserid,${userid},)}的格式

技术图片

设置局部变量userid和token为全局变量并在另一线程中调用,调用方式见下

技术图片

${__property(变量名)}

 

业务场景
一、登录系统后进行商品购买,进行做接口并发。

1、首先分了两个线程组login、pay_buy_finish 如图:

技术图片
 

 

2、获取接口A正则表达式提取的session_sid作为全局变量,login线程只运行1次。如图:

 

技术图片
 

 

3、把获取的sid 作为全局变量传递给线程组pay_buy_finish 中的请求使用:如图:

 

技术图片
 

 

4、运行结果是这样:
线程组login 运行1次

技术图片
 

pay_buy_finish运行5次
4次错误结果:
技术图片
 

 

1次正确结果:

技术图片
 

 

线程组pay_buy_finish总共运行5次,其中4次取值都不正确,只有1次取值正确。 如果有同学知道原因的请留言!

共收到 10 条回复时间 点赞
技术图片

图形界面没关闭过的情况下,上次运行时的__setProperty会一直在,比如设置了属性A=11;下次运行的时候初始A就=11,然后才是被重新赋值,看你的查看结果树是在2个线程组下的,你可以把它拉到外面,看下login、pay_buy_finish的执行顺序,如果是这个原因,可以把login改成setup的

技术图片
Mr.W #2 · 2017年08月15日 作者
对 技术图片北溟 #1 回复

我在nogui 下运行也是如此,貌似和关闭图形界面没关系

技术图片
对 技术图片北溟 #1 回复

正好也解决了我的疑问 十分感谢!

技术图片
对 技术图片Mr.W #2 回复

另外我还有一个问题想要请教:设置全局变量后,在其他线程组中可以使用使用__property获取到该全局变量,可是该全局变量如何在beanshell中使用呢?

技术图片 Mr.W 关闭了讨论 08月15日 12:50
技术图片 Mr.W 重新开启了讨论 08月15日 13:22
技术图片

${__property (x)}也可以直接用在beanShell中的,但是就是简单的替换,我觉得用props.get("x")会更加安全,否则x属性值有特殊字符时,遇到一些逻辑处理可能就会有问题,比如字符串相加等,beanShell窗口最下面有说明的有哪些可以用的内置对象

技术图片
对 技术图片北溟 #7 回复

setup中定义全局变量x,然后在其他线程组中beanshell里直接使用${__property (x)}会报错: Attempt to access property on undefined variable or class name ,使用props.get("x"),提示“ Undefined argument: x”

之前遇到过这个问题,我的解决方式是:在beanshell中设置参数:${__property(x)},然后在beanshell script中使用bsh.args[0]进行获取,可是我不是很喜欢这种方式~~

技术图片

props.get("x") 你这个报错的话Undefined argument: x
检查下是不是没加引号?

技术图片
 

 

技术图片
对 技术图片北溟 #9 回复

哈哈~~果真 tks!!!

技术图片

谢楼主帖子!







以上是关于jmeter如何设置全局变量以及调用方法的主要内容,如果未能解决你的问题,请参考以下文章

jmeter设置全局变量踩过的坑

QT如何设置可变的全局变量

jmeter 跨线程组调用变量

在LABVIEW中如何设置全局变量

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

jmeter获取token后设置为全局变量