关于定时器(Timer)

定时器(Timer)是一种配置元件,它可在测试计划中的各个请求(Sampler)之间添加延迟或等待时间。可以模拟用户在操作过程中的自然停顿,以及控制请求的发送频率。

以下是JMeter中几种常用的定时器类型:

  • 固定定时器(Constant Timer)

  • 统一随机定时器(Uniform Random Timer)

  • 常数吞吐量定时器(Constant Throughput Timer)

  • 准确的吞吐量定时器(Precise Throughput Timer)-暂不讲

  • JSR223定时器(JSR223 Timer)

  • 同步定时器(Synchronizing Timer)

  • 泊松随机定时器(Poisson Random Timer)

  • 高斯随机定时器(Gaussian Random Timer)

  • BeanShall定时器(BeanShell Timer)

使用示例脚本,需下载示例接口源码并运行。

固定定时器

它的作用是添加固定的时间间隔,可添加在测试计划、线程组、取样器下,使其作用域下的所有请求取样器延迟执行,时间单位为毫秒。

示例Jmeter脚本

  • 测试计划下添加两个线程组、固定定时器、用表格查看结果

  • 测试计划面板中勾选独立运行每个线程组

  • 固定定时器的线程延迟设置为3000

  • 两个线程组下分别添加三个HTTP请求取样器
    请求地址皆为:HTTP://127.0.0.1:5000/GetList/
    请求方式皆为:GET

运行结果

测试计划中勾选了独立运行每个线程组,所以6个请求顺序执行。固定定时器的作用域是整个测试计划,会导致每个请求取样器延迟3秒执行。

此示例中,固定定时器的作用域是测试计划,所以会使测试计划下的所有请求取样器延迟3秒执行。若固定定时器的作用域是线程组,那会使线程组下的所有请求取样器延迟3秒执行。固定定时器的作用域是请求取样器,就只会使该请求取样器延迟3秒执行。


统一随机定时器

它的作用是添加一个随机的时间间隔+一个固定的时间间隔,随机的时间间隔在用户0-值之间随机获取,固定的时间间隔可以看作最小时间,时间单位为毫秒。总的延时 = 固定延迟时间 + 随机生成的延时

作用域的逻辑与固定定时器一致。

示例Jmeter脚本

  • 测试计划下添加两个线程组、用表格查看结果

  • 线程组中循环次数配置为:2

  • 线程组下添加三个HTTP请求取样器
    名称分别为:HTTP请求-1-1、HTTP请求-1-2、HTTP请求-1-3
    请求地址皆为:HTTP://127.0.0.1:5000/GetList/
    请求方式皆为:GET

  • HTTP请求-1-2下添加统一随机定时器

  • 统一随机定时器中配置Random Delay Maximum(随机延迟):3000Constant Delay Offset(固定延迟):3000

运行结果

线程组执行了2次,则HTTP请求-1-2也执行了2次。HTTP请求-1-2的两次执行前延迟是不一致的,第一次是3秒,第二次是4秒,原因就是Random Delay Maximum(随机延迟)导致的。


同步定时器

它的作用是请求数达到阈值时,同步释放请求,保证取样器在同一时刻向服务器发起负载测试。可以设置模拟用户组的数量、超出时间,对并发量及等待时间进行控制,如果线程未达到模拟用户组的数量,它就会一致等待,此时就可以配置超出时间,等待超出时间后,将线程同步释放。

但是请注意,释放请求时可能会因为主机的性能限制不能同时释放,事实上导致释放时间不一致。解决办法就是购置高性能主机或布置多个从机。

不配置同步定时器

示例Jmeter脚本

  • 测试计划下添加线程组、用表格查看结果

  • 线程组中线程数配置为:100

  • 线程组下添加HTTP请求取样器
    请求地址为:HTTP://127.0.0.1:5000/GetList/
    请求方式为:GET

运行结果

第1个线程请求与第100个线程请求的执行时间相差1秒左右,线程数越大,则误差越大。

配置同步定时器

示例Jmeter脚本

  • 测试计划下添加线程组、用表格查看结果、同步定时器

  • 同步定时器的模拟用户组数量为:100

  • 线程组中线程数配置为:100

  • 线程组下添加HTTP请求取样器
    请求地址为:HTTP://127.0.0.1:5000/GetList/
    请求方式为:GET

运行结果

可以看出第1个线程请求与第100个线程请求的执行时间相差几毫秒左右。

超出时间

示例Jmeter脚本

  • 测试计划下添加线程组、用表格查看结果、同步定时器

  • 同步定时器的模拟用户组数量为:9、超出时间为3000

  • 线程组中线程数配置为:10

  • 线程组下添加HTTP请求取样器
    请求地址为:HTTP://127.0.0.1:5000/GetList/
    请求方式为:GET

运行结果

10个线程,同步定时器在线程数达到9(模拟用户组数量)时,释放这9个请求。剩下的1个,由于达不到9个线程(模拟用户组数量)的要求,只能延迟3秒(超出时间)释放。


常数吞吐量定时器

此计时器引入了可变暂停,经过计算以使总吞吐量(以每分钟样本数计算)尽可能接近给定数字。当然,如果服务器无法处理,或者其他计时器或耗时的测试元素阻止了吞吐量,则吞吐量会更低。

目标吞吐量(每分钟的样本量):单位分钟。比如样本量3000,则吞吐量为500/sec。

只有此线程

每个线程独立计算吞吐量,比如目标吞吐量:3000样本/分钟,线程数:5,则每个线程将独立尝试保持3000样本/分钟总吞吐量 = 3000 * 5 = 15000样本/分钟

配置示例Jmeter脚本

  • 测试计划下添加聚合报告、常数吞吐定时器、线程组

  • 常数吞吐定时器的基于计算吞吐量配置为:此线程、目标吞吐量配置为:60.0

  • 线程组下添加20个相同的HTTP请求取样器

  • 线程组的线程数配置为:100

  • HTTP请求取样器配置请求地址为:HTTP://127.0.0.1:5000/GetList/

  • HTTP请求取样器配置请求方式为:GET

运行结果

总的吞吐量=基于吞吐量×线程数,基于吞吐量为每分钟60个-即每秒1个。

则此次测试的总吞吐量为1×100=100/sec,实际结果与其一致。

当前线程组中的所有活动线程

线程组内的所有线程共同计算吞吐量,每个线程的吞吐量将基于它上次运行的时间,根据需要延迟调整。

如果配置为目标吞吐量:3000样本/分钟,线程组的线程数:10,这10个线程将共同实现3000样本/分钟的吞吐量,分配吞吐量并根据每个线程上次运行的时间进行延迟调整。

配置示例Jmeter脚本

  • 测试计划下添加聚合报告、常数吞吐定时器、线程组

  • 常数吞吐定时器的基于计算吞吐量配置为:当前线程组中的所有活动线程、目标吞吐量配置为:60.0

  • 线程组下添加20个相同的HTTP请求取样器

  • 线程组的线程数配置为:100

  • HTTP请求取样器配置请求地址为:HTTP://127.0.0.1:5000/GetList/

  • HTTP请求取样器配置请求方式为:GET

运行结果

© 转载需要保留原始链接,未经明确许可,禁止商业使用。CC BY-NC-ND 4.0