JMeter线程组间全局变量传递失败,请问脚本缺失什么配置?
解决JMeter跨线程组传递变量的问题
问题原因
你通过vars.put()修改的是线程局部变量,每个线程组的线程拥有独立的变量空间,第二个线程组无法读取第一个线程组里修改后的局部变量值。User Defined Variables中的初始值会被每个线程组各自加载,但后续的局部修改不会跨线程组共享。
解决方案
1. 用全局属性存储修改后的值
在第一个线程组的JSR223 Sampler里,把修改后的access_token存入JMeter全局属性(而非局部变量):
// 替换原来的vars.put("access_token", "aaaaa") props.put("access_token", "aaaaa")
2. 在第二个线程组中读取全局属性
有两种方式获取值:
- 直接在JSR223 Sampler中读取:
def token = props.get("access_token") log.info("获取到的access_token: " + token) - 如果要在其他采样器中用
${access_token}的形式引用,可以在第二个线程组的JSR223 PreProcessor中把全局属性转成局部变量:vars.put("access_token", props.get("access_token"))
3. 确保线程组按顺序执行
如果测试计划里线程组是并行运行的,第二个线程组可能在第一个线程组修改属性前就执行了,导致拿不到值。需要:
- 打开测试计划的配置界面
- 勾选Run Thread Groups consecutively(按顺序运行线程组)选项,让第一个线程组执行完毕后再启动第二个线程组
内容的提问来源于stack exchange,提问作者nurub
相关产品推荐
相关产品推荐

