jmeter自带的线程组控件(Thread Group)中有三个重要的属性,分别是线程数:Number of Threads(模拟的并发用户数一个线程表示一个用户), 启动时间:Ramp-Up Period(确保在此时间内,建立起全部线程), 采样数: Loop Count(同一个用户,请求的重复次数)用于控制线程组的行为。简单来说就是:Jmeter 将在 Ramp-Up Period 时间范围内,启动 Number of Threads 个用户(线程),并且使每个用户(线程)重复发出 Loop Count 次请求(采样)。jmeter压测的时候,在执行测试的过程中每个线程组有多少个活跃的线程数,可以通过监听器Active Threads Over Time查看。
通过几组案例来观察jmeter在线程组属性值不同组合下发起请求的活动的线程
案例1:一个用户在10s内完成10次重复请求
单个用户时,Ramp-Up Period 不起作用。每个重复的请求将于前次请求结束后发起。因为Active Threads Over Time控件每次响应时间是500ms,所以,上面属性组合的 Loop 将于5秒结束。得到的图是这样:
案例2:jmeter在10s内启动10个线程,即每一秒钟启动一个线程,并且在每个线程内发起一个请求。
整个过程将持续10秒,当每一个新的线程发起时,前次线程的响应已经结束,线程被销毁,所以每时每刻都只有一个线程存在。得到的图是这样:
案例3:Jmeter 将在10秒内启动60个线程,每一秒钟内启动6个线程,并且在每个线程内发起一个请求。
由于每个请求的响应时间设置为 500ms,每一秒内启动的6个线程将有一半完成后被销毁,同时整个过程将持续10秒,得到的图是这样:
案例4:Jmeter 将在60秒内启动10个线程,同时每个线程内重复6次请求,即每6秒钟内启动1个线程,并且在每个线程内重复发起6次请求。
由于每个请求的响应时间设置为 500ms,所以每个线程内重复的6次请求将于3秒钟完成,每10秒钟之内,前3秒钟的观测结果,都有1个线程存活。得到的图是这样:
案例5:Jmeter 将在10秒内启动60个线程,同时每个线程内重复6次请求,即每1秒钟内启动6个线程,并且在每个线程内重复发起6次请求。
每次启动的线程将和之前的线程叠加,观测结果证明了这一点如下图:
案例6:Jmeter 将在60秒内启动10个线程,循环次数设置为永远,即每6秒钟内启动1个线程,并且在每个线程内无休止的发起请求。
因为请求永不结束,所以线程永不销毁,每次启动的线程将和之前的线程叠加,观测结果证明了这一点:
结论:
1.Jmeter 将在 Ramp-Up Period 时间内,启动 Number of Threads 个线程。并且利用每个线程重复发出 Loop Count 次请求(或者说,Loop Count 次采样)
2.线程收到响应后,即发出 Loop 内的下一次请求
3.线程的请求 Loop 次数达到后,线程即销毁。