- A+
一、误区
在JMeter压测过程中,我们通常认为1s内100的并发量(即:QPS为100)的设置如下:
线程组-线程数:100;Ramp-Up时间(秒):1;循环次数:勾选永远
没有再添加额外的控制器。上述中的参数设置解释:
-
线程数: 启用的并发线程个数
-
Ramp-Up时间(秒):在多少秒之内将上述并发的线程启动起来
-
循环:控制循环次数
说明:
-
一个常见的误解,认为线程数设置为100,Ramp-Up时间(秒)设置为1,就是每秒发起100个请求量。
-
上述的设置,表示在1s内启动100个线程,之后,jmeter便以最大限度的100个并发进行压测,不能保证1s内只有100个请求。
-
我们用上述的设置,对某个接口进行压测,发现:
在一秒内,发起的请求居然有五百多个,与实际想要的1s发起100个并发是有差别的。
二、控制并发数
添加Constant Throughput Timer(常数吞吐量定时器),该定时器可以方便地控制给定的取样器发送请求的吞吐量。
-
Target throughput(in samples per minute)设置:6000(由于单位是一分钟,如果要求QPS为100,则该值设置为60*100=6000)
-
Calculate Throughput based on设置:all active threads
例如:jmeter脚本有两个接口,每个接口TPS=50
Calculate Throughput based on的选项有5个,分别是:
-
This thread only:控制每个线程的吞吐量,选择这种模式时,总的吞吐量为设置的target Throughput 乘以改线程的数量。
-
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 active threads in current thread group(shared):与all active threads in current thread group 基本相同,唯一的区别是,每个活跃线程都会在所有活跃线程的上一次运行结束后等待合理的时间再次运行。
当然,Constant Throughput Timer只有在线程组中的线程产生足够多的request 的情况下才有意义,因此,即使设置了Constant Throughput Timer的值,也可能由于线程组中的线程数量不够,或是定时器设置不合理等原因导致总体的QPS不能达到预期目标。
比如线程数10,时间是5秒,循环2次,也就是说,一秒会执行两个线程*2次循环,一秒并发4次请求
假设线程数为100个,花费时间20s,那么每秒启动的线程数 = 线程数/时间,即100/20 = 5。换句话说,就是1秒启动5个线程。