jmeter提供了很多元件,帮助我们更好的完成各种场景的性能测试,其中,定时器(timer)是很重要的一个元件,jemter提供了9种定时器,下面一一介绍:定时器的作用域
- 1、定时器是在每个sampler(采样器)之前执行的,而不是之后(无论定时器位置在sampler之前还是下面);
- 2、当执行一个sampler之前时,所有当前作用域内的定时器都会被执行;
- 3、如果希望定时器仅应用于其中一个sampler,则把定时器作为子节点加入;
定时器详解
- 1、固定定时器Constant Timer
如果你需要让每个线程在请求之前按相同的指定时间停顿,那么可以使用这个定时器;需要注意的是,固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间
- 单线程,与sampler同级,每个sampler之间固定停顿3s,无顺序影响(若线程组设置循环2次,生效规则一样)- 单线程,处于sampler2下级,仅作用域sampler2,sampler2运行前停顿3s(若线程组设置循环2次,生效规则一样)- 多线程,与sampler同级,每个sampler之间固定停顿不固定(目前测的)
- 2、统一随机定时器Uniform Random Timer
和高斯随机定时器的作用差异不大,区别在于延时时间在指定范围内且每个时间的取值概率相同,每个时间间隔都有相同的概率发生,总的延迟时间就是随机值和偏移值之和。该定时器可以在请求之间设置一个随机延时,每个随机延时有相同的发生概率。总的延时等于随机延时 偏移延时值。
Random Delay Maximum(in milliseconds):随机延迟时间的最大毫秒数 Constant Delay Offset(in milliseconds):暂停的毫秒数减去随机延迟的毫秒数
代码语言:javascript复制- 单线程,与sampler同级,每个sampler之间随机停顿0-3s 2s,无顺序影响(若线程组设置循环2次,生效规则一样)- 单线程,处于sampler2下级,仅作用域sampler2,sampler2运行前停顿0-3s 2s(若线程组设置循环2次,生效规则一样)3、高斯随机定时器Gaussian Random Timer
Tread Delay Properties:单位都是毫秒,固定延迟300ms,偏差100ms,意思是时间延迟300-400ms之间
Deviation (in milliseconds):偏差值,是一个浮动范围;Constant Delay offset (in milliseconds):固定延迟时间
- 单线程,与sampler同级,若只设置了固定延迟偏移2000,每个sampler之间固定停顿,2s,无顺序影响(若线程组设置循环2次,生效规则一样)
- 单线程,处于sampler2下级,仅作用域sampler2,若只设置了固定延迟偏移2000,sampler2运行前停顿2s(若线程组设置循环2次,生效规则一样)
- 4、集合点/同步定时器Synchronizing Timer 这个定时器和loadrunner当中的集合点(rendezvous point)作用相似,其作用是:阻塞线程,直到指定的线程数量到达后,再一起释放,可以瞬间产生很大的压力,实行并发效果
- Number of Simulated Users to Group by:模拟用户的数量,即指定同时释放的线程数数量 等待达到多少用户时,一起并发请求
- Timeout in milliseconds:超时时间,即超时多少毫秒后同时释放指定的线程数
如果为0表示一直等待,直至达到(1)中用户数才一起请求;如果非0,例如30,表示只等待30ms不管是否达到(1)中用户数 都进入到下一步的并发
代码语言:javascript复制- 作用于所有线程和所有sampler,sampler之间的并发独立的,与sampler同级,Number of Simulated Users to Group by:设置为2,Timeout in milliseconds:0,等到集合到2个线程时,同时并发请求
- 作用于所有线程和sampler2,sampler之间的并发独立的,处于sampler2下级,只作用于sampler2,Number of Simulated Users to Group by:设置为2,Timeout in milliseconds:0,等到sampler2集合到2个线程时,同时并发请求
- 作用于所有线程和所有sampler,sampler之间的并发独立的,线程数设置为2,Number of Simulated Users to Group by:设置为3,Timeout in milliseconds:0,会一直等待中
- 作用于所有线程和所有sampler,sampler之间的并发独立的,线程数设置为2,Number of Simulated Users to Group by:设置为3,Timeout in milliseconds:1000,超过1000ms等待时,会自动运行当前等到的线程;
a 若与sampler同级,超时时间会作用于左右sampler;a 若处于sampler2下级,超时时间会作用于sampler2运行前
固定吞吐量定时器Constant Throughput Timer
测试需求:测试20个用户访问网站在负载达到30QPS时的平均响应时间
Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,因此,对应测试需求中所要求的20 QPS ,这里的值应该是1200 。
Calculate Throughput based on :有5个选项,分别是:This thread only :控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的 target Throughput 乘以矣线程的数量。 All active threads :设置的target Throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。 All active threads in current thread group :设置的target Throughput将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和All active threads选项的效果完全相同。 All active threads (shared ):与All active threads 的选项基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。 All cative threads in current thread group (shared ):与All active threads in current thread group 基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。
设置定时器的Target throughput为1200/分钟(20 QPS),设置Calculate Throughput based on 的值为All active threads 。
当然,Constant Throughput Timer只有在线程组中的线程产生足够多的request 的情况下才有意义,因此,即使设置了Constant Throughput Timer的值,也可能由于线程组中的线程数量不够,或是定时器设置不合理等原因导致总体的QPS不能达到预期目标。