JMeter 中的控制器:循环、简单、事务、模块、随机
什么是逻辑控制器?
逻辑控制器允许您定义线程中处理请求的顺序。它让您控制“何时”将用户请求发送到网络服务器。例如,您可以使用随机控制器随机地向服务器发送 HTTP 请求。
逻辑控制器决定用户请求的执行顺序。
一些常用的逻辑控制器如下:
记录控制器
JMeter 可以记录您的测试步骤;记录控制器是一个占位符,用于存储这些记录步骤。
简单控制器
简单控制器只是用户请求的容器。
循环控制器
循环控制器使用户请求运行指定次数或永远运行,如图所示。
随机控制器
随机控制器使所有用户请求在每个循环周期内以随机顺序运行。
例如,您有 3 个用户请求发送到网站 http://www.google.com,顺序如下:
- HTTP 请求
- FTP 请求
- JDBC 请求
这 3 个请求应该运行 5 次。JMeter 将总共向 Google 服务器发送 15 个用户请求。
在顺序执行中,请求在每个循环中按以下顺序顺序发送:
HTTP 请求 -> FTP 请求 -> JDBC 请求
对于每个循环。
在随机执行中,请求是随机发送的,
FTP 请求 -> HTTP 请求 -> JDBC 请求
或者
JDBC 请求 -> FTP 请求 -> HTTP 请求
对于每个循环。
模块控制器
模块控制器的目标是为 JMeter 增加模块化。
一般的想法是,Web 应用程序由小的功能单元(即登录、创建账户、注销…)组成。这些功能可以作为“模块”存储在简单控制器中。模块控制器将选择需要运行哪个模块。
考虑以下场景:
您希望模拟:
- 50 个用户注销,
- 100 个用户登录
- 30 个用户搜索www.google.com
您可以使用 JMeter 创建 3 个模块。每个模块模拟一个用户活动:登录、注销和搜索。
模块控制器选择需要运行哪个模块。
其他重要控制器
- 交错控制器:在线程的每个循环中选择并执行一个用户请求。
- 运行时控制器:控制其子元素允许运行的时长。
例如,如果您将运行时控制器设置为 10 秒,JMeter 将运行您的测试 10 秒。
- 事务控制器:测量完成测试执行所需的总时间。
- 包含控制器:旨在使用外部测试计划。此控制器允许您在 JMeter 中使用多个测试计划。详情请参阅JMeter 性能测试。
循环控制器示例
本节将向您展示逐步说明,以将循环控制器集添加到您当前的性能测试计划中。
循环控制器使采样器运行特定次数,此外还会考虑您为线程组指定的循环值。例如,如果您:
- 向循环计数为 50 的循环控制器添加一个 HTTP 请求
- 将线程组的循环计数配置为 2
- 那么,JMeter 将总共发送 50 * 2 = 100 个 HTTP 请求。
这是本例的路线图
步骤 1) 配置线程组
我们重用了教程JMeter 性能测试中的步骤 1、2。
-
添加线程组
右键单击测试计划并添加一个新的线程组:添加-> 线程(用户) ->线程组
但在线程组控制面板中,按如下所示输入线程属性:
它将向 Web 服务器 google.com 发送一个用户请求并运行2次。
-
添加 JMeter 元素
将 HTTP 请求默认添加到 www.google.com。
-
添加循环控制器
右键单击线程组 -> 逻辑控制器 -> 循环控制器
步骤 2) 配置循环控制器
在循环计数字段中添加值 50,如下图所示。除了您为上述线程组指定的循环值 = 2 之外,它将使向 Web 服务器 google.com 发送的一个用户请求运行50次。因此,JMeter 将总共发送 2 * 50 = 100 个 HTTP 请求。
右键单击循环控制器,添加 -> 采样器 -> HTTP 请求
步骤 3) 添加“以表格形式查看结果”
我们重用计时器中的步骤 2 来添加“以表格形式查看结果”
因此,测试计划如下图所示:
步骤 4) 运行您的测试
现在返回“以表格形式查看结果”,点击菜单栏上的“开始”按钮 (Ctrl+R) 来运行测试。
如下图所示,JMeter 模拟了向 Web 服务器 http://www.google.com/ 发送的一个用户请求,共 100 次。在用户请求发送 100 次后,测试停止。
故障排除
- 如果您在运行上述场景时遇到问题……请执行以下操作:
- 检查您是否通过代理连接到互联网。如果是,请删除代理。
- 打开 JMeter 的新实例
- 在 JMeter 中打开 ControllerTestPlan.jmx
- 点击线程组 -> 以表格形式查看结果
- 运行测试