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

第六篇:《JMeter逻辑控制器:循环、条件和交替执行》

在实际业务测试中,并非只是简单的顺序执行。有时需要重复执行某些操作(循环),有时需要根据条件决定执行哪个分支(条件),有时需要模拟多个用户的交替行为(交替)。JMeter 提供了丰富的逻辑控制器来实现这些流程控制。本文将介绍最常用的循环控制器、If 控制器、ForEach 控制器和交替控制器,并通过实战案例让你掌握它们的使用。

一、逻辑控制器概述

逻辑控制器可以改变其子元件的执行顺序和执行次数。类似于编程语言中的 for、if、switch 等控制语句。

常用逻辑控制器:

二、循环控制器(Loop Controller)

2.1 使用场景
需要重复执行一组请求 N 次,例如批量创建 10 条数据。

2.2 配置
右键某线程组(或上一级控制器) → Add → Logic Controller → Loop Controller
在“Loop Count”中填写循环次数。

注意:循环控制器与线程组的循环不同:

线程组循环次数:每个线程执行整个测试计划 N 次

循环控制器:仅循环控制器内部的请求 N 次

2.3 实战:批量创建用户
假设有一个创建用户的 POST 接口,需要创建 5 个不同用户。

可以将创建请求放在循环控制器内,循环次数设为 5,并在请求参数中使用计数器变量 ${__counter(,)} 来区分用户名。

json
{
“username”: “userKaTeX parse error: Expected group after '_' at position 2: {_̲_counter(true,)…{__counter(true,)}@test.com”
}

三、If 控制器(If Controller)

3.1 使用场景
根据某个变量或条件决定是否执行其内部的请求。例如:登录成功后执行后续操作,否则跳过。

3.2 配置
右键 → Add → Logic Controller → If Controller

条件表达式有两种常用模式:

简单地检查变量是否等于某个值:${code} == 0

使用 JMeter 的 __jexl3 或 __groovy 函数:KaTeX parse error: Expected group after '_' at position 2: {_̲_jexl3("{code}" == “0”,)}

建议使用 __jexl3 或 __groovy,因为更稳定且支持复杂逻辑。

3.3 语法示例
条件 含义
KaTeX parse error: Expected group after '_' at position 2: {_̲_jexl3("{code}" == “0”,)} 变量 code 等于字符串 “0”
KaTeX parse error: Expected group after '_' at position 2: {_̲_jexl3({count} > 0,)} 变量 count 大于 0
KaTeX parse error: Expected group after '_' at position 2: {_̲_jexl3("{token}" != “null”,)} token 不为 null
KaTeX parse error: Expected group after '_' at position 2: {_̲_jexl3({__Random(1,100,)} > 50,)} 随机数大于 50
注意:If 控制器内部的请求只有在条件为 true 时才会执行。条件表达式要写正确,否则永远为 false。

3.4 实战:条件性执行清理操作
场景:测试前如果数据库中存在测试数据,则先执行清理接口。可以通过一个前置请求查询是否存在数据,提取数量到变量 count,然后在 If 控制器中判断 count > 0 时执行删除接口。

四、ForEach 控制器(ForEach Controller


4.1 使用场景
当你有一组类似的变量时(例如从 JSON 提取器提取了多个值),可以使用 ForEach 控制器遍历它们。

4.2 配置项

4.3 典型用法
假设通过 JSON 提取器提取了所有订单 ID,配置如下:

变量名:orderIds,JSON Path:$.data.orders[*].id,Match No. 设置为 -1(所有匹配)

该提取器会生成 orderIds_1、orderIds_2…… 和 orderIds_matchNr(总个数)

然后在 ForEach 控制器:

Input variable prefix:orderIds

Output variable name:orderId

循环内部,使用 ${orderId} 访问每个 ID,进行删除或其他操作。

4.4 注意事项
需要先有生成 xxx_n 变量的提取器或用户自定义变量。

如果变量索引不连续,ForEach 会停止在第一个缺失处。

五、交替控制器(Interleave Controller)

5.1 使用场景
模拟多个用户交替执行不同操作,例如每个虚拟用户每次循环执行一个不同的请求(如浏览商品、加入购物车、结算轮流执行)。

5.2 配置
右键 → Add → Logic Controller → Interleave Controller

可选“忽略子控制器块”等选项。默认情况下,每次循环会按顺序选择下一个子请求执行(线程内独立)。

5.3 示例
交替控制器下包含三个 HTTP 请求:搜索商品、查看详情、加入购物车。
当线程组循环 3 次时,第一次执行搜索,第二次执行查看详情,第三次执行加入购物车,第四次又从搜索开始。

与随机控制器的区别:交替控制器是顺序轮换,随机控制器是完全随机。

六、其他实用控制器简介

七、实战:综合使用多种逻辑控制器

场景:模拟一个电商用户的典型流程:登录 → 随机浏览(搜索或查看详情)→ 一旦找到商品就加入购物车(循环直到成功)→ 结算。

7.1 测试计划概要
仅一次控制器:登录,提取 token

随机控制器:随机选择“搜索商品”或“查看详情(从列表选一个)”

循环控制器:尝试加入购物车,若失败则继续随机浏览(使用 If 控制器判断是否成功)

单次操作:结算

这个组合展示了逻辑控制器的嵌套。

7.2 注意事项
逻辑控制器可以任意嵌套,但嵌套过深会降低可读性。

每个控制器的作用域要清晰,特别是变量作用域。

八、常见错误与解决

九、总结

本文核心:

循环控制器:重复执行

If 控制器:条件分支

ForEach 控制器:遍历数组变量

交替控制器:轮流执行子请求

多种控制器组合可实现复杂业务流

http://www.jsqmd.com/news/799705/

相关文章:

  • 告别龟速下载!手把手教你配置PyTorch本地CIFAR10数据集(附避坑指南)
  • 为什么92%的研究者用错Gemini Deep Research?揭秘Google内部未公开的3层推理协议
  • 【大白话说Java面试题 第44题】【JVM篇】第4题:什么时候会触发 Young GC?什么时候会触发 Full GC?
  • Vue3 + Vite项目集成vue-particles避坑指南:从安装到性能优化全流程
  • 扫雷外挂逆向笔记:我是如何找到那个0x8F代表地雷的(含OD动态调试技巧)
  • NVMe 固态硬盘在 Linux 下开启 NCQ 队列深度对性能有何影响?
  • 别再为数据发愁了!用Python实战Domain Adaptation,让模型学会‘举一反三’
  • 非科班小白1年逆袭电网网安项目经理?我的真实转行路
  • PCI-X 2.0核心技术解析与应用实践
  • SINAMICS V90伺服驱动器故障代码大全
  • Kali Linux装好VMware Tools还是卡?可能是你漏了这步——深入排查与性能优化指南
  • Windows 10下用VS2017+Qt5.14.2编译3D Slicer 4.11的完整避坑指南(含Git加速)
  • 开源机械爪技术全解析:从结构设计到ROS集成开发指南
  • 问答系统:从检索到生成式模型
  • 3PEAK思瑞浦 TPA2772-SO1R SOP8 运算放大器
  • 蒙特卡洛估计与控制变量技术在量子误差消除中的应用
  • 免费试用 | 从宁德时代到宝利根,这款HMI组态软件为什么让工程师越用越顺手?
  • iOS激活锁终极绕过:Applera1n完整使用指南与安全解锁方案
  • 终极指南:3步掌握B站字幕提取与转换的核心技巧
  • VS Code图表神器:零配置用代码画UML、流程图与架构图
  • 全球200mm晶圆产能扩张21%:成熟制程的供应链博弈与未来趋势
  • BearBlog CLI:用Python命令行工具高效管理你的极简博客
  • 工业物联网无线传感器网络技术解析与应用
  • ARM A64指令集:条件分支与位操作深度解析
  • Eclipse的Post-build魔法:除了生成HEX,你的编译后步骤还能这样玩
  • 3PEAK思瑞浦 TPA2774-SO2R SOP14 运算放大器
  • Tiny AI Client:零依赖、轻量化的AI API调用库设计与实战
  • FreeRTOS中断里用xEventGroupSetBitsFromISR,这5个细节没处理好容易跑飞
  • MySQL八股之数据库索引优化:7个关键注意事项
  • 避坑指南:用Systemback给Ubuntu 18.04做系统备份,为什么物理机还原会失败?