jmeter之对吞吐量定时器的理解与使用
1、jmeter压测时,如果仅设置线程数20循环10秒如下,那么得到的并发是一秒20吗?
——答案肯定不是一秒发送20请求,如图,发送了3958次请求,接口tps在394左右。并没有达到我们想要一秒并发请求20的结果。
原因:默认情况下,Jmeter线程在发送请求之间没有间歇,Jmeter可能会在短时间内产生大量访问请求,导致服务器被大量请求所淹没。所以在10秒的情况下究竟发送了多少请求,要看接口处理能力。有些接口可能TPS比较高,有些接口TPS会比较低。这种情况可以压测出一个接口实际TPS是多少,但是如果要测实际并发情况,需要设置其他定时器或引入变量暂停。
定时器会让作用域内的每一个采样器都在执行前等待一个固定时长。如果测试人员为线程组添加了多个定时器,那么Jmeter会将这些定时器的时长叠加起来,共同影响作用域范围内的采样器。定时器可以作为采样器或者逻辑控制器的子项,目的是只影响作用域内的采样器。
2、Constant Throughput Timer(常数吞吐量定时器)
Constant Throughput Timer常数吞吐量定时器可以让JMeter以指定数字的吞吐量(即指定TPS,只是这里要求指定每分钟的执行数,而不是每秒)执行。吞吐量计算的范围可以为指定为当前线程、当前线程组、所有线程组,并且计算吞吐量的依据可以是最近一次线程的执行时延。
以下为该定时器的使用介绍:
1、 名称:定时器Constant Throughput Timer的描述性名称,显示在左边节点上,并用于命名事务
2、注释:定时器Constant Throughput Timer注释信息,非必填项
3、Delay before each affected samler
1)Target throughput(in samples per minute):每分钟的吞吐量
2) Calculate Throughput based on:有5个选项:
第一: This thread only:控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的target Throughput 乘以该线程的数量
第二: All active threads:设置的target Throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。
第三:All avtive threads(shared):与All active threads的选项基本相同。唯一区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。
第四: All active threads in current thread group:设置的target Throughput 将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和All active threads 选项的效果完全相同。
第五:All active threads in current thread group(shared):与All active threads in current thread group 基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。
3、如上,其实还是有些疑问,对于一个接口并发20情况下,需要设置多少吞吐量合适呢?
选择: This thread only:控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的target Throughput 乘以该线程的数量。
Target throughput:目标(期望)吞吐量,注意,这里的吞吐量不是per second,而是每分钟;
既然是测试在20 QPS情况下的系统表现,那么这里我们应该填 20*60=1200;
——发现填写1200的时候接口一分钟处理量非常大,tps还是在300多左右,处理了一万多请求,所以这么设置还是有哪里不正确。
如下发现:
calculate throughput based on:这是一个下拉框,表示以**为基础来控制Jmeter的请求吞吐量,
我们这里选择All active threads in current thread group;
说明如下:
--This thread only :分别控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的 target Throughput 乘以线程的数量。
如果我们这里选择此种模式,然后设定了是10个线程,那么我们前面的Target throughput就应该填写1200/20=60 或 20(QPS)/10(线程数)*60=60了;
--All active threads : 设置的target Throughput 将分配在每个活跃线程上,每个活跃线程在上一次运行结束后等待合理的时间后再次运行。活跃线程指同一时刻同时运行的线程。
--All active threads in current thread group :设置的target Throughput将分配在当前线程组的每一个活跃线程上,当测试计划中只有一个线程组时,该选项和All active threads选项的效果完全相同。
--All active threads (shared ):与All active threads 的选项基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程上一次运行结束后等待合理的时间后再次运行。
--All cative threads in current thread group (shared ):与All active threads in current thread group 基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间后再次运行。
4、于是设置This thread only ,吞吐量60时——以20QPS发送10秒,20*10=200个,聚合报告中220个,比较接近想要的结果,接口每秒请求20个
5、设置多个请求时,比如,下面需要保存信息前设置beanshell获取手机号,设置吞吐量定时器为This thread only ,吞吐量60时,发现不正确在10秒20线程情况下,请求只有100个,每秒只有10个请求
所以应该是线程多了一个影响,于是设置吞吐量定时器为This thread only ,吞吐量120时,发现请求正确
6、根据接口不同,有些接口如果tps很低,达不到20,这个时候即使设置吞吐量60,可能一秒只能处理10个请求时,已经到达接口处理的瓶颈。每个接口可以调整,最终看请求数及tps是否为想要的值即可。