【性能测试】固定吞吐量

新增一个需求,TCP长连接后每秒发2/5/10个数据包,持续3min
那sleep 500ms/200ms/100ms是否可以解决这个问题呢?
显然不行,忽略一个关键的点,TCP长连接,需要等待上一个包发送接收到响应后才能发送下一个数据包,这样就有一个不确定的因素,响应时间
其实如果精确的话还有另外一个问题,jmeter在发送上一个数据包后到发送下一个数据包其实是有一个毫秒级别的线程切换间隔时间的
那是否可以粗略估算,运行一次,查看平均响应时间,新sleep时间 = sleep时间 - 预计平均响应时间 - 5ms,这个方案有个问题,就是假设同样的吞吐量的时候平均响应时间高度不变,还有修改前后的吞吐量还是有些差异的
那还有什么其他的办法么?
其实jmeter提供了一个逻辑控制器,吞吐量控制器
在这里插入图片描述

Total Executions:设置运行次数
Percent Executions:设置运行比例(1~100之间)
线程组的设置如下
在这里插入图片描述

Throughput Controller1的子结点执行10次:
在这里插入图片描述

Throughput Controller2的子结点执行(40% * 线程组循环次数5)= 2次
在这里插入图片描述

其实,jmeter中的吞吐量逻辑控制器用来控制其下元件的执行次数,并无控制吞吐量的功能。
其作用是控制其下的子节点的执行次数与负载比例分配
OMG!!!
那怎么整?
前面提到说等待上一个请求响应后再请求下一个请求,问题的关键点在于接口的响应时间无法控制,那是否可以该接口请求后直接return数据,无需等待,这样就可以迅速进行下一个次循环请求,按照这样的方式修改jmeter的处理逻辑后,发现接口响应时间可以控制在2ms以内,然后sleep时间 = 500ms/200ms/100ms - 5ms即可解决问题

posted @ 2019-09-04 10:03  guanqinghua  阅读(67)  评论(0编辑  收藏  举报