宝子们,今天咱就来唠唠 JMeter 里那些超重要的线程相关的玩意儿,学会了它们,你就能在性能测试的世界里 “横冲直撞” 啦!

一、线程组 —— 性能测试的主力军

想象一下,你开了一家超级火爆的奶茶店,门口排着好多人等着买奶茶,这些人就相当于 JMeter 里的线程,而把这些人管理起来的队伍就是线程组啦。

怎么创建线程组呢?

  • 在 JMeter 的界面上,找到 “线程组” 这个元件,右键点击添加就行。

关键参数大揭秘

  • 名称:这个就像是给你的线程组取个名字,方便你在复杂的测试计划里区分不同的线程组。比如说你可以叫 “登录用户线程组”“查询功能线程组” 等,随你心意,只要能让你一眼就知道这个线程组是干啥的就行。
  • 注释:这就像是给线程组写个小备注,你可以在这里详细说明这个线程组的用途、设置的参数为啥是这样、有啥特殊的考虑等等。比如 “这个线程组用于模拟 100 个用户同时登录系统,Ramp-Up 时间设为 10 秒是为了逐渐增加压力,更接近真实场景”,以后你自己或者同事再看这个测试计划的时候,就能很快明白你的意图。
  • 线程数(模拟的用户数量):比如说你想看看你的奶茶店同时接待 10 个顾客会咋样,那就把线程数设成 10。这就意味着同时有 10 个虚拟用户在向你的系统(奶茶店)发起请求(买奶茶)。
  • Ramp-Up 时间(启动时间间隔):不能一下子让 10 个人全涌进店里吧,得有个先后顺序,不然店员(服务器)会忙不过来。Ramp-Up 时间就是干这个的,比如你设成 2 秒,那就是说这 10 个用户会在 2 秒内陆续进店,平均下来每秒进来 5 个。这样是不是就合理多了?
  • 循环次数:
    • 永远:这个选项的意思就是线程会一直循环执行下去,除非你手动停止测试。就好像有个特别爱喝奶茶的顾客,永远都不会觉得喝够,会一直重复买奶茶的操作,直到你喊停。这种情况适用于你要长时间对系统进行压力测试,看看系统在持续负载下的表现,比如测试服务器能承受多长时间的高并发访问而不崩溃。
    • 具体数字:比如说设成 3,那每个用户就会像个执着的奶茶爱好者一样,把买奶茶的操作重复 3 次。这通常用于你只想让用户进行有限次数的操作,然后观察系统在这几次操作过程中的性能情况,比如测试一个交易流程,用户完成一次交易需要进行 3 个步骤,你就可以设循环次数为 1,让每个用户完整地执行一次交易流程。
  • 在取样器错误后要执行的动作:
    • 继续:如果某个取样器(就像是顾客点奶茶的某个步骤,比如下单)出错了,线程还是会继续执行后面的取样器(比如等待取奶茶、喝奶茶评价等步骤)。这就好像顾客下单的时候出了点小问题,但还是会接着等奶茶、喝奶茶然后评价,不会因为下单出错就直接走了。这种情况适用于你想测试系统在部分请求出错的情况下,整体的稳定性和容错性,比如网站的某些页面加载出错了,但用户还能不能继续使用其他功能。
    • 开始下一次循环:一旦取样器出错,这个线程就直接开始下一次循环,忽略这次出错的情况。就好像顾客下单出错后,直接回到队伍开头,重新开始整个买奶茶的流程。这对于你想测试系统在面对频繁出错的情况下,能否快速恢复并继续处理其他用户请求很有用,比如服务器出现短暂故障后恢复,看用户是否能继续正常使用系统。
    • 停止线程:取样器一出错,这个线程就停止不干了,就像顾客因为下单出错,直接生气地离开了奶茶店。这种情况适用于你要严格检测每个请求都必须成功的场景,如果有一个失败就认为整个测试用例失败,比如一些对数据准确性要求极高的金融交易系统测试。
    • 停止测试:只要有一个取样器出错,整个测试就停止了,所有线程都停下来。这就像奶茶店只要有一个顾客遇到问题,就直接关门整顿了。一般用于你在进行初步的功能测试时,如果发现有严重问题,就直接停止测试去修复问题,避免浪费时间和资源在一个明显有问题的测试上。
    • 立即停止测试:这个就比较 “强硬” 啦,一旦有取样器出错,不仅当前线程停止,整个测试会立刻终止,连正在执行的其他线程也会马上停下来。这就好像奶茶店刚一开业,有一个顾客在点单的时候出了大问题,老板觉得问题太严重了,直接把店门关上,所有人都不许再进行任何操作,先解决这个问题再说。这种情况适用于你发现了一个可能会影响整个系统稳定性或者安全性的严重问题,需要马上停止一切操作来排查和解决,避免造成更严重的后果,比如测试过程中发现了数据库连接泄露这样的严重问题,就需要立即停止测试来修复。
  • Same user on each iteration(每次迭代使用相同用户):如果勾选了这个选项,那么在每次循环中,线程都会使用相同的用户相关信息(比如登录的用户名和密码)来进行请求。这就好像一个固定的老顾客,每次来奶茶店都用同样的会员卡买奶茶。这种情况适用于你要测试系统对于特定用户的多次操作的处理情况,比如测试一个用户反复进行登录、查询个人信息、修改密码等操作时,系统对这个用户的状态管理是否正确。

调度器

  • 持续时间:这就是说你这个线程组要运行多长时间。比如说你想让你的 “奶茶店顾客线程组” 运行 1 个小时,那就把持续时间设成 3600 秒(1 小时 = 3600 秒)。这样你就能测试系统在这 1 个小时的持续负载下的性能表现,看看服务器会不会在长时间运行后变慢或者出现其他问题,就像观察奶茶店在一整天的营业时间里,随着顾客越来越多,会不会出现忙不过来的情况。
  • 启动时间:你可以设置线程组在测试开始后延迟多久启动。比如你想让 “奶茶店顾客线程组” 在测试开始 10 分钟后再开始进店买奶茶,那就把启动时间设成 600 秒(10 分钟 = 600 秒)。这对于模拟真实场景中用户不是同时到达,而是陆续在一段时间内开始使用系统的情况很有用,比如一个在线学习平台,用户可能在课程开始后的不同时间点陆续登录进入课堂。

啥时候用线程组呢?

  • 只要你想模拟一堆用户同时对一个系统做同样的操作,比如好多人同时登录一个网站、查询数据库、调用接口啥的,就用线程组。简单粗暴又好用!

二、Setup 线程组 —— 幕后英雄登场

  • 这个 Setup 线程组就像是在奶茶店开业前,提前来帮忙准备食材、打扫卫生、启动设备的那些工作人员。

创建方法和位置

  • 同样在 JMeter 里,找到对应的地方添加就行,它一般在测试计划的开头部分。

共性和关键参数

  • 名称和注释:和线程组一样,给它取个合适的名字和写清楚注释,方便你知道它是用来做什么前期准备工作的。比如 “数据库连接初始化 Setup 线程组”,注释里写 “用于创建数据库连接池,加载初始数据,为后续的测试线程组提供稳定的数据库环境”。
  • 循环次数:通常情况下,Setup 线程组只需要执行一次就够了,因为那些前期准备工作不需要反复做。所以循环次数一般就设为 1,就像奶茶店开业前的准备工作,只需要在开业前做一次,不需要每天开业都重新准备一遍。
  • 在取样器错误后要执行的动作:一般来说,如果 Setup 线程组里的取样器出错了,整个测试就应该停止,因为前期准备工作都没做好,后面的测试也就没法正常进行了。所以通常会选择 “停止测试” 这个选项,就像奶茶店如果准备食材的时候发现食材都坏了,那就直接别开业了,先解决食材问题。

它的作用是啥呢?

  • 比如说你在测试一个电商网站,在正式开始大量用户购物之前,你得先创建好数据库连接、加载商品数据、初始化一些配置信息吧。这些在正式测试前只需要做一次的准备工作,就交给 Setup 线程组来搞定。它会在所有的线程组(那些来买东西的顾客)开始之前,默默地把这些前期工作做好,确保测试环境一切就绪。

三、Teardown 线程组 —— 完美收场的保障

  • 等奶茶店打烊了,是不是得有人留下来收拾垃圾、清理柜台、关闭设备呢?这就是 Teardown 线程组的活儿。

创建方法和位置

  • 还是在 JMeter 界面上找到它,添加到合适的位置,通常在测试计划的最后面。

共性和关键参数

  • 名称和注释:同样要取个清晰明了的名字和写好注释,比如 “资源清理 Teardown 线程组”,注释写 “用于关闭数据库连接、清理临时文件、释放系统资源等操作,保证测试环境干净整洁,以便下次测试使用”。
  • 循环次数:一般也只需要执行一次,因为收尾工作在测试结束后做一次就够了,不需要反复清理。所以循环次数通常设为 1,就像奶茶店打烊后,只需要打扫一次卫生,不需要反复打扫。
  • 在取样器错误后要执行的动作:这里如果出错了,其实也没有太多可以挽回的办法,因为测试都已经结束了。不过你可以根据情况选择记录下错误信息,以便后续查看是什么原因导致清理工作没做好,可能会影响下次测试。一般可以选择 “继续”,让它尽量完成其他能完成的清理任务,同时把错误记录下来。

作用可不小哦

  • 在所有的测试线程(顾客)都完成了自己的任务(买完奶茶走了)之后,Teardown 线程组就开始行动了。它会关闭数据库连接、清理临时文件、释放系统资源等。要是没有它,你的测试环境可能就会变得乱糟糟的,就像奶茶店关门后没人收拾一样,下次再想用就不方便了。
  • 宝子们,这三个线程组元件在 JMeter 里可是各司其职,搭配起来用,就能把性能测试这件事儿干得漂漂亮亮的!赶紧去试试吧,说不定你就能发现你软件系统里那些隐藏的性能问题,然后一举攻克,成为公司里的性能测试大神!

JMeter 线程组全家桶教程的更多相关文章

  1. 【转】关于JMeter线程组中线程数,Ramp-Up Period,循环次数之间的设置概念

    关于JMeter线程组中线程数,Ramp-Up Period,循环次数之间的设置概念 笔者是个刚刚踏入压力测试领域不到2个月的小菜,这里分享一下线程组中3个参数之间关系的个人见解,不喜请!喷!,望大家 ...

  2. 关于JMeter线程组中线程数,Ramp-Up Period,循环次数之间的设置概念

    关于JMeter线程组中线程数,Ramp-Up Period,循环次数之间的设置概念 笔者是个刚刚踏入压力测试领域不到2个月的小菜,这里分享一下线程组中3个参数之间关系的个人见解,不喜请!喷!,望大家 ...

  3. JMeter线程组编辑区揭秘

    线程组编辑区如下: 有点复杂,但是慢慢看下来,还是比较容易理解. Name 带有业务含义的名字. Comments 线程组的备注说明. Action to be taken after a Sampl ...

  4. jmeter线程组之间传递参数

    JMeter 变量作用域局限于所属线程.这样设计是经过深思熟虑的,目的是让测试线程能够独立运转.有时候用户可能需要在不同线程间(可能属于同一个线程组,也可能不属于同一个线程组)传递变量. 其中一种方法 ...

  5. JMeter 线程组之ConcurrencyThreadGroup介绍

    线程组之ConcurrencyThreadGroup by:授客 QQ:1033553122 测试环境 apache-jmeter-3.2 jmeter-plugins-manager-1.3.jar ...

  6. JMeter 线程组之Stepping Thread Group插件介绍

    线程组之Stepping Thread Group插件介绍   by:授客 QQ:1033553122 测试环境 apache-jmeter-2.13   插件: https://jmeter-plu ...

  7. jmeter线程组之间传参

    背景介绍: 使用jmeter做登录和搜索接口的测试: 登录接口请求头为:Content-Type: application/x-www-form-urlencoded; charset=UTF-8 搜 ...

  8. jmeter线程组介绍

    Jmeter中的测试计划是一直有的,但可以在右侧修改名字,要开始做具体测试设计前,都需要在测试计划下边添加一个线程组,添加路径为鼠标捕获测试计划后,点击鼠标右键->添加->Threads( ...

  9. Jmeter线程组间传递参数

    现在做测试和以前不太一样了,以前只要站在一个用户的角度做端到端的UI测试就可以了,现在不会做接口测试,出去都不好意思和别人打招呼.那提到接口测试,就不得不提一下接口测试利器Jmeter,大家也都知道, ...

  10. jmeter线程组基本设置

    线程组基本设置 在线程组界面中可以设置以下数据,进行控制线程组: 1.取样器错误后要执行的动作: 继续:忽略错误,继续执行 Start Next Thread Loop: 忽略错误,线程当前循环终止, ...

随机推荐

  1. .NET使用OllamaSharp实现大模型推理对话的简单演示

      前提条件:请确保你本地已经安装了ollama以及有关本地离线模型.或者已有远程模型环境等.如果没有,请自行部署.如果需要帮助,可以文末获取联系方式咨询.由于部署离线大模型过于简单,在线资料也很多, ...

  2. MaskGCT,AI语音克隆大模型本地部署(Windows11),基于Python3.11,TTS,文字转语音

    前几天,又一款非自回归的文字转语音的AI模型:MaskGCT,开放了源码,和同样非自回归的F5-TTS模型一样,MaskGCT模型也是基于10万小时数据集Emilia训练而来的,精通中英日韩法德6种语 ...

  3. Chrome 130 版本新特性& Chrome 130 版本发行说明

    Chrome 130 版本新特性& Chrome 130 版本发行说明 一.Chrome 130 版本浏览器更新 1. 新的桌面提示 Chrome 130 引入了一种新的 Toast 样式,用 ...

  4. 论文发表汇款:SWIFT code跨境汇款 —— 如何向境外账号汇款

    如何向境外账号汇款? 有以下几种方式: 对方开通中国金融产品账号或在中国有代理公司:如对方开通中国的银行卡,微信.支付宝,等等,这样其实就不属于跨境汇款了,外国的一些公司已经开设中国的金融产品和银行账 ...

  5. Mysql数据类型面试题15连问

    整数类型的 UNSIGNED 属性有什么用? MySQL 中的整数类型可以使用可选的 UNSIGNED 属性来表示不允许负值的无符号整数.使用 UNSIGNED 属性可以将正整数的上限提高一倍,因为它 ...

  6. 推荐一个Star超过2K的.Net轻量级的CMS开源项目

    推荐一个具有模块化和可扩展的架构的CMS开源项目. 01 项目简介 Piranha CMS是一个轻量级且跨平台的CMS库,专为.NET 8设计. 该项目提供多种模板,具备CMS基本功能,也有空模板方便 ...

  7. VMware安装教程---------------------以及Windows,Linux,Apple MAC OS系统安装

    1.什么是VMware虚拟机 VMware虚拟机是一个虚拟机软件,它可以在一台机器上同时运行多个系统,这些系统包括Windows,Linux,Apple os等. 2.虚拟机有什么用 虚拟机的用处很多 ...

  8. 数据抽取平台pydatax使用案例---11个库项目使用

    数据抽取平台pydatax,前期项目做过介绍: 1,数据抽取平台pydatax介绍--实现和项目使用 项目2: 客户有9个分公司,用的ERP有9套,有9个库,不同版本,抽取的同一个表字段长度有不一样, ...

  9. lua中table中null的表示方法以及判断redis返回null

    今天遇到一个麻烦的问题,查询redis时候,查到数据的时候正常返回,查询不到数据时,返回了null,然而在lua中,常见的nil,但不常见null,这时候lua中对redis返回的null如何做判断呢 ...

  10. 计算机概念——io 复用

    前言 首先什么是io复用呢? 现在web框架没有不用到io复用的,这点是肯定的,不然并发真的很差. 那么io复用,复用的是什么呢?复用的真的不是io管道啥的,也不是io连接啥的,复用的是io线程. 这 ...