一、线程组介绍:

线程组元件是任何一个测试计划的开始点。在一个测试计划中的所有元件都必须在某个线程组下。所有的任务都是基于线程组:

通俗理解:

· 线程组:就是一个线程组,里面有若干个请求;

· 线程:一个线程就是一个“虚拟用户”;

· 请求:一个线程组里面有若干个请求。

对应关系:

例如:1个线程组里面有10个请求,线程数为10个,跑完后得到:

理解为:(10个线程数)10个人,每个人都要跑这10个请求,所以:10*10=100:

并发数:100;线程数:10;

PS:线程组也可以看作是一个虚拟用户组。线程组中的每一个线程都可以理解为一个虚拟用户。

二、线程组设置:

我们把线程组的设置分成3个区域:

区域一:采样器失败后处理:

参数解释:

1、continue(继续):继续执行接下来的操作;

2、Start Next Thread Loop(启动下一进程循环):开始下一次循环;

3、stop Thread(停止线程):停止线程,退出该线程(不再执行此线程的操作);

4、stop Test(停止测试):等待当前执行的采样器结束后,结束整个测试;

5、Stop Test Now(立即停止测试):马上停止测试;

区域二:线程属性:

参数解释:

1、Number of Threads(users)(线程数):相当于模拟的用户数量;

2、Ramp-up Period(in seconds):达到指定线程需要的时间,例如线程数为10,时间设定为5s,那么就是5s加载 10个线程,每秒启动的线程数=10/5=2;

3、Loop Count(循环次数):如果填具体的数值,就是循环对应的次数;如果选择“Forever”,则一直执行下去,直到手动停止;

4、Delay Thread creation until needed:延迟线程创建,直到需要才创建。

区域三:调度器配置:

需要选中调度器(scheduler),调度器配置才生效。

参数解释:

1、Duration(持续时间):设置测试计划的执行时间,单位是秒。

2、Startup delay(启动延迟):设置测试计划的启动延迟时间,以确保测试计划在指定的开始时间开始执行。

注意:

1、注意:调度器一般在循环次数为“永远”时配合使用,否则会按照具体的循环次数执行。

2、JMeter调度器只适用于JMeter的GUI模式(即通过JMeter界面直接执行脚本),不适用于CLI模式(即进入到Jmeter的bin目录下通过命令执行测试脚本)。

3、在CLI模式下,需要使用其他的方式来控制测试计划的执行时间和频率,例如使用脚本语言编写定时执行脚本来实现。

三、各类型线程组:

1、原生线程组:

(1)thread group(线程组):

这个就是我们通常添加运行的线程。通俗来讲一个线程组,可以看做一个虚拟用户组,线程组中的每个线程都可以理解为一个虚拟用户。上文所介绍使用的例子就是此线程组。

(2)setup thread group(前置线程组):

一种特殊类型的ThreadGroup的,可用于执行预测试操作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试前进行定期线程组的执行;类似LoadRunner的init,测试开始时进行初始化的工作。

不同的是执行顺序---它会在普通线程组执行之前被触发。

应用场景举例:

A、测试数据库操作功能时,用于执行打开数据库连接的操作。

B、测试用户购物功能时,用于执行用户的注册、登录等操作。

(3)teardown thread group(拆线组):

一种特殊类型的ThreadGroup的,可用于执行测试后动作。这些线程的行为完全像一个正常的线程组元件。不同的是,这些类型的线程执行测试结束后执行定期的线程组;类似LoadRunnner的end,测试结束时进行回收工作。

不同的是执行顺序---它会在普通线程组执行之后被触发。

应用场景举例:

A、测试数据库操作功能时,用于执行关闭数据库连接的操作。

B、测试用户购物功能时,用于执行用户的退出等操作。

2、可拓展线程组

(1)Concurrency Thread Group(递增式并发线程组)

这意味着:

5秒除以5步,每步1秒;100个用户除以5步,每步20个用户;每1秒将添加20个用户,直到达到100个用户,达到100个线程后,所有这些线程将继续运行,并一起打到服务器10秒钟;

注意:这个可以模仿递增式并发(只能递增不能递减),并可设置递增次数、递增时长、到达目标递增数量保持时长等等:

参数解释:

· Target Concurrency:目标并发(总线程数)

· Ramp Up Time:加速时间(总加速时长)

· Ramp-Up Steps Count:加速步骤计数(总加速/递增次数)

· Hold Target Rate Time:保持目标速率时间(到达总线程数后持续时长)

· Time Unit:时间单位(分钟或者秒)

· Thread Iterations Limit:线程迭代次数限制(循环次数)

· Log Threads Status into File:将线程状态记录到文件中(将线程启动和线程停止事件保存为日志文件);

(2)Stepping Thread Group(逐步线程组)

这个可以模仿递增式并发(不但递增还可以递减),并可设置递增次数、递增启动延迟、递增时长、到达目标递增数量保持时长等等:

参数解释:

1、This group will start () threads:线程组能达到的总线程数;

2、First wait for () seconds:首次加载线程前需要等待的时间;

3、Then start () threads:首次加载线程数;

4、Next add () threads every () seconds:每隔多少秒加载多少个线程

5、Using ramp-up () seconds:在几秒内启动线程组

6、Then hold load for () seconds:持续压测时间

7、Finally stop () threads every () seconds:每隔多少秒退出多少个线程

(3)bzm - Arrivals Thread Group(bzm-到达线程组)

所以以上设置就等于:3min除以5步,等于每步加速后持续0.6分钟,100个用户除以5步,等于每步加速20个用户,达到100个用户后持续跑6mn。

参数解释:

1、Target Rate:目标线程数(总线程数)

2、 Ramp Up Time:所需多少加载时间(总加速时长)

3、 Ramp Up Steps Count:所需多少个加载梯次(总递增/加速次数)

4、Hold Target Rate Time:持续运行时间(到达总线程数后持续时长)

5、Time Unit:可以选择用分钟还是秒来做单位

6、Thread lterations Limit:线程迭代次数限制。如果我们只需要运行每个用户一次以模拟用户的实际行为,则可能会很有用。在我们的例子中,该字段为空,因此每个用户将运行不确定的迭代,直到调度结束。

7、Log Thread Status into File:将线程状态记录到文件中

8、Concurrency Limit:最大并发数限制。以避免出现内存不足的问题。在我们的例子中是1000,这是一个很大的数字。

(4)Ultimate Thread Group(最终线程组)

参数解释:

1、Start Threads Count:当前行线程组总数;

2、Initial Delay/sec:延时启动当前行的线程,单位:秒

3、Startup Time/sec:启动当前行所有线程达峰值所需时间,单位:秒

4、Hold Load For/sec:当前行线程达到峰值后的稳定加载时间,单位:秒

5、Shutdown Time:停止当前行所有线程所需时间,单位:秒

Ultimate Thread Group可以用于以下几个场景的测试:

1、创建线性负载

测试场景:60s内启动100个线程,持续运行60s,花10s的时间结束

2、创建阶梯负载

测试场景:测试100个用户,我们将逐步地将它们提升。我们将从25个用户开始在一定时间内保持一个负载,查看服务器如何处理它。之后我们会再加25个到50个再加25个到75个,最后加25个到100个用户。这种方法效果好得多,也更可靠。

3、创建尖峰负载

测试场景:平时稳定用户数为500个,维持24小时,在8-9点时用户数飙升至1000个

4、创建波浪形负载

测试场景:比如12306抢票的时候,每次开放抢票时,有大量用户涌入,等到下次开放时,又有大量用户涌入,这个时候,就像波浪一样,不断敲击服务器,考验服务器的性能

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐