什么是吞吐量控制器?
英文是Throughput Controller
。
JMeter 官网上是这么介绍的:吞吐量控制器允许用户控制其子元件的执行频率。
执行模式
吞吐量控制器中支持两种执行模式:
Percent executions
(执行百分比)
使控制器按照设置的百分比去执行。Total executions
(执行总数)
使控制器执行设定的总次数。
属性介绍
图中红框的这三个字段最重要:
Based on
:选择执行模式,见上文。- 吞吐量:这个值的作用根据你选择的执行模式不同,可分为两种情况:
2.1Percent executions
模式下,代表执行次数的百分比。如填写30
,则表示子元件会执行原执行次数*0.3
次。
2.2Total executions
模式下,代表执行的总次数。如填写50
,则表示子元件会执行50
次。 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
,则执行的总次数数将是用户数(并发数) * 给定的吞吐量数。