JMeter中首个线程组设为无限循环时无法启动第二个线程组
解决方案
问题根源
JMeter默认是串行执行线程组,如果第一个线程组设为无限循环,会一直占用执行流程,永远不会触发第二个线程组。
可行方案
方案1:取消线程组串行执行,双线程组并行运行
- 打开Test Plan设置,取消勾选Run thread groups consecutively (i.e. one at a time)。此时两个线程组会同时启动,互不阻塞。
- 第一个线程组配置:
- 循环次数设为永远
- 添加POST请求获取token,之后用
__setProperty(access_token, ${token},)函数把token存入全局属性(${token}是你从响应里提取的token变量) - 添加Flow Control Action,设置延迟120000毫秒(2分钟),控制每2分钟刷新一次token
- 第二个线程组配置:
- 正常设置循环次数和请求间隔
- GET请求里用
__P(access_token,)引用全局属性的token值
方案2:合并逻辑到单线程组,内置token刷新判断
如果不想用多线程组,把token刷新和业务请求整合到同一个线程组:
- 添加While Controller,条件设为
true(实现无限循环) - 内部嵌套If Controller,判断逻辑:
${__time(,)} - ${last_refresh_time} > 120000- 首次执行时
last_refresh_time不存在,会自动进入刷新逻辑 - 刷新token的POST请求放在If Controller内,之后用JSR223 PostProcessor更新时间和全局token:
vars.put("last_refresh_time", "${__time(,)}"); props.put("access_token", vars.get("token"));
- 首次执行时
- 在While Controller内(If Controller外)添加业务GET请求,使用
__P(access_token,)获取token - 添加Constant Timer设置业务请求的执行间隔(比如1000毫秒/次)
注意事项
- 线程组之间共享变量必须用全局属性(
__setProperty/props),普通用户变量(vars)只能在当前线程组内使用 - 如果token获取失败,要加断言和重试逻辑,避免业务请求使用失效token
内容的提问来源于stack exchange,提问作者praneeth
相关产品推荐
相关产品推荐

