当前位置: 首页 > news >正文

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

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

步骤:

  1. 禁用默认的并行执行

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

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

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

    • 在第一个线程组的最后添加一个 BeanShell PostProcessor 或 JSR223 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. 安装插件

    • 从 JMeter Plugins Manager 安装 Custom Thread Groups 或 Inter-Thread Communication 插件。

  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 Group 和 tearDown 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)。

http://www.dtcms.com/a/321551.html

相关文章:

  • 安装部署K8S集群环境(实测有效版本)
  • 复杂姿态漏检率↓79%!陌讯多模态算法在安全带穿戴识别的落地实践
  • Node.js Turbo 包入门教程
  • web端-登录页面验证码的实现(springboot+vue前后端分离)超详细
  • (Arxiv-2025) CINEMA:通过基于MLLM的引导实现多主体一致性视频生成
  • 基于Jeecgboot3.8.1的flowable流程审批人与发起人相同设置-前端部分
  • Vue2与Vue3 Hooks对比:写法差异与演进思考
  • 【3d61638 渍韵】001 png pdf odt 5与明天各种号(虚拟文章スミレ数据)
  • PDF处理控件Aspose.PDF教程:使用 C#、Java 和 Python 代码调整 PDF 页面大小
  • 以rabbitmq为例演示podman导出导入镜像文件
  • kafka 为什么需要分区?分区的引入带来了哪些好处
  • Kafka + 时间轮 + 数据库实现延迟队列方案
  • 前端开发:JavaScript(7)—— Web API
  • 机器学习视角下的黄金市场动态:3400美元关口的多因子驱动机制
  • Seata分布式事务环境搭建
  • Access开发右下角浮窗提醒
  • RS485转Profibus网关在QDNA钠离子分析仪与S7-300PLC系统集成中的应用
  • 深入解析K-means聚类:从原理到调优实战
  • 基于STM32F030C8T6单片机实现与CH224Q诱骗芯片的I2C通信和电压输出配置
  • 9:USB摄像头的最后一战(上):MP4音视频合封!
  • 《MySQL索引底层原理:B+树、覆盖索引与最左前缀法则》
  • TF 上架全流程实战,从构建到 TestFlight 分发
  • iOS 签名证书全流程详解,申请、管理与上架实战
  • 飞算JavaAI深度剖析:开启Java开发智能新时代
  • 路由器不能上网的解决过程
  • 综合实验作业
  • Web Worker 性能革命:让浏览器多线程为您的应用加速
  • OpenAI 开源 GPT-OSS:1200亿参数推理模型上线,完全免费、商用可用,全民可控智能体时代正式开启!
  • 异步改变Promise状态与then调用顺序
  • 零基础深度学习规划路线:从数学公式到AI大模型的系统进阶指南