您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

Jmeter各类线程组详解

时间:2020-04-02 10:52:44  来源:  作者:

Jmeter各类线程组详解

作者:牛刘源

了解JMeter的朋友都知道,它不仅能做简单的接口测试、还支持性能测试,接口类型不仅支持Rest、SOAP,也可扩展WebSocket、Socket等。无论你用Jmeter做哪种测试,哪种接口类型,哪种网络协议,你都必须添加使用Jmeter线程组,线程组在Jmeter中占据主导地位,它是任何一个测试计划的起点,所有的逻辑控制器、采样器、处理器、报告等都必须放在线程组之下,也就是说你若使用Jmeter做接口测试或性能测试那么,线程组是必不可少的。本文分为三个方面为大家介绍Jmeter的线程组,主要从:线程组介绍、线程组设置、线程组分类三方面来阐述。

一、线程组介绍:

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

通俗理解:

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

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

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

对应关系:

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

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

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

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

二、线程组设置:

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

区域一:在采样器失败后怎么处理(LoadRunner里面也有类似的运行设置选项,对比去学习):

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):达到指定线程需要的时间,例如线程数为100,时间设定为10s,那么就是10s加载 100个线程,每秒启动的线程数=100/10=10;

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

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

区域三:调度器配置:

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

【实例】现用一个普通的线程组测试一个简单的http接口测试,测试前添加设置下线程组及其他元件:

第一步:添加一个线程组,添加后选择采样器因接口、报文或外部等原因导致接口执行错误后的一个后置行为,对于各个选项多选一,目前我选择接口执行错误后让其继续执行。

第二步:因为非性能测试所以线程组设置1即可,即是单个“虚拟用户”。

第三步:关于调度器配置不同版本的Jmeter会有不同的改动,目前Jmeter版本V5.1.1调度器配置在原有的基础上容易理解和执行,使用调度器器之前需“开启”调取度按钮(点击打勾即可),按照功能提示选择接口的启动延迟时间和持续时间。注意:使用调度器后中间循环次数则作废。

第四步:添加http请求并设置域名、路径等并填入请求报文;(添加路径:线程组→添加→取样器→HTTP请求)

第五步:添加HTTP信息头管理器,用于存储request的head部分,并写入对应接口的request的head部分:(添加路劲:线程组→添加→配置原件→HTTP信息头管理器)

最后就可以添加察看结果树,然后点击运行就可以看到结果了!(添加路径:线程组→添加→监听器→察看结果树)

三、线程组分类:

从系统的角度来看,Jmeter的线程组主要分为系统原生线程组和可拓展线程组。原生线程组配合调度器、定时器、前后置处理器和逻辑控制器等等已经可以满足大部分测试的需求,但是若要求多维度来设计用户并发数,原生线程组已经不能满足需求。此时,我们可以新增插件的线程组使其更加强大,可自定义设置多种场景等功能,可以更加接近真实用户的使用场景。

(一)原生线程组

1、thread group(线程组):

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

2、setup thread group(设置线程组):

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

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

应用场景举例:

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

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

3、teardown thread group(拆线组):

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

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

应用场景举例:

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

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

(二)可拓展线程组

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

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

参数解释:

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

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

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

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

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

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

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

现设计这样一个场景:

这意味着:

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

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

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

参数解释:

1、线程组最大用户数:100个

2、初次加载用户前等待时间:10秒,此时没有用户进入

3、第一次加载用户数:10个用户开始

4和5:每隔10秒加10个用户

6、ramp-up在几秒内启动线程组

7、持续压测60秒,一分钟

8、和9:退用户,每10秒退出10个用户

10、上面各种设置的图形表示

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

跟Concurrency Thread Group线程组功能作用大同小异。参数解释:

· Target Rate:目标线程数(总线程数)

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

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

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

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

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

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

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

现设计这样一个场景:

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

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

这个线程就比较难以理解,但是功能也比较强大。它可以对负载中的线程组进行复杂的管理。通过在线程计划中具有无限数量的行来完成此操作,这可以为线程组的不同部分启用不同的配置。该插件跟Stepping Thread Group线程组有些类似,不过这个是多个线程组设置的结合。执行的时候,每个线程组是同时按照自己的规则开始执行的,每一时刻,得到的结果都是两个线程组的叠加

形象比喻:

并发的用户就像浪花一波一波的不断涌入系统,拍打服务器,考验我们的系统能否顶住压力并平稳运行

我们的网站正在平稳运行的时候,突然有一波1000用户同时访问,我们称之为第一浪潮。访问了30s之后,第一浪潮在15s内逐渐退出系统。

在第一浪潮退出系统的同时,第二波2000用户在极短时间内又突然涌入网站,我们称之为第二浪潮。在访问30s之后,第二浪潮在15s内也逐渐退出了系统。

在第二浪潮退出系统的同时,第三波3000用户又突然涌入网站,我们称之为第三浪潮。在访问30s之后,第三浪潮在15s内也逐渐退出了系统。

在第三浪潮退出系统的同时,第四波1000用户又突然涌入网站,我们称之为第四浪潮。在访问30s之后,第四浪潮在15s内也逐渐退出了系统。

添加单个线程组Row 和 添加多个线程组Row:

图中本次测试一共启动100个线 编辑程(用户/并发)。

· Initial Delay, sec:最开始延迟时间,单位秒。设置为0,就是点击了立即执行。

· Startup Time, sec:启动设置的100个线程并发一共需要的时间,单位秒。图中设置10秒(线程组的加速期)

· Hold Load For, sec:保持加压时间,单位秒。图中10秒。

· Shutdown Time:多久时间内全部释放关闭,单位秒。图中10秒。

【实例】

1、需求:要求此接口用户的访问量“分波式”访问,每个时期、每波都有不同用户量访问,每波的用户访问量呈现出递增然后逐次递减的状态,单波用户量最大并发不可超过70。

2、分析:根据需求实现具体场景,可得出普通线程组并不能实现,普通线程组一般实现为“直线式”的需求场景(配合其他元件实现略不同),那么此时Ultimate Thread Group线程组便可为之实现:

3、步骤:

第一步:根据需求场景“每个时期、每波都有不同用户量访问”现设置添加多Row,每Row的Start Threads Count(开始线程计数),初始用户的数量为:10、30、50、70、50、30、10,此时每波用户访问量递增→递减和单波用户不可超过70的需求配合关闭时间已经满足。

第二步:每Row的Initial Delay,sec(延迟启动时间,单位秒)设置每时间间隔5s:0s、5s、10s、15s、20s、25s、30s,这样是为了满足不同组的启动延迟时间,若每个线程组不同的用户都在同一时间节点启动那不是递增式并发,那是同步式并发。

第三步:每Row的Startup Time,sec(启动时间),意指每个线程组的线程在多少s内全部启动,目前设置为1s,即是每组线程组的线程数从启动开始到启动结束话费时长为1秒。

第四步:每Row的Hold Load For,sec(持续运行),意指每个线程组的线程在启动达到设置的线程数后持续运行多长时间,单位秒。此时需求每组线程运行后达到顶峰后呈现出“递减”状态,所以持续运行时间应该也是设置为递减:30、25、20、15、10、5、0(单位s)。

第五步:Shutwn Time(关闭时间),这个可配合上面四个可设置:0、5、10、15、10、5、0。这样是为了满足“每波用户访问量递增→递减”的需求

好啦主功能配置已经完成,看下具体线程组效果图:

此时,运行后为了确保线程组的变化运行轨迹,添加一个Active Threads Over Time用来查看随时间变化的活动线程:(添加路径:线程组→添加→监听器→jp@gc - Active Threads Over Time)

最后,即可添加察看结果树、聚合报告、响应时间图等分析此接口的接口各个返回指标等:

Ultimate Thread Group(最终线程组)实现原理:TA跟Stepping Thread Group线程组有些类似,不过这个是多个线程组设置的结合。执行的时候,每个线程组是同时按照自己的规则开始执行的,每一时刻,得到的结果都是两个线程组的叠加

总结,对于系统原生Jmeter线程组只要下载安装并配置环境变量Jmeter即可使用,可拓展线程组需要下载特定的插件进行安装和配置,虽麻烦但是配置好的线程组功能是比较强大的,且可满足多种类型的用户和需求场景,值的感兴趣的小伙伴一试!



Tags:Jmeter   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言jmeter 这个工具既可以做接口的功能测试,也可以做自动化测试,还可以做性能测试,其主要用途就是用于性能测试。但是,有些公司和个人,就想用 jmeter 来做接口自动化测试。 你...【详细内容】
2021-11-23  Tags: Jmeter  点击:(27)  评论:(0)  加入收藏
以下是详细的步骤1. JDK \Jmeter \ Ant安装:1.1.安装JDK:双击jdk-7u80-windows-x64.exe安装,默认安装到C:\ProgramFiles\Java目录1.2.安装Jmeter:在我的电脑—E盘(建议与...【详细内容】
2021-04-16  Tags: Jmeter  点击:(224)  评论:(0)  加入收藏
什么是 API 测试?API 测试其实是一种用程序或工具来发送数据,同时验收系统的返回值的方法。这种测试更偏向于业务实现逻辑。常见的网络协议有 TCP、Http、webservice、socket...【详细内容】
2020-10-19  Tags: Jmeter  点击:(128)  评论:(0)  加入收藏
前阶段做了一个小调查,发现软件测试行业做功能测试和接口测试的人相对比较多。在测试工作中,有高手,自然也会有小白,但有一点我们无法否认,就是每一个高手都是从小白开始的,所以今...【详细内容】
2020-09-09  Tags: Jmeter  点击:(132)  评论:(0)  加入收藏
JMeter是Apache组织的开放源代码项目,能做接口测试、功能测试和性能测试。它能够对HTTP和FTP服务器进行压力和性能测试,也可以对数据库进行同样的测试(通过JDBC),还能以多种形式...【详细内容】
2020-09-09  Tags: Jmeter  点击:(70)  评论:(0)  加入收藏
方式一:多线程组指定TPS同时并发示例:接口1、接口2、接口3……1、新建线程组1) 右键测试计划,依次选择 添加-Threads-线程组 2) 点击线程组,输入并发数3) 勾选循环次数...【详细内容】
2020-08-11  Tags: Jmeter  点击:(358)  评论:(0)  加入收藏
压力测试是目前大型网站系统的设计和开发中不可或缺的环节,通常会和容量预估等工作结合在一起,穿插在系统开发的不同方案。压力测试可以帮助我们及时发现系统的性能短板和瓶颈...【详细内容】
2020-07-21  Tags: Jmeter  点击:(110)  评论:(0)  加入收藏
jmeter是apache公司基于java开发的一款开源压力测试工具,体积小,功能全,使用方便,是一个比较轻量级的测试工具,使用起来非常简单。因为jmeter是java开发的,所以运行的时候必须先要...【详细内容】
2020-06-18  Tags: Jmeter  点击:(52)  评论:(0)  加入收藏
本文将从负载测试的角度,描述了做一次流畅的5万用户并发测试需要做的事情。你可以在本文的结尾部分看到讨论的记录。快速的步骤概要 编写你的脚本 使用JMeter进行本地测试 Bl...【详细内容】
2020-06-04  Tags: Jmeter  点击:(402)  评论:(0)  加入收藏
目标: 能够完成 JMeter 的环境部署及基本使用教程演示环境(环境仅供参考): 系统平台: Windows 平台 系统版本: Windows 10 家庭中文版步骤: 获取 JMeter 部署 JMeter 配置相关...【详细内容】
2020-04-07  Tags: Jmeter  点击:(58)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的  程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条