Jmeter系列(八)-定时器(待更新)
JMeter 中的定时器(Timers)是核心元件之一,用于在采样器(Sampler)之间引入延迟。它们的主要目的是:
模拟用户思考时间: 真实用户在操作之间会停下来阅读、思考或输入信息。定时器可以模拟这种行为,使测试负载更接近实际用户行为。
控制请求发送速率: 防止 JMeter 以服务器可能无法处理的最大速度发送请求,避免压垮服务器或产生不真实的压力曲线。
创建更真实的负载分布: 避免所有请求在同一毫秒内到达,模拟现实中用户请求的随机到达。
同步虚拟用户: 特定的定时器(如同步定时器)可以让多个线程在同一时刻发起请求,模拟瞬间高并发场景(如秒杀、抢购)。
规则:
作用域: 定时器的作用域取决于其放置位置:
放在采样器之下:仅对该采样器生效(在采样器执行前等待)。
放在线程组/控制器(如简单控制器)之下:对其作用域内的所有采样器生效。
放在线程组顶层:对整个线程组的所有采样器生效。
叠加性: 如果多个定时器作用于同一个采样器,它们的延迟时间会被叠加。例如,一个固定定时器(1000ms)加一个高斯随机定时器(平均500ms),总延迟可能在1500ms左右(1000ms + 随机值)。
执行顺序: 在同一个作用域内,定时器在采样器之前、前置处理器之后执行。配置元件 > 前置处理器 > 定时器 > 采样器 > 后置处理器 > 断言 > 监听器。
一、固定定时器
作用: 在采样器执行前引入一个固定长度的延迟。
参数:
线程延迟(毫秒)
:固定的等待时间(以毫秒为单位)。
使用场景:
需要在每个请求之间精确地等待相同的时间。
测试需要严格遵守特定请求间隔率的场景。
作为其他更复杂定时器的基准或组成部分。
示例: 模拟用户每次点击后固定思考 3 秒,设置
线程延迟
为3000
二、统一随机定时器
三、Precise Throughpupt Timer(准确的吞吐量定时器)
四、Constant Throughpupt Timer(常数吞吐量定时器)
作用: 这是最强大也最常用的定时器之一,用于控制整个测试计划或部分测试计划的吞吐量(每分钟的采样数)。JMeter 会根据设定的目标吞吐量动态调整线程之间的等待时间,努力达到指定的请求速率。
参数:
目标吞吐量(每分钟的样本数)
:核心参数,指定你希望达到的平均请求速率(按每分钟计算)。基于计算吞吐量
:选择吞吐量计算的范围此线程仅
:每个线程独立计算自己的吞吐量所有活动线程
(默认且最常用):基于当前所有活动线程(同一线程组内) 的总吞吐量来计算延迟。确保整个线程组达到目标总吞吐量。当前线程组中的所有活动线程
:同上,作用域明确为当前线程组。所有活动线程(共享)
:跨所有线程组的活动线程计算总吞吐量。用于需要精确控制跨多个线程组的总请求速率的复杂场景。
工作原理: JMeter 会计算当前实际的吞吐量(每分钟处理的样本数),并与目标比较。如果实际吞吐量低于目标,它会减少延迟时间(甚至为0)让线程更快发出请求;如果实际吞吐量高于目标,它会增加延迟时间来减慢请求速度。
使用场景:
精准控制请求压力: 需要以恒定速率(如每分钟 1000 个请求)向服务器施压,观察服务器在不同恒定负载下的表现(响应时间、错误率、资源使用率)。
避免突发流量:相比固定线程数,它能更平滑地产生负载。
容量规划:确定系统在特定请求速率下的处理能力和瓶颈。
注意事项:
单位是
每分钟
! 如果需要每秒的吞吐量,需要换算(例如 60 请求/秒 = 3600 请求/分钟)。目标吞吐量是平均值,瞬时速率会有波动。
线程数必须足够: 要达到很高的目标吞吐量,必须有足够多的活跃线程来产生请求。如果线程数太少,即使延迟为0,也无法达到目标。
通常放在线程组层级来控制整个线程组的吞吐量。
示例: 要模拟系统持续承受 50 请求/秒的压力,设置
目标吞吐量 = 3000
(50 * 60),基于计算吞吐量 = 所有活动线程
。
五、JSR223 Timmer
六、同步定时器
作用: 让一定数量的虚拟用户(线程)在某个点(
超时时间
内)等待,直到达到指定数量后,所有等待的线程在同一个瞬间(毫秒级)同时释放,触发其下一个采样器。用于模拟瞬间高并发。参数:
模拟用户组的数量
:需要聚集多少个线程后才一起释放执行。如果设置为0
,则等于线程组中设置的线程数(所有线程一起同步)。超时时间(毫秒)
:线程等待其他线程加入的最大时间(毫秒)。如果在此时间内未达到指定的线程数,已到达的线程也会被释放(避免线程永远等待)。
使用场景:
秒杀、抢购、限时优惠券领取: 模拟大量用户在同一时刻点击“提交订单”或“立即抢购”。
系统登录峰值: 模拟上班打卡时大量用户同时登录系统。
缓存击穿: 模拟大量请求同时查询一个刚过期的缓存项,导致请求穿透到数据库。
测试系统的突发流量处理能力和瞬间并发上限。
注意事项:
会显著增加测试的响应时间(因为线程在等待),这个增加的等待时间是为了制造并发,本身不是系统的处理时间。
需要合理设置
超时时间
,避免线程因等待不足而长时间阻塞。通常设置在几秒到几十秒。同步点之后的请求会瞬间爆发,对服务器压力极大。
示例: 模拟 1000 个用户同时抢购商品。设置
模拟用户组的数量 = 1000
,超时时间 = 10000
(10秒)。前 999 个到达该定时器的线程会等待,直到第 1000 个线程到达(或在 10 秒超时后),然后这 1000 个线程会几乎同时执行下一个采样器(如下单请求)。