定时器介绍

JMeter中的定时器一般被我们用来设置延迟与同步。定时器的执行优先级高于Sampler(取样器),在同一作用域(例如控制器下)下有多个定时器存在时,每一个定时器都会执行,如果想让某一定时器仅对某一Sampler有效,则可以把定时器加在此Sampler节点下
Constant Timer(固定定时器)

多用来模拟思考时间,顾名思义是:请求之间的间隔时间为固定值
Constant Throughput Timer
常数吞吐量定时器作用:控制吞吐量、制定tps(线上压测时候,避免一下就上百上千的吞吐量影响线上性能,加上这个之后较安全,可以一点一点往上加); 按指定的吞吐量执行,以每分钟为单位。计算吞吐量依据是最后一次线程的执行时延。
作用域:此定时器放在请求的下级,只对它的上级请求起作用

Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,可以选择作用的线程:当前线程、当前线程组、所有线程组等,具体含义如下:
this thread only: 设置每个线程的吞吐量。总的吞吐量=线程数*该值。
all active threads in current thread group:吞吐量被分摊到当前线程组所有的活动线程上。每个线程将根据上次运行时间延迟。
all active threads:吞吐量被分配到所有线程组的所有活动线程的总吞吐量。每个线程将根据上次运行时间延迟。在这种情况下,每个线程组需要一个具有相同设置的固定吞吐量定时器。(不常用)
all active threads in current thread group (shared):同上,但是每个线程是根据组中的线程的上一次运行时间来延迟。相当于线程组组内排队。(不常用)
all active threads (shared):同上,但每个线程是根据线程的上次运行时间来延迟。相当于让所有线程组整体排队。(不常用)
查看jp@gc - Transactions per Second

聚合报告

Synchronizing Timer
同步计时器,用来模拟多用户并发,或者说更严格的并发场景,比如秒杀活动,就要用这个玩意了。
作用:也是用来设置集合点,阻塞线程,同步虚拟用户,直到指定的线程数量到达后,恰好在同一时刻执行任务,再一起释放,可以瞬间产生很大的压力。
注意:敲黑板,敲脑袋!!!
一般情况,并发用户数多少,同步定时器就写多少。(多少并发就要等多少个人到齐一起释放)

Number of Simulated Users to Group by:集合点个数 (执行的线程数),如果设置为0,等于设置为线程租中的线程数量。
Timeout in milliseconds:指定线程数多少秒没集合到算超时(以毫秒为单位)。如果设置为0,该定时器将会等待线程数达到了"Number of Simultaneous Users toGroup"中设置的值才释放,不够的话就死等。如果大于0,那么如果超过Timeout inmilliseconds中设置的最大等待时间后还没达到"Number of Simultaneous Users toGroup"中设置的值,Timer将不再等待,释放已到达的线程。默认为0
注意:敲黑板,敲脑袋!!!
(1)上面两个参数如果都设置了值,则在实际中是哪个条件先达到,定时器先执行哪个,如第一个参数释放线程数量先达到,则不会管超时时间的值,timer会释放;如果第二个参数超时时间先达到,则不会再等线程数量,按照目前超时的时间点集合的线程数,timer释放。
(2)同步定时器(Synchronizing Timer)的超时时间设置要求: 超时时间 > 请求集合数量 * 1000 / (线程数 / 线程加载时间)
线程组用户数100,添加同步定时器
| 线程数(100) | 定时器等待线程数(视情况而定) | 超时设置(默认为0,单位毫秒) | 设置效果(脚本运行达到的效果) |
| 100 | 100 | 0 | 用户等待达到100个用户,同时并发请求 |
| 100 | 90 | 100 | 1、刚好超时100ms,且等到90个用户并发请求;2、等到90个用户,未超时,继续等到结束,再并发,这时用户数将大于90;3、等到小于90和用户,又超过了设置100ms,那么以等到的用户并发请求,可能小于90; |
| 100 | 110 | 0 | 用户无法达到110个用户,线程将一直等待,不会停止; |
| 100 | 100 | 100 | 1、刚好超时100ms,等到100个用户并发请求;2、超时100ms后,定时器以等到的最大用户数并发请求;3、如果超时100ms,用户数没有到达100,将以等到的用户数并发请求,这是用户数可能小于100; |
| 100 | 0 | 0 | 定时器设置的用户数等效于线程的用户数,超时默认设置为0,用户同时并发请求 |
示例
若某个请求需要并发测试,则可在该请求下添加同步定时器
1.新建测试计划,线程组(设置线程组10个,加载时间1s)下添加1个取样器

2.同步定时器设置

3.运行jmeter查看结果查看表格结果(几乎是在同一时间,10个用户同时并发)

定时器的作用域
1. 定时器是在每个sampler(采样器)之前执行的,而不是之后(无论定时器位置在sampler之前还是下面);
2. 当执行一个sampler之前时,所有当前作用域内的定时器都会被执行;
3. 如果希望定时器仅应用于其中一个sampler,则把定时器作为子节点加入;
4. 如果希望在sampler执行完之后再等待,则可以使用Test Action;





Comments | NOTHING