关于Jmeter线程数Ramp-Up.循环次数的理解和实验数据

 

1. 关于线程组参数

 

 

 

线程组:即一个线程组实例里面包括多个串行的请求或动作。一个线程组的从启动到结束的时间取决于你线程中的步骤数量。

线程数:即用户数,在Ramp-up时间内(包括循环),简单把线程数理解为并发数其实不是很准确,理解为同时在线用户数更好。

Ramp-up 时间:决定多长时间启动所有线程,例上图所示如线程数是10,Ramp-up为5秒,那么每秒启动2个线程请求发出去。

循环次数:如上图循环次数为2,那么问题来了,第二次循环是什么时候开始的呢。

先说结论,第二次循环基础在第一次启动时就跟着启动了。也就是说,上图的配置会在5秒内总共启动10*2个线程组实例。那么也就是说循环开始的时间几乎和第一次启动时间相同。

1.1. 实验

1.1.1. 实验准备

 

 

 

我们在Java后台的Controller定义一个测试方法,这个测试方法没用任何业务逻辑,理论上它基本不会消耗时间,接近0秒即可返回。

我们在这个后台定义一个全局静态内存变量,用于记录访问的次数N。

并在访问时打印出当前时间和次数数字。

1.1.2. 循环一次的实验

下面我们以只循环一次的配置实验,如下配置:

 

 

 

 

 

 

 

 

 

 

 

结论:当循环次数为1时,一共用时5秒,并且被平均化了,每2秒启动两个线程组实例。

1.1.3. 循环2次的配置

我们把Tomcat重启一下,让全局静态变量归0.然后试验循环2次的配置。

 

 

 

 

 

 

 

 

 

 

 

 

TPS为:4.4,平均每个请求时间为12毫秒。中位数是3毫秒。共启动20个线程组实例。

 

从上图可以看出从第一个线程组实例时间:2022-01-16 21:14:09:829至最后一个线程组实例2022-01-16 21:14:14:152共计用时:5秒钟,可以看到在5秒内JMeter也把第二次循环启动了。

结论:如果Ramp up 这个时间是前面第一次循环在在Ramp up时间之后才启动第二次循环的话,那么第11次请求到第20次请求它就不可能是前5秒这个时间段内出现。第11次开始必须都在2022-01-16 21:14:14:152之后启动才对,但实验的结果即不是如此。循环开始的时间几乎和第一次启动时间相同,也就是说10个线程5秒内启动,循环2次,就是等于第一个线程启动一次开始循环2次了。

所以Ramp up这个时间是表示启动所有线程实例数的时间。所以这个时间需要有一个合理的设计。并发数不能仅仅只是看线程数。

这个是和网上查询的多处资料说的一次,那么并发数到底怎么计算呢。如配置10并发如何配置呢?其实有很多种配置,如下图:

 

 

 

并发数=(线程数*循环次数)/ramp-Up

网上其他资料可参考1://blog.csdn.net/u013908944/article/details/97383303

网上其他资料可参考2://www.javashuo.com/article/p-dwqyfsqb-tk.html

 

2. 循环的意义

 
   


 

 

循环是为了让抽样更多,模拟客户端用户登录点击操作进行线程大量发起并持续性循环发起。线程组实例启动后它是需经过线程组内部的各个步骤请求来完成的,当组织线还没有走完,可能第二个又来了直第N个结束。那中间就会产生N个交集,以模拟达到并发数测试。

如下图所示:

 结论:

并发数=(线程数*循环次数)/ramp-Up,

当然这个ramp-up需要合理评估和设置这它的值。