jmeter的线程组之间是相互独立的,各个线程组互不影响,所以线程组A中输出的参数,是无法直接在线程组B和线程组C中被调用的。
但是有时为了方便管理,我们可能是把各个接口单独存放在不同的线程组中。拿token来说,虽然每一个线程组中我们也可以在放一个登录请求,然后输出一个token供此线程组使用,但这样就比较繁琐且冗余。此时我们就可以使用跨线程组传递参数来解决这样的问题
方法:jmeter本身的内置函数${__setProperty(requestToken,${Token},)};可以把某参数的值设置成jmeter本身的内置属性,是全局变量,各个线程都可调用。调用时,只需使用调用jmeter属性的函数${__property(requestToken)}来调用相应的属性即可。
1、创建线程组A(登录采样器、正则表达式提取器、beanshell后置处理器、采样器A、查看结果树)
登录采样器,登录接口返回token
正则表达式提取器,提取token
beanshell后置处理器,将提取的token赋值并设置为全局变量,待其它线程调用
采样器A,调用beanshellToken值${__property(requestToken)}
2、创建线程组A(采样器A、查看结果树)、创建线程组A(采样器B、查看结果树)
采样器B,调用beanshellToken值${__property(requestToken)}
采样器C,调用正则提取Token值${Token}
3、设置测试计划为独立运行每个线程组(顺序运行线程)
4、查看登录接口响应
5、登录接口下添加正则表达式提取器,提取token
6、Bean Shell PostProcessor设置
Parametres:传递需要操作的参数${Token},前面正则提取出来的Token值,就把参数Token写入
Script:${__setProperty(requestToken,${Token},)}; 调用函数__setProperty,把Bean Shell PostProcessor中的参数Token的值赋值给requestToken,并设置requestToken为jmeter内置属性,全局变量,所有线程组可调用。
7、我们查看最终结果树显示A线程和B线程调用${__property(requestToken)}都生效了,而C线程调用${Token}未生效