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!!!

谢楼主帖子!

原文地址:https://www.cnblogs.com/a00ium/p/10360494.html