今天在做并发测试,执行后会发现登录接口执行多次,实际只需执行一次就可以。
刚开始用了网上推荐的仅一次控制器,但是发现仅一次控制器对线程组无效。
其实只要对元件熟悉,这个问题很简单,只需要用吞吐量控制器(Throughput Controller)即可实现。
1、创建一个线程组(Thread Group),设置10个并发如图:
2、添加吞吐量控制器(Throughput Contrller)
线程组-逻辑控制器-吞吐量控制器
3、吞吐量控制器,选择总数计算(Total Executions),吞吐量设置为1
4、【吞吐量控制器】组件中添加需要单次执行的请求接口
4、运行脚本,查看结果发现,登录接口执行了1次,组织项目列表接口执行了10次
问题完美解决!
下面详细介绍一下吞吐量控制器
吞吐量控制器
吞吐量控制器(Throughput Controller)用来控制其下元件的执行次数,并无控制吞吐量的功能,想要控制吞吐量可以使用 Constant throughput Timer。吞吐量控制器有两种模式:PercentExecutions 与 Total Executions。
属性介绍
- 名称:控制器名称,可以随意设置,甚至可以为空。
- 注释:可以随意设置,可以为空。
- Based on:选择执行模式。
3.1 PercentExecutions:按执行次数的百分比来计算执行次数,此时Throughput取值是0~
100。
3.2 Total Executions:按Throughput的值来指定执行次数,可以是任意整数,如果小于等于
零则一次也不执行。- 吞吐量:这个值的作用根据你选择的执行模式不同,可分为两种情况:
4.1 Percent executions 模式下,代表执行次数的百分比。如填写30,则表示子元件会执行原执行次数*0.3次。
4.2 Total executions模式下,代表执行的总次数。如填写50,则表示子元件会执行50次。- Per User:表示是否要在每个线程组上单独应用控制器的设置。
5.1 PerUser是否勾选对PercentExecutions模式无影响.
5.2 PerUser与TotalExecution一起影响执行次数。比如说,在Total executions模式下填写了50的吞吐量,勾选了Per User,那么控制器的子元件会执行线程数 * 50次;不勾选Per User,那么控制器的子元件会执行50次。
序号 | 线程数 | 循环次数 | 模式 | Throughput | Per User | 执行次数 |
---|---|---|---|---|---|---|
1 | 2 | 10 | Percent | 50 | Y | 10 |
2 | 2 | 10 | Percent | 50 | N | 10 |
3 | 2 | 10 | Total | 7 | Y | 14 |
4 | 2 | 10 | Total | 7 | N | 7 |
5 | 2 | 2 | Total | 7 | Y | 4 |
6 | 2 | 2 | Total | 7 | N | 4 |
上面表格有6个场景,线程数为2,循环次数为10。
下面说明一下这6个场景。
(1)序号 1,2 场景,PerUser 对总的执行次数无影响,都是10次。
(2)序号 3 场景,PerUser 勾选,每个虚拟用户(线程)执行7次,共执行16次。
(3)序号 4 场景,PerUser 没有勾选,则所有虚拟用户共执行7次。
(4)序号 5 场景,PerUser 勾选,每个虚拟用户执行7次,共16次,由于 ThreadGroup 计划的循环次数是4(2 线程*循环 2 次)次,所以最多只能执行4次。
(5)序号 6 场景,PerUser 没有勾选,所有虚拟用户共执行7次,由于 ThreadGroup 计划的循环次数是4(2 线程*循环 2 次)次,所以最多只能执行4次。