JMeter定时器之固定吞吐量定时器(Constant Throughput Timer)
一、背景
在一般情况下,JMeter线程在发送请求之间是没有间歇时间的,为了更加真实地模拟用户请求情况,会将定时器用于在用户操作之间,为每个操作设置等待时间。
需要注意的是定时器是在每个取样器之前执行,无论定时器位置放在取样器之前还是之后,执行一个取样器时,所有当前作用范围内的定时器都会被率先执行。
如果需要定时器只对其中一个取样器生效,则需要将定时器作为取样器的子节点加入。
二、固定吞吐量定时器
固定吞吐量定时器主要用来设置QPS限制。它可以方便地控制取样器发送请求的吞吐量,常用在混合场景压测,尤其是同时压测多个接口,这种场景下我们需要对每个接口的吞吐量设置一个上限。
- Name:定时器的名称
- Target throughput(in samples per minute):目标吞吐量。注意,这里是每分钟发送的请求数。
- Calculate Throughput based on:有5个选项。
- this thread only:表示控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的目标吞吐量乘以线程的数量。
- all active threads:表示设置的目标吞吐量将分配在每个活跃线程上。每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指某一时刻同时运行的线程。
- all active threads in current thread group:表示设置的目标吞吐量将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和all active threads选项的效果完全相同。
- all active threads(shared):与all active threads选项基本相同,区别是每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。
- all active threads in current thread group (shared):与all active threads in current thread group选项基本相同,区别是每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。
三、注意事项
1、固定吞吐量定时器只有在线程组中的线程产生足够多请求的情况下才有意义。因此,即使设置了固定吞吐量定时器的值,也可能由于线程组中的线程数量不够,或是定时器设置不合理等原因导致总体的QPS不能达到预期目标。
2、在定时器作用范围内,定时器在取样器之前处理,范围内每个取样器执行前都将执行一次定时器。比如:两个定时器都将执行后,才执行取样器
3、如果同一范围内有多个定时器,则将在每个取样器之前处理所有定时器。定时器仅与取样器一起处理。与取样器不在同一范围内的定时器将不会被处理。
4、如果要将定时器应用于单个取样器,则要将定时器添加为取样器的子元素。在执行取样器之前将应用定时器。如果要在取样器之后应用定时器,则要将定时器添加到下一个取样器。如图所示: