在 Apache JMeter 中使用定时器组件来模拟真实用户行为是非常重要的,因为这有助于确保你的性能测试结果更加贴近实际情况。
1. 固定定时器(Constant Timer)
这是最基础的定时器,用于在每个样本之间增加固定的时间延迟。然而,由于它缺乏灵活性,因此在模拟真实的用户行为时并不总是最理想的选择。
时间配置大一点,固定定时器配置60s,然后执行2个线程,可以显著的看到效果
效果如下:
2. 高斯随机定时器(Gaussian Random Timer)
提供基于正态分布的随机延迟,可以设置平均值和标准差,以模拟更自然的行为模式。这对于模拟具有可变响应时间的真实用户非常有用。
高斯随机定时器配置如下:
效果如下:
3. 均匀随机定时器(Uniform Random Timer)
在两个指定的最小和最大值之间产生随机延迟,所有可能的延迟时间具有相同的概率。适用于需要在一定范围内均匀分布延迟的情况。
均匀随机定时器配置如下:
效果如下:
4. 同步定时器(Synchronizing Timer)
类似于 LoadRunner 中的集合点功能,可以用来创建突发流量,模拟大量用户同时执行某个操作。这对于测试系统在高并发下的表现非常关键。
同步定时器配置如下:
效果如下,配置0ms时,不同线程发起请求确是同一时间:
5. 泊松随机定时器(Poisson Random Timer)
使用泊松分布来决定延迟,这在某些特定场景下可能更符合实际用户行为,例如在消息队列中。
泊松随机定时器配置如下:
效果如下:
6. 恒定吞吐量定时器(Constant Throughput Timer)
控制每分钟的请求数量,确保测试保持恒定的吞吐量,对于模拟持续负载非常有用。
恒定吞吐量定时器配置如下:
-
Target throughput(目标吞吐量)
这个字段用于设置每分钟想要达到的请求数量。例如,如果你设置为60,那么JMeter会尝试每分钟发送60个请求。 -
Initial Delay (in seconds)(初始延迟时间)
这个字段可选,用于设置在开始发送请求前等待的秒数。如果你的测试计划中包含多个线程,这个延迟可以帮助分散启动时间,避免所有线程同时开始发送请求。 -
Ramp-Up period (in minutes)(预热期,以分钟计)
这个字段同样可选,用于设置达到目标吞吐量之前逐渐增加请求的时期。例如,如果设置为2分钟,JMeter会在前两分钟内逐步增加请求速率,直到达到目标吞吐量。 -
Use thread groups throughput(使用线程组的吞吐量)
如果勾选此选项,那么JMeter会根据当前线程组的配置计算吞吐量。如果不勾选,那么目标吞吐量将应用于整个测试计划。
效果如下:
7. JSR223 定时器和 BeanShell 定时器
这些定时器允许使用脚本来动态地控制延迟,提供了高度的定制性和灵活性,但同时也增加了复杂性。BeanShell 已经不再更新,JMeter 开发团队推荐使用 JSR223 定时器作为替代
JSR223 定时器配置如下:
在弹出的 JSR223 定时器配置窗口中,你将在 “Script” 区域编写你的脚本。设置 “Language” 选项为 “Groovy”,然后在 “Script” 部分输入以下代码:
def randomDelay = new Random().nextInt(4000) + 1000 // 生成 1000 到 5000 之间的随机数
Thread.sleep(randomDelay) // 在请求之间插入随机延迟
效果如下:
总结
选择合适的定时器类型取决于你的测试需求和所要模拟的具体场景。理解每种定时器的工作原理和适用场景,可以帮助你更准确地设计性能测试,从而获得更有价值的结果。在设计测试计划时,应该考虑业务逻辑、用户行为以及系统架构,以便选择最适合的定时器策略。
文章原创首发于微信公众号 软件测试微课堂,更多内容欢迎关注微信公众号查看