- 翻译来自Timers
18.6 Timers
JMeter3.1版有一个新特性,新增了乘法因子一项,可以通过设置属性timer.factor=float number(其中float number是十进制正数)将乘法因子应用于随机定时器。
JMeter将把这个因子乘以计算出的睡眠延迟此功能可用于:
- 高斯随机定时器
- 泊松随机定时器
-
均匀随机定时器
定时器与采样器在同一范围内,无论定时器是单个还是多个,定时器都将在每个采样器之前处理;定时器与采样器不在同一范围内,将不被处理。
如果要将定时器应用于单个采样器,可以将定时器添加为采样器的子元素;如果想在采样器之后应用定时器,需要将定时器添加到下一个采样器,或将其添加到Flow Control Action采样器的子项。
Constant Timer(常量定时器)
使用常量定时器时,每个线程在请求之间暂停相同的时间。
- Parameters
Attribute | Description | Required |
---|---|---|
Name | 定时器名称 | NO |
Thread Delay | 暂停的毫秒数 | YES |
Gaussian Random Timer(高斯随机定时器)
高斯随机定时器使得每个线程请求暂停一段随机时间(随机延迟时间),随机延迟时间总体分布在特定值附近。总的延迟时间是高斯分布值(平均值为0.0,标准偏差为1.0)乘以指定的偏差值(Deviation)加上偏移量(Offset Value)。另一种解释方法是,在高斯随机定时器中,恒定偏移量的变化具有高斯曲线分布。
- Parameters
Attribute | Description | Required |
---|---|---|
Name | 定时器名称 | NO |
Deviation | 偏差值(毫秒) | YES |
Constant Delay Offset | 除了随机延迟之外还需要暂停的毫秒数(原文查看Number of milliseconds to pause in addition to the random delay.) | YES |
Uniform Random Timer(均匀随机定时器)
均匀随机定时器使得每个线程请求暂停一段随机时间),每个时间间隔具有相同的发生概率,总延迟是随机值和偏差值的总和。
- Parameters
Attribute | Description | Required |
---|---|---|
Name | 定时器名称 | NO |
Random Delay Maximum | 最大的随机暂停时间(单位是毫秒) | YES |
Constant Delay Offset | 除了随机延迟之外还需要暂停的毫秒数 | YES |
Constant Throughput Timer(恒定吞吐量定时器)
恒定吞吐量定时器引入可变的暂停时间,使得总吞吐量(以每分钟的采样数计算)尽可能接近给定的数字,如果服务器无法处理它,或者其他计时器或耗时的测试元素阻止它,那么吞吐量将降低。
注意:虽然计时器被称为恒定吞吐量定时器,但实际应用中,吞吐量可以根据变量或函数调用定义,并且可以在测试期间更改该值,该值可以通过多种方式更改:
- 使用计数器变量
- 使用一个__jexl3,__groovy 函数提供一个变化的值
- 使用远程BeanShell服务更改JMeter属性
有关详细信息,请参见 Best Practices。
请注意,在测试过程中不应该经常更改吞吐量值,新值需要一段时间才能生效。
- Parameters
Attribute | Description | Required |
---|---|---|
Name | 定时器名称 | NO |
Target Throughput | 目标吞吐量 | YES |
Calculate Throughput based on | 见附1 | YES |
附1
- 当前线程-每个线程将尝试保持目标吞吐量。总吞吐量将与活动线程数成比例。
- 当前线程组中的所有活跃线程-目标吞吐量除以当前线程组中的所有活跃线程。每个线程将根据它上次运行的时间而决定延迟时间。
- 所有活跃线程-目标吞吐量在所有线程组中的所有活跃线程之间分配。每个线程都会根据它上次运行的时间而决定延迟时间。在这种情况下,每个线程组都需要一个具有相同设置的恒定吞吐量计时器。
- 当前线程组中的所有活跃线程(共享)-如上所述,但每个线程都会根据组中的任何线程上次运行的时间而延迟。
- 所有活跃线程(共享)-如上所述;每个线程都会根据上次运行任何线程的时间延迟。
共享和非共享模式都是为了产生期望的吞吐量,不过共享算法强调总体上更准确的目标吞吐量,非共享模式强调在线程之间目标吞吐量的均匀分布。(该部分不确定,详细查看The shared and non-shared algorithms both aim to generate the desired throughput, and will produce similar results.The shared algorithm should generate a more accurate overall transaction rate.The non-shared algorithm should generate a more even spread of transactions across threads.)
Precise Throughput Timer(精确吞吐量定时器)
精确吞吐量定时器引入可变的暂停时间,使得总吞吐量(例如,以每分钟的样本数为单位)尽可能接近给定值。当然,如果服务器不能处理它,或者如果存在其他计时器,或者如果没有足够的线程,或者耗时的测试元素阻止它,那么吞吐量将降低。
虽然该定时器被称为精确吞吐量定时器,但其目的并不是在测试期间每隔1秒产生相同数量的样本。
定时器最适合36000个请求/小时以下的QPS,测试时间过长这个值会有所波动(如果您的目标相差很大,请参阅下面的监控部分)。
精确吞吐量控制器在测试计划中的最佳位置
计时器由所有同级元素及其子元素继承。所以精确吞吐量计时器最好放在测试循环的第一个元素之下。例如,您可以在开始处添加一个虚拟采样器,并将计时器放在该虚拟采样器下。
精确吞吐量定时器实现原理
精确吞吐量定时器的实现是基于泊松过程,但泊松过程可能会出现以下的问题。真正的泊松过程的抵达率λ会比较大(λ表示单位时间内事件的平均发生次数),这会导致,比如λ=1,则可能会在60秒长的测试中得到50个样本。恒定吞吐量计时器会将λ收敛到指定的速率,但它更倾向于以偶数间隔生成样本。
爬坡和启动峰值问题
我们可以使用“加速”或类似的方法来避免测试开始时出现的峰值。例如,如果将线程组配置为有100个线程,并将Ramp-up Period(爬坡周期)设置为0(或者一个很小的数),所有线程将同时启动,则会产生一个负载的峰值。除此之外,如果设置的Ramp-up Period(爬坡周期)太高,则可能无法达到所需的负载。
精确的吞吐量计时器以随机方式执行所有线程,因此它可以用于生成恒定负载,并且爬坡周期和延迟最好设置为0。
多个线程组同时开始
当测试计划包含多个线程组时,也可能会出现爬坡问题。为了缓解这个问题,通常会向每个线程组添加随机延迟,以便线程在不同的时间启动。
精确的吞吐量计时器可以避免这个问题,因为它以随机方式调度执行线程组,而不需要手动添加额外的随机延迟来缓解启动峰值。
每小时的迭代次数
例如,我们需要完成每小时60次迭代,则需要进行如下配置(其他参数可以保留其默认值)
- Target throughput-目标吞吐量(样本数):60
- Throughput period(seconds)-吞吐量周期(秒):3600
-
Test duration(seconds)-测试持续时间(秒):3600
前两个选项设置吞吐量。即60/3600、30/1800和120/7200代表完全相同的负载级别,实际需要根据业务需求设置负载级别。例如,如果要求测试“每小时60个样本”,则设置60/3600。如果要求测试“每分钟1个样本”,则设置1/60。
Test duration是为了确保在测试持续时间内定时器能够给出一个准确的样本数。精确吞吐量定时器在测试计划开始时就制定了自己的测试调度。例如,如果您希望以每小时60的吞吐量执行5分钟的测试,您可以将测试持续时间(秒)设置为300。注意:Test duration是针对定时器而言,并不影响测试计划的完整测试时间。
线程数和思考时间
测试低速率和可重复测试
测试高频率和长时间测试
脉冲负荷
可变负载率
监控
- Parameters
Attribute | Description | Required |
---|---|---|
Name | 定时器名称 | NO |
Target throughput (in samples per 'throughput period')-目标吞吐量 | 定时器名称 | YES |
Throughput period (seconds)-吞吐量周期 | 定时器名称 | YES |
Test duration (seconds)-测试持续时间 | 定时器名称 | YES |
Number of threads in the batch (threads)-每次迭代的线程数 | 定时器名称 | YES |
Delay between threads in the batch (ms)-每次迭代线程间的延迟 | 定时器名称 | YES |
Use approximate throughput when sequence length exceeds (samples)-当序列长度超过(样本)时使用近似吞吐量 | 定时器名称 | YES |
Allowed throughput surplus (percents)-允许吞吐量盈余(百分比) | 定时器名称 | YES |
Random seed (change from 0 to random)-随机数(从0开始) | 定时器名称 | YES |