一、定时器的作用域
-
定时器是在每个sampler(采样器)之前执行的,而不是之后(无论定时器位置在sampler之前还是下面);
-
当执行一个sampler之前时,所有当前作用域内的定时器都会被执行;
-
如果希望定时器仅应用于其中一个sampler,则把定时器作为子节点加入;
-
如果希望在sampler执行完之后再等待,则可以使用Test Action;
二、定时器的作用
-
固定定时器(Constant Timer)
备注:如果需要每个步骤均延迟,则将定时器放在与请求持平的位置,若只针对一个请求延迟,则将定时器放在该请求子节点中。如果你需要让每个线程在请求之前按相同的指定时间停顿,那么可以使用这个定时器;需要注意的是,固定定时器的延时不会计入单个sampler的响应时间,但会计入事务控制器的时间。
对于“java请求”这个sampler来说,定时器相当于loadrunner中的pacing(两次迭代之间的间隔时间);
对于“事务控制器”来说,定时器相当于loadrunner中的think time(思考时间:实际操作中,模拟真实用户在操作过程中的等待时间)。
这里附上一个传送门,对loadrunner中的pacing和think time有比较全面的解释:https://zhidao.baidu.com/question/1431215934913423459.html
我们通常说的响应时间,应该大部分情况下是针对某一个具体的sampler(http请求),而不是针对一组sampler组合的事务 。
-
高斯随机定时器(Gaussian Random Timer)
如需要每个线程在请求前按随机时间停顿,那么使用这个定时器,上图表示暂停时间会分布在100到400之间,计算公式参考:Math.abs((this.random.nextGaussian() * 300) + 100) -
均匀随机定时器(Uniform Random Timer)-统一随机定时器
和高斯随机定时器的作用差异不大,区别在于延时时间在指定范围内且每个时间的取值概率相同,每个时间间隔都有相同的概率发生,总的延迟时间就是随机值和偏移值之和。下面表示的是随机延迟时间的最大值是100毫秒:
(1)Random Delay Maximum(in milliseconds):随机延迟时间的最大毫秒数
(2)Constant Delay Offset(in milliseconds):暂停的毫秒数减去随机延迟的毫秒数
-
泊松随机定时器(Poisson Random Timer)
类似高斯随机定时器。定时器在每个线程请求之前按随机的时间停顿,大部分的时间间隔出现在一个特定的值,总的延迟就是泊松分布值和偏移值之和。(1)Lambda(in milliseconds):兰布达值(以毫秒为单位)
(2)Constant Delay Offset(in milliseconds):固定延迟偏移(以毫秒为单位)。暂停的毫秒数减去随机延迟的毫秒数
下面表示暂停时间会分布在100到400毫秒之间:
-
同步定时器(Synchronizing Timer)
作用:用来设置集合点,其作用是:阻塞线程,直到指定的线程数量到达后,再一起释放,可以瞬间产生很大的压力(1)Number of Simulated Users to Group by:模拟用户的数量,即指定同时释放的线程数数量;0表示设置的线程组的线程数据,即是所有用户。
(2)Timeout in milliseconds:超时时间,即超时多少毫秒后同时释放指定的线程数;如果设置为0,该定时器将会等待线程数达到了设置的线程数才释放,若没有达到设置的线程数会一直死等。如果大于0,那么如果超过Timeout inmilliseconds中设置的最大等待时间后还没达到设置的线程数,Timer将不再等待,释放已到达的线程。默认为0
同步定时器(Synchronizing Timer)的超时时间设置要求:超时时间 > 请求集合数量 * 1000 / (线程数 / 线程加载时间)
-
固定吞吐量定时器(Constant Throughput Timer)-常数吞吐量定时器
作用:按指定的吞吐量执行,以每分钟为单位。计算吞吐量依据是最后一次线程的执行时延。可以选择作用的线程:当前线程、当前线程组、所有线程组等,具体含义如下: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):同上,但每个线程是根据线程的上次运行时间来延迟。相当于让所有线程组整体排队。(不常用)
-
BeanShell定时器(BeanShell Timer)
-
JSR223定时器(JSR223 Timer)
Thread.sleep(4000); 意思是指等待4秒,然后我们运行看看结果
9. 精准吞吐量定时器(Precise Throughput Timer)
作用:和Constant Throughput Timer类似,但是能更精准的控制请求。区别就是Constant Throughput Timer根据时间来做定时器(到了多少秒就发请求);Precise Throughput Timer是根据吞吐量在做计时器(到了多少量就发请求)。也就是能做到控制请求的速度和个数。
Delay threads to ensure target throughput:
–Target Throught:目标吞吐量
–Throught Period:表示在多长时间内发送Target Throught指定的请求数(以秒为单位)
–Test Druation:指定测试运行时间(以秒为单位)
Batched depatured:
–Number of threads in the batch(threads):用来设置集合点,等到指定个数的请求后同时从线程组中离开
–Delay between threads in the batch(ms):延迟时间。if set to 42, and the batch size is 3, then threads will depart at x, x+42ms, x+84ms
Accuracy of generated delays:
–Use approximate throughput when sequence lenght exceeds(samples)
–Allowed throughput surplus(percent)
-
Throughput Shaping Timer
****作用****:用来模拟指定的系统吞吐量
*参数说明:*
Start RPS:RPS的起始值
End RPS:RPS的结束值
Duration,sec:持续时间,单位:秒
注意:
End RPS 设置了RPS 上限,但要达到此值是需要线程(虚拟用户〉来执行的,*****所以我们先要预设够多的线程,不然RPS目标没法达到,JMeter 线程组在运行过程中是不会自动增加线程数的,只能…次性设置。下面有个计算线程数的公式。
比如一个请求响应时间为2秒,END RPS 为30,那么线程数:2*30=60 C响应时间*TPS)。即大约要60个线程, 考虑到运行时诸多影响因素(线程数增加后响应时间增加了), 我们还**需要预备更多的线程,也许我们加到70个线程才能满足要求,这只是一个估算值。不用担心***线程数太多时RPS 会超End RPS, 此元件会自动延迟线程的运行来稳定RPS。