code学习

讲一讲JMeter中的吞吐量控制器

什么是吞吐量控制器?

英文是

Throughput Controller

JMeter 官网上是这么介绍的:吞吐量控制器允许用户控制其子元件的执行频率。

执行模式

吞吐量控制器中支持两种执行模式:

  • Percent executions

    (执行百分比)

    使控制器按照设置的百分比去执行。

  • Total executions

    (执行总数)

    使控制器执行设定的总次数。

属性介绍

图中红框的这三个字段最重要:

  1. Based on

    :选择执行模式,见上文。
  2. 吞吐量:这个值的作用根据你选择的执行模式不同,可分为两种情况:

    2.1

    Percent executions

    模式下,代表执行次数的百分比。如填写

    30

    ,则表示子元件会执行

    原执行次数*0.3

    次。

    2.2

    Total executions

    模式下,代表执行的总次数。如填写

    50

    ,则表示子元件会执行

    50

    次。
  3. Per User

    :表示是否要在每个线程组上单独应用控制器的设置。比如说,如果在

    Total executions

    模式下填写了

    50

    的吞吐量,勾选了

    Per User

    ,那么控制器的子元件会执行线程数 * 50次;不勾选

    Per User

    ,那么控制器的子元件会执行50次。

怎么使用?

使用吞吐量控制器最关键的两个参数是执行模式(

Based on

的选项)和

Per User

,下面用控制变量法来介绍一下这个组件的一些特点。

测试脚本的结构:

Percent executions

模式

这个模式下,吞吐量里的值为执行次数的百分比,也就是说,控制器的子元件的执行次数 = 线程组的并发数 * 吞吐量%。

情况一:控制器的吞吐量之和等于100

条件:

  • 并发数:10
  • 控制器1的吞吐量:50
  • 控制器2的吞吐量:30
  • 控制器3的吞吐量:20
  • Per User

    :不勾选

示例图:

结果:

请求的比例如下:

  • baidu:5次
  • 当当:3次
  • taobao:2次

情况二:控制器的吞吐量之和小于100

条件:

  • 并发数:10
  • 控制器1的吞吐量:50
  • 控制器2的吞吐量:10
  • 控制器3的吞吐量:20
  • Per User

    :不勾选

结果:

请求的比例如下:

  • baidu:5次
  • 当当:1次
  • taobao:2次

情况三:控制器的吞吐量之和大于100,但每个控制器的吞吐量都没超过100

条件:

  • 并发数:10
  • 控制器1的吞吐量:50
  • 控制器2的吞吐量:70
  • 控制器3的吞吐量:40
  • Per User

    :不勾选

结果:

请求的比例如下:

  • baidu:5次
  • 当当:7次
  • taobao:4次

情况四:控制器的吞吐量之和大于100,并且某个控制器的吞吐量超过了100

条件:

  • 并发数:10
  • 控制器1的吞吐量:150
  • 控制器2的吞吐量:30
  • 控制器3的吞吐量:40
  • Per User

    :不勾选

结果:

请求的比例如下:

  • baidu:10次
  • 当当:3次
  • taobao:4次

总结

从以上四个测试中可以看出,吞吐量控制器在

Percent executions

模式下有以下几个特点:

  • 吞吐量控制器之间彼此不会影响。
  • 吞吐量的取值范围在0-100,填写超过100的值作为100计算。
  • 以及

    Per User

    参数在此模式中不生效,测试结果就不贴了。

Total executions

模式

这个模式下,吞吐量里的值是总执行次数。在这个模式里,可能会用到

Per User

参数,这个参数的作用是:

  • 若勾选,每个线程会单独计算执行次数;
  • 若不勾选(默认),所有线程统一计算执行次数
测试脚本结构为:

情况一:吞吐量大于并发数*循环次数,不勾选

Per User

条件:

  • 并发数:10
  • 循环次数:1
  • 控制器1的吞吐量:15
  • 控制器2的吞吐量:20
  • Per User

    :不勾选

结果:

请求的比例如下:

  • baidu:10次
  • 当当:10次

情况二:吞吐量小于并发数*循环次数,不勾选

Per User

条件:

  • 并发数:1000
  • 循环次数:1
  • 控制器1的吞吐量:789
  • 控制器2的吞吐量:999
  • Per User

    :不勾选

结果:

请求的比例如下:

  • baidu:789次
  • 当当:999次

情况三:并发数吞吐量大于并发数循环次数,勾选

Per User

条件:

  • 并发数:10
  • 循环次数:5
  • 控制器1的吞吐量:70
  • 控制器2的吞吐量:100
  • Per User

    :勾选

结果:

请求的比例如下:

  • baidu:50次
  • 当当:50次

情况四:并发数吞吐量小于并发数循环次数,勾选

Per User

条件:

  • 并发数:10
  • 循环次数:10
  • 控制器1的吞吐量:3
  • 控制器2的吞吐量:5
  • Per User

    :勾选

结果:

请求的比例如下:

  • baidu:30次
  • 当当:50次

总结

从这几个测试中可以得出:

  • 执行次数的最大值为并发数 * 循环次数,在此基础上可以对子元件的执行次数进行调整。
  • 勾选

    Per User

    ,则执行的总次数数将是用户数(并发数) * 给定的吞吐量数。