【Jmeter】设置线程组运行顺序的方法

方法 1:使用 Test Action + If Controller(推荐)

步骤:

  1. 禁用默认的并行执行

    • 确保 测试计划 的配置中 不勾选 Run Thread Groups consecutively (i.e. one at a time)(默认不勾选,表示并行执行)。

    • 如果勾选,所有线程组会按顺序执行,但可能影响某些场景的测试。

  2. 使用 If Controller 控制执行顺序

    • 在第一个线程组的最后添加一个 BeanShell PostProcessorJSR223 PostProcessor(推荐),设置一个全局变量:

      java

      复制代码
      vars.put("THREAD_GROUP_1_DONE", "true");
    • 在第二个线程组的开始添加 If Controller,条件为:

      text

      复制代码
      ${__jexl3(vars.get("THREAD_GROUP_1_DONE") == "true",)}
    • 这样第二个线程组会等待第一个完成后才执行。


方法 2:使用 Critical Section Controller(插件)

步骤:

  1. 安装插件

  2. 使用 Critical Section Controller

    • 在每个线程组前添加 Critical Section Controller ,并设置相同的 锁名称 (如 LOCK_1)。

    • 这样同一时间只有一个线程组能运行。


方法 3:使用 Module Controller + Test Fragment

步骤:

  1. 创建 Test Fragment

    • 右键测试计划 → Add → Test Fragment

    • 将每个线程组放入不同的 Test Fragment

  2. 使用 Module Controller 按顺序调用

    • 创建一个 主线程组 ,使用多个 Module Controller 按顺序调用 Test Fragment

方法 4:使用 setUp Thread GrouptearDown Thread Group

步骤:

  1. setUp Thread Group

    • 用于初始化(最先执行)。
  2. 普通线程组

    • 默认并行执行,但可以通过 If Controller 控制顺序。
  3. tearDown Thread Group

    • 用于清理(最后执行)。

方法 5:拆分测试计划 + 命令行顺序执行

步骤:

  1. 拆分测试计划

    • 将每个线程组保存为单独的 .jmx 文件(如 group1.jmxgroup2.jmx)。
  2. 使用 Shell/Batch 脚本顺序执行

    bash

    复制代码
    jmeter -n -t group1.jmx -l result1.jtl
    jmeter -n -t group2.jmx -l result2.jtl

总结

方法 适用场景 是否需要插件 备注
If Controller + 变量控制 简单顺序执行 ❌ 不需要 推荐
Critical Section Controller 需要锁机制 ✅ 需要插件 适合复杂逻辑
Test Fragment + Module Controller 模块化测试 ❌ 不需要 适合大型测试
setUp/tearDown Thread Group 初始化和清理 ❌ 不需要 JMeter 内置
拆分 JMX + 命令行执行 完全独立运行 ❌ 不需要 灵活性高

推荐

  • 如果只是简单按顺序执行,使用 If Controller + 变量控制(方法 1)。

  • 如果需要更高级控制,使用 Critical Section Controller(方法 2)。

  • 如果是大型测试,使用 Test Fragment + Module Controller(方法 3)。