关于定时器(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(随机延迟):3000
、Constant 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
...