第六篇:《JMeter逻辑控制器:循环、条件和交替执行》
在实际业务测试中并非只是简单的顺序执行。有时需要重复执行某些操作循环有时需要根据条件决定执行哪个分支条件有时需要模拟多个用户的交替行为交替。JMeter 提供了丰富的逻辑控制器来实现这些流程控制。本文将介绍最常用的循环控制器、If 控制器、ForEach 控制器和交替控制器并通过实战案例让你掌握它们的使用。一、逻辑控制器概述逻辑控制器可以改变其子元件的执行顺序和执行次数。类似于编程语言中的 for、if、switch 等控制语句。常用逻辑控制器二、循环控制器Loop Controller2.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 Controller3.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 大于 0KaTeX parse error: Expected group after _ at position 2: {_̲_jexl3({token} ! “null”,)} token 不为 nullKaTeX 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 Controller4.1 使用场景当你有一组类似的变量时例如从 JSON 提取器提取了多个值可以使用 ForEach 控制器遍历它们。4.2 配置项4.3 典型用法假设通过 JSON 提取器提取了所有订单 ID配置如下变量名orderIdsJSON Path$.data.orders[*].idMatch No. 设置为 -1所有匹配该提取器会生成 orderIds_1、orderIds_2…… 和 orderIds_matchNr总个数然后在 ForEach 控制器Input variable prefixorderIdsOutput variable nameorderId循环内部使用 ${orderId} 访问每个 ID进行删除或其他操作。4.4 注意事项需要先有生成 xxx_n 变量的提取器或用户自定义变量。如果变量索引不连续ForEach 会停止在第一个缺失处。五、交替控制器Interleave Controller5.1 使用场景模拟多个用户交替执行不同操作例如每个虚拟用户每次循环执行一个不同的请求如浏览商品、加入购物车、结算轮流执行。5.2 配置右键 → Add → Logic Controller → Interleave Controller可选“忽略子控制器块”等选项。默认情况下每次循环会按顺序选择下一个子请求执行线程内独立。5.3 示例交替控制器下包含三个 HTTP 请求搜索商品、查看详情、加入购物车。当线程组循环 3 次时第一次执行搜索第二次执行查看详情第三次执行加入购物车第四次又从搜索开始。与随机控制器的区别交替控制器是顺序轮换随机控制器是完全随机。六、其他实用控制器简介七、实战综合使用多种逻辑控制器场景模拟一个电商用户的典型流程登录 → 随机浏览搜索或查看详情→ 一旦找到商品就加入购物车循环直到成功→ 结算。7.1 测试计划概要仅一次控制器登录提取 token随机控制器随机选择“搜索商品”或“查看详情从列表选一个”循环控制器尝试加入购物车若失败则继续随机浏览使用 If 控制器判断是否成功单次操作结算这个组合展示了逻辑控制器的嵌套。7.2 注意事项逻辑控制器可以任意嵌套但嵌套过深会降低可读性。每个控制器的作用域要清晰特别是变量作用域。八、常见错误与解决九、总结本文核心循环控制器重复执行If 控制器条件分支ForEach 控制器遍历数组变量交替控制器轮流执行子请求多种控制器组合可实现复杂业务流
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2605137.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!