如何在JMeter第二个线程组中传递Token?已尝试方案遇无效Token
JMeter跨线程组传Token无效?按这几步排查
1. 先确认JSON提取器没配错
- 核对提取器的变量名,比如你设的是
token,后面引用就得用${token},别写错 - 用查看结果树里的JSON Path Tester验证路径表达式,比如响应是
{"token":"abc123"},路径就得是$.token,路径错了根本提不出值 - 提取器必须挂在获取Token的请求下面,不能直接扔线程组根节点,不然根本不会触发
2. 跨线程组要转全局变量,别直接用本地变量
线程组之间默认不共享变量,你得把提取到的Token存成全局属性:
方法一:用Beanshell后置处理器(比预处理器更合理)
在第一个线程组的JSON提取器后面加个Beanshell后置处理器,写这段代码:
props.put("global_token", vars.get("token"));
vars.get("token")拿你提取到的本地变量,props是JMeter全局属性,所有线程组都能读。
方法二:用__setProperty函数(更省事)
直接在第一个线程组里,给获取Token的请求加个__setProperty函数调用:
${__setProperty(global_token,${token},)}
第三个参数空着就行,不用返回值。
3. 第二个线程组里正确引用全局变量
- 别直接写
${global_token},因为线程组初始化时就会读这个值,万一第一个线程组还没跑完,拿到的就是空值或者旧值 - 用__P函数动态取:
${__P(global_token,)}
或者在Beanshell预处理器里读全局属性再转成本地变量:
String token = props.get("global_token"); vars.put("current_token", token);
然后请求里用${current_token}就行
4. 检查Token本身是不是真的有效
- 把第一个线程组返回的Token复制出来,用Postman或者curl测一下,确认没过期、格式对
- 注意请求头里的格式,很多接口要求加
Bearer前缀,比如Authorization: Bearer ${current_token},漏了前缀肯定无效 - 看看Token有没有过期时间,要是两个线程组执行间隔太长,可能Token已经失效了
5. 确保线程组执行顺序对
- 去测试计划里勾上
独立运行每个线程组,这样第一个线程组全跑完才会启动第二个,不然两个线程组并行跑,第二个拿Token的时候第一个还没生成呢
内容的提问来源于stack exchange,提问作者Rahul Bhaskar Katkam
相关产品推荐
相关产品推荐

