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 中的请求之间添加自定义延迟,并使用线程组设置更加灵活的加压方式。