1. 概述
当我们使用 Apache JMeter 进行测试时,我们可能需要在请求之间添加一个延迟,以更好地模拟用户行为。
在本文中,我们将创建一个的 Test Plan。查看用于调整生成负载的参数,然后配置 Timer 以添加延迟。
2. 测试用例
在请求之间添加延迟,可以:
- 避免与在既定时间内发送过多请求相关的错误
- 模拟真实的用户操作,执行动作间的自然间隙
- 调整每分钟的请求数,以实现更精细的负载控制配置
3. 使用延迟
首先,我们需要定义加载配置文件。有如下两个目标:
- 查看系统在不断增长的并发下的行为,以发现性能瓶颈
- 查看应用程序在峰值并发后的恢复情况
有两个 JMeter 组件可以实现这两个目标:
- Thread Group – 设置并发用户数
- Timer – 在每个用户请求之间添加延迟
4. 测试计划
4.1. 基础配置
首先创建包含一个 Thread Group 的 Test Plan。在 Thread Group 中设置并发数、Ramp-up 时间以及和循环的次数。我们应该注意,JMeter Thread Group 中的一个线程就表示一个并发用户。
我们可以利用 Ramp-up 来不断增加负载。在这里,需要设置一个时间,这个事件表示线程数从 1 个线程开始到定义的线程数花费的时间。
为了创建更复杂的加载配置,我们还可以指定线程生命周期。需要做两个设置:
- Startup delay – JMeter 等待线程启动的时间
- Duration – 线程持续运行时间
Loop Count 也是指定 HTTP 请求重复执行次数的设置。
4.2. 添加请求
接着添加两个 HTTP 请求。将使用在线的 REST API 服务 gorest.co.in/ 来测试脚本。HTTP 请求在 GUI 界面中配置:
还需要添加两个断言,用于校验请求返回的数据。
为了检查测试执行是否有误。可以添加 View Results Tree 组件,然后执行 Test Plan。
请求执行的结果显示在 View Results Tree 中:
第二个请求的结果显示请求开始的时间是2022-10-30 17:51:10,与第一个请求的开始时间相同。也就是说默认情况下,请求之间没有任何延迟。
Thread Name:Thread Group 1-1 Sample Start:2022-10-30 17:51:10 CST 复制代码
因此,我们可以看看如何增加请求之间的开始时间。
5. 添加 Timers
5.1. Constant Timer
要添加 Timer 组件,可以右键单击 ThreadGroup 并选择 Add > Timer > Constant Timer:
这里为 Thread Group 添加了一个延迟为三秒的 Constant Timer。 这个 Constant Timer 在每个请求之间添加一个延迟,时间为 3s。
重新运行我们的 Test Plan 并查看 View Result Tree。请求以 Constant Timer 中设置的延迟运行。
Thread Name:Thread Group 1-1 Sample Start:2022-10-30 18:04:43 CST 复制代码
下一个 HTTP 请求是在第一个请求之后 3s 后开始的:
Thread Name:Thread Group 1-1 Sample Start:2022-10-30 18:04:47 CST 复制代码
5.2. Constant Timer 的替代方案
除了 Constant Timer 外,可以使用 Uniform Random Timer。这种类型的 Timer 添加方式与 Constant Timer 的添加方式相同。
在 JMeter 左侧下拉菜单中,它位于 Constant Timer 之后。
从名称可以看出,该 Timer 可以将延迟固定在特定范围内变化,将该 Timer 添加到 Thread Group 中,看看它是如何工作的:
固定延迟偏移为每个延迟添加一个永久固定部分。随机延迟最大值帮助我们定义一个附加的随机部分,该部分将添加到固定延迟偏移中。这些设置允许我们提供最大延迟,而不会使延迟变得太小。
执行 Test Plan 并查看 View Result Tree 的内容:
如果我们仔细请求的开始时间,我们会看到根据定义的 Timer 参数添加了随机延迟。
Thread Name:Thread Group 1-1 Sample Start:2022-10-30 18:07:36 CST 复制代码
Thread Name:Thread Group 1-1 Sample Start:2022-10-30 18:07:40 CST 复制代码
Thread Name:Thread Group 1-1 Sample Start:2022-10-30 18:07:44 CST 复制代码
我们已经使用了几个 Timer 组件,尽管还有其他 Timer 配置可以使用。
6. 结论
在本文中,我们了解了如何在 Apache JMeter 中的请求之间添加自定义延迟,并使用线程组设置更加灵活的加压方式。