浅谈逻辑控制器之随机顺序控制器
随机顺序控制器(Random Order Controller)作为一个独特的逻辑控制器,为测试脚本的执行增添了一层随机性,特别适用于模拟用户行为中不确定的访问模式。
随机顺序控制器概述
随机顺序控制器(Random Order Controller)与标准的简单控制器或循环控制器不同,它不按照固定的顺序执行其下的子采样器或控制器,而是以随机的顺序来执行这些子元素。这使得测试更加贴近现实世界场景,尤其是当需要模拟用户随机访问网站页面或服务端点的情况时。
功能特性
- 随机执行顺序:每次执行测试计划时,随机顺序控制器下的所有子元素将会以完全随机的顺序被执行。这有助于模拟不同用户访问页面或资源的随机性。
- 忽略子控制器块:该控制器提供了一个选项“Ignore sub-controller block”,如果勾选,它会将子控制器视为单个请求,而不是作为一个包含多个请求的块来处理。这意味着子控制器内部的顺序也将被打乱并作为整体随机执行。
- 适应场景:非常适合用于模拟多路径访问、A/B测试场景、或者任何需要随机化访问模式的测试用例。
使用步骤
- 添加随机顺序控制器:在JMeter测试计划中,右键点击需要放置随机顺序控制器的父节点(如线程组),选择“添加” -> “逻辑控制器” -> “随机顺序控制器”。
- 配置控制器:根据需要,可以设置控制器的描述性名称,便于识别。决定是否勾选“Ignore sub-controller block”选项。
- 添加子元素:在随机顺序控制器下,添加你想要随机执行的采样器或其它逻辑控制器。
- 运行测试:保存测试计划后,运行测试。每次迭代,控制器下的元素都将按照不同的随机顺序执行。
实例说明
我们编写如下脚本:
线程组:循环次数设置为2
BeanShell 取样器1:编写如下代码
log.info("test1");
BeanShell 取样器2:编写如下代码
log.info("test2");
BeanShell 取样器3:编写如下代码
log.info("test3");
执行脚本,查看JMeter日志如下
2024-06-27 17:30:51,050 INFO o.a.j.t.JMeterThread: Thread started: 线程组 1-1
2024-06-27 17:30:51,061 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 17:30:51,062 INFO o.a.j.u.BeanShellTestElement: test3
2024-06-27 17:30:51,063 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 17:30:51,064 INFO o.a.j.u.BeanShellTestElement: test1
2024-06-27 17:30:51,065 INFO o.a.j.u.BeanShellTestElement: test2
2024-06-27 17:30:51,067 INFO o.a.j.u.BeanShellTestElement: test3
2024-06-27 17:30:51,093 INFO o.a.j.t.JMeterThread: Thread is done: 线程组 1-1
按照随机的顺序执行,该功能跟逻辑控制器随机控制器基本一致
最佳实践
● 结合定时器:为了更真实地模拟用户行为,可以在随机顺序控制器下使用定时器来引入延迟。
● 注意资源分配:确保测试设计考虑到随机顺序可能导致的资源分配不均,特别是当某些请求比其他请求消耗更多资源时。
● 监控与分析:使用监听器来监控测试结果,分析随机顺序执行对系统性能的影响。
总结
随机顺序控制器是JMeter中一个强大且灵活的组件,它能够增强测试的真实性和复杂度。通过随机化子元素的执行顺序,测试人员可以更好地模拟不可预测的用户流量模式,从而提高测试的有效性和覆盖范围。掌握这一控制器的使用,对于进行更全面和真实的性能测试至关重要。