【JMeter】关于线程组的理解
JMeter官方文档对线程组的解释:
线程组元件是任何一个测试计划的起点。所有的控制器和取样器必须在线程组下。其他元件,列如监听器,可以直接放在测试计划下,在这种情况下他们将应用于所有线程组。顾名思义,thread group元件控制JMeter用于执行测试的线程数。线程组管理允许你:
- 设置线程数
- 设置ramp-up period
- 设置执行测试的次数
每个线程将完整地执行测试计划,并且完全独立于其他测试线程。多个线程用于模拟与服务器应用程序的并发连接。Ramp-up period告诉JMeter多久开始"ramp-up"选择的全部线程。如果使用10个线程,ramp-up period是100秒,那么JMeter用100秒使所有10个线程启动并运行。每个线程会在上一个线程启动后10秒(100/10)启动。如果有30 个线程和一个120秒的ramp-up period,那么每个连续的线程会延迟4秒。
Ramp-up需要足够长的时间来避免测试开始时的工作量过大,并且足够短,以便最后一个线程在第一个线程完成之前开始运行(除非有人希望这样做)。
使用ramp-up=线程数启动,并上下调整到所需的。
By default, the thread group is configured to loop once through its elements.
默认情况下,线程组配置为在其元素之间循环一次。
自己的理解
1.假设线程数5,Ramp-up period 5 ,执行一次,意思是一共5个线程,第一个线程开启后间隔1S开启下一个线程,执行一次。等于并发数为1.
2.假设线程数5,Ramp-up period 5,执行3次,意思是一共5个线程,每个线程执行3次,第一个线程开启后会继续执行下一次,第一个和第二个线程间隔1秒。此时的并发数可能不为1,要看具体的接口响应时间。
3.假设线程数5,Ramp-up period 5,永久执行,意思是一共5个线程,每个线程开启时间间隔1s,5秒后这5个线程继续执行,此时并发数可能为5
详细区别可见下图
线程数5,Ramp-up period 5 ,执行一次
线程数5,Ramp-up period 5,执行3次
Ramp-up period设置时间太短在刚启动时工作负载会太大,时间太长可能一个线程已经完成但是最后一个还没开启,导致并发量不够.
但是如果执行次数足够多,或者运行时间足够长,可以达到并发数=线程数,但是仅为一段时间内可达到。
假设线程数50,如果Ramp-up period 为1 和 Ramp-up period 为50,在执行一次的情况下,压力完全不一样,前者的并发是50 ,后者可能为1.但是在运行时间足够长时,50秒以后,后者的并发也能达到50
详见下图,仅为理论上的示意图
线程数50,Ramp-up period 为1 ,执行永久
线程数50,Ramp-up period 为50 ,执行永久
线程数 ,ramp-up period,执行测试的次数决定并发量,不同的测试场景下参数配置也不同。如果想要保证线程到达一定数量再执行,可增加同步定时器(Synchronizing Timer)
假设线程数5,ramp-up period 5,执行次数3 ,同步定时器 模拟用户组数量5。原本一秒开启一个线程,现在等待5秒,开启5个线程,再间隔一定时间开启5个线程,一共执行3次,详见下图