一、 定时器的作用域
- 定时器是在每个sampler之前执行的,无论定时器位置在sampler之前还是子节点下面
- 当执行一个sampler之前时,所有当前作用域内的定时器都会被执行;
- 如果希望定时器仅对其中一个sampler起作用,则把定时器作为其子节点加入;
注意:定时器的时间不会计入单个sampler的响应时间,但如果有使用事务控制器,会计入事务控制器的时间,
对于事务控制器来说,定时器相当于loadrunner中的think time。
但是实战中发现,如果添加了定时器,比不加定时器单个sample的响应时间长,并且定时器中设置的思考时间越大,单个sample的响应时间就更长,后面通过升级Jmeter版本解决了此问题。如经测验,apache-jmeter-5.6.3就不存在此问题。
二、定时器介绍
1. 固定定时器(Constant Timer)
作用:让每个线程在服务请求之前按相同的指定时间停顿
2. 高斯随机定时器(Gaussian Random Timer)
如果需要每个线程的延迟时间是符合标准正态分布的随机时间停顿,那么使用这个定时器,总延迟 = 高斯分布值(平均0.0和标准偏差1.0)* 指定的偏差值+固定延迟偏移
3. 同步定时器(Synchronizing Timer)
作用:可以理解为集合点,当线程数量达到指定值后,再一起释放,可以瞬间产生很大的压力。
需要特别注意:如果使用“不停顿启动”会让集合点失效;启动按键:脚本设置好后,按启动按键启动,将会严格按设置的运行,在指定的ramp-up时间内准备线程;不停顿开始:按不停顿开始按键执行脚本,不会按照设置好的运行,开始后准备好的线程数直接发起请求。
4. 均匀随机定时器(Uniform Random Timer)
和高斯随机定时器的作用差异不大,它产生的延迟时间是个随机值,而各随机值出现的概率均等。总的延迟时间等于一个随机延迟时间加上一个固定延迟时间,用户可以设置随机延迟时间和固定延迟时间。
5. 常数吞吐量定时器(Constant Throughput Timer)
作用:可以让JMeter以指定数字的吞吐量(即指定TPS,只是这里要求指定每分钟的执行数,而不是每秒)执行。
Target throughput(in samples per minute):目标吞吐量。注意这里是每分钟发送的请求数,因此,对应测试需求中所要求的20 TPS ,这里的值应该是1200
吞吐量计算的范围可以为指定为当前线程、当前线程组、所有线程组等范围,并且计算吞吐量的依据可以是最近一次线程的执行时延。这种定时器在特定的场景下,还是很有用的。
6. 精准吞吐量定时器(Precise Throughput Timer)
Target Throught:目标吞吐量
Throught Period:表示在多长时间内发送Target Throught指定的请求数(以秒为单位)
Test Druation:指定测试运行时间(以秒为单位)
Number of threads in the bath:用来设置集合点,等到指定个数的请求后并发执行
其它参数默认即可。
Precise Throughput Timer根据吞吐量在做计时器(到了多少量就发请求),可以做到控制请求的速度和个数
7. Poisson Random Timer 泊松随机定时器
这个定时器在每个线程请求之前按随机的时间停顿,总的延迟就是泊松分布值和偏移值之和。
上面表示暂停时间会分布在100到400毫秒之间:
(1)Lambda(in milliseconds):兰布达值
(2)Constant Delay Offset(in milliseconds):暂停的毫秒数减去随机延迟的毫秒数
8. BeanShell Timer BeanShell脚本编写定时器
参数说明:
Reset Interpreter:每次迭代是否重置解析器,默认为false;在长时间运行的脚本中建议设置为true。
Parameters:BeanShell脚本的入参。入参可以是单个变量;也可以是数组,若是字符串数组,两个元素之间用空格隔开;也可以是常量。
File Name:BeanShell脚本可以从脚本文件中读取。
Script:在Script区直接写BeanShell脚本。
9. JSR223 Timer JSR223定时器
JSR223计时器可以使用JSR223脚本语言生成延迟