浅谈定时器之统一随机定时器
简介
JMeter的统一随机定时器(Uniform Random Timer)是一种用于在请求之间插入随机延迟的组件,旨在模拟真实用户操作间的不固定等待时间,从而更准确地模拟实际场景下的负载。这个定时器在每个线程循环中插入一个随机的时间间隔,增强测试的现实性和压力测试的有效性。
功能特点
- 随机延迟范围:允许用户设置一个随机延迟的最小值和最大值,JMeter会在这两个值之间随机选择一个时间间隔作为延迟。
- 统一性:虽然延迟是随机的,但“统一”意味着所有线程(虚拟用户)都会应用相同的随机算法,确保了测试的一致性。
- 独立性:每个线程独立计算延迟时间,不会因为其他线程的执行而影响自己的延迟时间。
配置步骤
- 添加定时器:首先,在JMeter测试计划中,选中需要添加定时器的取样器或控制器,右击选择“添加” -> “定时器” -> “统一随机定时器”。
- 配置参数:
○ 随机延迟最大值(Random Delay Maximum(in milliseconds)):设置延迟的最大时间,单位为毫秒。
○ Constant Delay Offset (in milliseconds):表示在随机延迟的基础上再增加一个固定的偏移量,进一步控制延迟时间。 - 应用与保存:配置完成后,保存并运行测试计划,JMeter将在指定的取样器前根据设定的参数插入随机延迟。
应用场景
● 性能和压力测试:通过模拟不同用户操作间的真实延迟,可以更准确地评估系统在高并发和复杂网络条件下的表现。
● 负载均衡测试:帮助识别系统在处理随机到达的请求时的稳定性和响应时间。
● 用户体验模拟:在进行Web应用或服务的性能测试时,通过模拟用户的不规律行为,使得测试结果更加贴近实际情况。
实例说明
首先我们编写这么一个脚本
线程组1参数保持默认,线程组1中的统一随机定时器设置随机延迟最大值(Random Delay Maximum(in milliseconds))为:1000,Constant Delay Offset (in milliseconds)设置为1000,BeanShell 取样器1-1、1-2、1-3中添加如下代码:
log.info("线程组1:${__time(yyyy-MM-dd HH:mm:ss.SSS,)}");
线程组2参数保持默认,线程组2中的统一随机定时器设置随机延迟最大值(Random Delay Maximum(in milliseconds))为:2000,Constant Delay Offset (in milliseconds)设置为3000,BeanShell 取样器2-1、2-2、2-3中添加如下代码:
log.info("线程组2:${__time(yyyy-MM-dd HH:mm:ss.SSS,)}");
运行脚本结果,查看JMeter日志如下
2024-06-18 16:46:33,450 INFO o.a.j.u.BeanShellTestElement: 线程组1:2024-06-18 16:46:33.450
2024-06-18 16:46:34,546 INFO o.a.j.u.BeanShellTestElement: 线程组1:2024-06-18 16:46:34.546
2024-06-18 16:46:35,677 INFO o.a.j.u.BeanShellTestElement: 线程组2:2024-06-18 16:46:35.676
2024-06-18 16:46:36,177 INFO o.a.j.u.BeanShellTestElement: 线程组1:2024-06-18 16:46:36.176
2024-06-18 16:46:36,177 INFO o.a.j.t.JMeterThread: Thread is done: 线程组1 1-1
2024-06-18 16:46:36,179 INFO o.a.j.t.JMeterThread: Thread finished: 线程组1 1-1
2024-06-18 16:46:39,718 INFO o.a.j.u.BeanShellTestElement: 线程组2:2024-06-18 16:46:39.718
2024-06-18 16:46:43,597 INFO o.a.j.u.BeanShellTestElement: 线程组2:2024-06-18 16:46:43.597
整理上述结果可以得到线程组1和线程组2每个取样器执行的时间为:
线程组1:
第一个取样器:2024-06-18 16:46:33.450
第二个取样器:2024-06-18 16:46:34.546
第三个取样器:2024-06-18 16:46:36.176
线程组2:
第一个取样器:2024-06-18 16:46:35.676
第二个取样器:2024-06-18 16:46:39.718
第三个取样器:2024-06-18 16:46:43.597
上述可得固定定时器的延迟时间是针对每个线程(用户)独立计算的,即线程1间隔是1至2秒,线程2间隔是3至5秒,也就是说,如果有多个线程并发运行,每个线程都会等待各自设定的延迟时间,而不是所有线程一起等待
注意事项
● 资源消耗:大量使用随机定时器可能会增加测试的不确定性和资源消耗,特别是在大并发测试中,请合理设置参数,避免不必要的资源浪费。
● 测试设计:应根据被测系统的特性和预期用户行为来决定是否使用及如何设置统一随机定时器,以达到最佳的测试效果。
● 结果分析:由于引入了随机因素,对测试结果的分析时需考虑这一变量,可能需要更多的样本数据来确保结果的可靠性。
结论
通过上述介绍和指导,您可以有效地利用JMeter的统一随机定时器来提升测试的真实性和有效性,为系统性能评估提供更加全面和精确的数据支持。