You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JMeter如何按指定序列无限循环执行线程组?遇回溯及外部循环限制

在JMeter里实现指定顺序的无限循环线程组执行

核心思路

用Test Fragment把重复的执行单元封装起来,再用Module Controller在后续线程组里调用,同时靠全局属性标记执行阶段,结合Loop Controller实现无限循环,完全符合“不能回之前的线程组、不能在外部加循环”的限制。

具体操作步骤

1. 封装可复用的执行片段

先添加一个Test Fragment,在里面创建两个可复用模块:

  • Fragment_TG1_加延迟:把Thread Group 1的所有请求放进来,再添加Constant Timer,设置延迟60000毫秒(即1分钟)
  • Fragment_TG2:把Thread Group 2的所有请求放进来

2. 按顺序创建线程组(每个线程组仅执行一次,内部靠控制器控制逻辑)

线程组1:执行初始序列(TG1→延迟→TG2)

  • 添加Module Controller,选择Fragment_TG1_加延迟
  • 再添加Module Controller,选择Fragment_TG2
  • 新增User Defined Variables,设置全局属性stage=2(标记进入下一个执行阶段)

线程组2:执行中间序列(TG1→延迟→TG1→延迟→TG2)

  • 添加If Controller,条件写${__jexl3(${__P(stage,1)} == 2,)},确保仅在stage=2时执行该线程组内容
    • 内部依次添加两个Module Controller,均选择Fragment_TG1_加延迟
    • 再添加Module Controller,选择Fragment_TG2
    • 最后新增User Defined Variables,设置全局属性stage=3(标记进入循环阶段)

线程组3:无限循环执行重复序列(TG1→延迟→TG2)

  • 添加Loop Controller,将循环次数设为Forever(无限循环)
    • 内部添加If Controller,条件写${__jexl3(${__P(stage,1)} == 3,)},确保仅进入循环阶段后执行
      • 依次添加Module Controller,分别选择Fragment_TG1_加延迟和Fragment_TG2

3. 关键细节说明

  • 全局属性控阶段:用${__P(stage,1)}读取全局属性,保证每个线程组只在对应阶段运行,不会重复执行初始的特殊序列
  • 复用片段省重复工作:把TG1和TG2的逻辑封装成Fragment,不用反复复制粘贴,同时满足“不能回之前线程组”的要求——每个线程组只执行一次,内部调用的是封装好的片段,而非回头执行之前的线程组
  • 内部循环不碰外部限制:无限循环设置在线程组3内部的Loop Controller里,完全未使用测试计划级别的循环,符合限制条件

无Test Fragment的替代方案

如果无法使用Test Fragment,直接将TG1和TG2的请求复制到对应线程组即可,逻辑保持不变:

  • 线程组1:编写TG1请求→添加60秒延迟→编写TG2请求,设置stage=2
  • 线程组2:编写TG1请求→添加60秒延迟→编写TG1请求→添加60秒延迟→编写TG2请求,设置stage=3
  • 线程组3:添加Forever的Loop Controller,内部编写TG1请求→添加60秒延迟→编写TG2请求,用If Controller判断stage=3时执行

内容的提问来源于stack exchange,提问作者JA VHM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 15:10:32