美文网首页
JMeter-Timers

JMeter-Timers

作者: MechelleWang | 来源:发表于2019-11-06 20:39 被阅读0次

    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

    相关文章

      网友评论

          本文标题:JMeter-Timers

          本文链接:https://www.haomeiwen.com/subject/uzkpbctx.html