JMeter 中两大高级线程组的区别与应用
一、JMeter 中的高级线程组概述
最近群里的测试小伙伴在问在 JMeter 中,“jp@gc - Ultimate Thread Group”和“jp@gc - Stepping Thread Group 阶梯加压”有哪些区别和实际应用场景有哪些?所以这里也跟大家分享一下
JMeter 作为一款强大的性能测试工具,拥有众多实用的插件,其中 jp@gc - Ultimate Thread Group 和 jp@gc - Stepping Thread Group 这两个高级线程组在性能测试中发挥着至关重要的作用。
jp@gc - Ultimate Thread Group 功能强大且灵活度高,相当于把多个不同基础线程组进行组合。它可以用于创建线性负载、阶梯负载、尖峰负载和波浪形负载等多种测试场景。例如,在创建线性负载测试场景中,可在 60s 内启动 100 个线程,持续运行 60s,再花 10s 的时间结束脚本。同时,添加监听器 jp@gc - Active Threads Over Time 后,能方便地查看线程运行情况。在创建阶梯负载测试场景时,比如测试 100 个用户,可以逐步提升用户数量,先从 25 个用户开始,在一定时间内保持该负载,观察服务器的处理情况,然后再依次增加用户数量,通过这种方式能更可靠地了解系统在不同负载下的运行状态。
jp@gc - Stepping Thread Group 则主要用于模拟从某个值开始不断增加压力,直至达到某个值,然后持续运行一段时间的测试场景。例如,设置总共要启动的线程数为 100,从运行之后 0 秒开始启动线程,初次启动 0 个线程,之后每次启动 10 个线程,每运行 30 秒启动一次,启动线程时间为 5 秒,全部启动完之后持续运行 60 秒,最后每 1 秒钟释放 5 个线程。结合监听器 jp@gc - Active Threads Over Time,可以清晰地观察线程运行情况,还能设置比较陡峭的并发。
二、jp@gc - Stepping Thread Group 的特点与应用
(一)独特的参数设置
- This group will start:表示总共要启动的线程数,它确定了整个测试过程中的最大线程数量,比如设置为 100 个,表示最终会加载 100 个线程,用于模拟特定场景下的最大并发用户数。
- First,wait for:这是第一阶段等待时间,如果设置为 0,就不需要等待,它可以用于控制测试的起始时间点,以便更好地模拟实际场景中的用户行为。
- Then start:初始加载的线程数,比如设置为 20 个,表示初始启动 20 个线程,为后续的逐步加压提供了起始点。
- Next add:每梯次加载的线程数,比如设置为 5 个,表示每个梯次加载 5 个线程,结合后面的参数可以控制线程增加的速度和节奏。
- threads every:当前运行多长时间后再次加载线程或每一次加载完成之后的持续时间,比如设置为 1 秒,每梯次加载完线程之后运行 1 秒,这个参数可以调整测试的动态性。
- using ramp-up:每梯次加载线程的时间,比如设置为 0 秒,表示每一次加载立刻完成,它与前面的参数共同决定了线程增加的速度。
- Then hold load for:线程全部加载完之后运行多长时间,比如设置为 30 秒,表示 100 个线程加载完之后再持续 30 秒,用于模拟系统在高负载下的持续运行情况。
- Finally,stop/threads every:每多长时间释放多少个线程,比如设置为 5 个和 1 秒,表示所有持续负载结束之后每 1 秒钟释放 5 个线程,用于控制测试的结束过程。
(二)应用场景广泛
- 容量测试:在容量测试中,jp@gc - Stepping Thread Group 可以评估系统在用户逐渐增加情况下的性能极限。通过逐步增加线程数,观察系统的响应时间、吞吐量等指标的变化,确定系统能够承受的最大负载。例如,在模拟网站上线初期访问量逐渐增长的过程中,可以使用该插件来测试系统的容量,以便及时发现潜在的性能问题并进行优化。
- 稳定性测试:验证系统在用户访问量逐步增长过程中的稳定性和响应时间。通过长时间运行测试,观察系统在不同负载下的稳定性,确保系统在持续高负载下不会出现崩溃或性能严重下降的情况。例如,在电商平台大促活动前,可以使用该插件进行稳定性测试,以保证系统在高流量下的稳定运行。
- 发布前压力测试:模拟新服务或产品发布后,用户逐渐发现并访问的场景,以评估系统的准备情况。通过设置合理的参数,模拟真实用户的增长趋势,提前发现系统可能存在的性能瓶颈,为发布做好充分准备。
(三)使用注意事项
确保配置的用户增长速度和系统处理能力相匹配,避免因过快增加负载导致测试环境崩溃。在设置参数时,需要充分了解系统的性能特点和处理能力,根据实际情况合理调整线程增加的速度和数量。
监控资源使用情况,结合监听器结果分析性能瓶颈。在测试过程中,要密切关注系统的资源使用情况,如 CPU、内存、网络带宽等,结合监听器收集到的响应时间、吞吐量等数据,分析系统的性能瓶颈所在,以便进行针对性的优化。
根据实际需求调整参数,合理设置测试持续时间和用户行为模式,以获得最接近真实的测试结果。不同的应用场景可能需要不同的参数设置,要根据具体情况进行调整,确保测试结果能够真实反映系统在实际使用中的性能表现。
三、jp@gc - Ultimate Thread Group 的特点与应用
(一)丰富的控制参数
- Start Time:该阶段开始的时间点,相对于测试启动的时间(单位:秒)。它决定了线程组开始执行的时间,可以精确控制测试的启动时机,以便更好地模拟实际场景中的用户行为。例如,如果设置为 10 秒,表示在测试启动后的第 10 秒开始执行该线程组。
- Initial Delay, sec:线程开始增加前的延迟时间。这个参数可以用于模拟用户在进入系统前的等待时间,或者在某些特定场景下,为了避免瞬间高并发而设置的延迟。比如设置为 5 秒,那么在 Start Time 之后,会再等待 5 秒才开始增加线程。
- Startup Time, sec:线程从零增加到目标数量所需的时间。它控制了线程数量的增长速度,可以模拟用户逐渐进入系统的过程。例如,如果要在 30 秒内启动 100 个线程,那么 Startup Time 可以设置为 30 秒。
- Hold Load For, sec:达到目标线程数后保持该负载的时间。这个参数用于模拟用户在系统中的持续活动时间,以便测试系统在高负载下的稳定性。例如,设置为 60 秒,表示在达到目标线程数后,保持该负载状态 60 秒。
- Shutdown Time:线程从当前数量减少到零所需的时间。它可以控制测试的结束过程,避免突然停止测试对系统造成的冲击。比如设置为 10 秒,表示在测试结束时,用 10 秒的时间逐渐减少线程数量至零。
(二)多样的应用场景
- 创建线性负载:例如在 60s 内启动 100 个线程,持续运行 60s,花 10s 的时间结束脚本。这种场景可以模拟用户数量逐渐增加,然后在一定时间内保持稳定,最后逐渐减少的过程,适用于测试系统在稳定负载下的性能表现。
- 创建阶梯负载:先从 25 个用户开始在一定时间内保持一个负载,查看服务器如何处理它。之后再依次增加 25 个用户,直到达到 100 个用户。这种方式可以更细致地观察系统在不同负载阶段的性能变化,找出系统的性能瓶颈。
- 创建尖峰负载:可以模拟突然出现的高并发情况,如促销活动、突发事件等场景下用户的瞬间涌入。通过设置合适的参数,可以快速启动大量线程,然后在短时间内达到峰值,再逐渐减少线程数量,测试系统在应对突发高负载时的性能。
- 创建波浪形负载:以 12306 抢票为例,每次开放抢票时,有大量用户涌入,等到下次开放时,又有大量用户涌入,像波浪一样不断敲击服务器。通过设置合适的 Initial Delay、Startup Time、Hold Load For 和 Shutdown Time 参数,可以模拟这种波浪形的负载模式,考验服务器的性能。
(三)优势与不足
- 优势:提供了丰富的控制选项,能够满足复杂测试需求。可以根据不同的测试场景精确调整线程的行为,模拟出各种真实世界中的用户行为模式。例如,在模拟用户登录高峰期、持续使用期以及用户活动的逐渐减少等场景时,能够更加贴近实际情况,获得更准确的性能评估结果。
- 不足:配置较为复杂,需要了解更多线程组控制参数的概念和作用。对于初学者来说,可能需要花费一定的时间来学习和理解这些参数的含义和用法。而且在设置参数时,需要充分考虑系统的性能特点和测试需求,否则可能会导致测试结果不准确或者测试过程出现问题。
四、两者区别与实际应用对比
(一)参数设置方面的区别
- 启动方式:
- jp@gc - Stepping Thread Group 从一个初始值开始,通过逐步增加线程数的方式启动。例如设置总共要启动的线程数为 100,从运行之后 0 秒开始启动线程,初次启动 0 个线程,之后每次启动一定数量的线程,逐步达到最大值。
- jp@gc - Ultimate Thread Group 可以设置初始延迟时间,然后在特定的启动时间内将线程从零增加到目标数量。比如设置初始延迟为 5 秒,在 Start Time 之后,会再等待 5 秒才开始增加线程,然后在规定的 Startup Time 内启动到目标线程数。
- 运行过程控制:
- jp@gc - Stepping Thread Group 通过设置每梯次加载的线程数、加载时间和持续时间等参数来控制运行过程。例如每梯次加载 5 个线程,每运行一段时间再次加载,加载时间为特定值,加载完成后持续运行一段时间。
- jp@gc - Ultimate Thread Group 则通过 Startup Time、Hold Load For 等参数来控制线程从启动到达到峰值以及在峰值持续运行的时间。例如在 30 秒内启动到目标线程数,然后保持该负载状态一定时间。
- 结束方式:
- jp@gc - Stepping Thread Group 通常是每多长时间释放一定数量的线程,逐步减少线程数直到为零。比如每 1 秒钟释放 5 个线程。
- jp@gc - Ultimate Thread Group 可以设置一个线程从当前数量减少到零所需的时间,逐渐结束测试。比如设置为 10 秒,表示在测试结束时,用 10 秒的时间逐渐减少线程数量至零。
(二)应用场景的不同
- 容量测试:
- jp@gc - Stepping Thread Group 在容量测试中适合逐步增加负载,观察系统在不同负载阶段的性能变化,找出系统的容量极限。例如在模拟电商平台用户访问量逐渐增长的过程中,可以更好地了解系统在各个阶段的处理能力。
- jp@gc - Ultimate Thread Group 则可以通过创建不同的负载模式,如线性负载、阶梯负载等,全面测试系统在不同负载情况下的性能表现。比如在测试一个新上线的应用时,可以通过创建线性负载来模拟用户数量的逐渐增加,观察系统的响应时间和吞吐量的变化。
- 稳定性测试:
- jp@gc - Stepping Thread Group 可以通过设置较为平缓的线程增加速度,长时间运行测试,观察系统在不同负载下的稳定性。例如在进行银行系统的稳定性测试时,可以逐步增加用户数量,观察系统在处理大量交易时的稳定性。
- jp@gc - Ultimate Thread Group 可以通过设置尖峰负载或波浪形负载来测试系统在突发高负载和间歇性高负载情况下的稳定性。比如在测试在线游戏服务器时,可以模拟玩家数量的突然增加和波动,观察服务器的性能表现。
- 发布前压力测试:
- jp@gc - Stepping Thread Group 可以根据实际情况逐步增加负载,模拟新服务或产品发布后用户逐渐发现并访问的场景,提前发现系统可能存在的性能问题。例如在发布一个新的移动应用时,可以通过设置逐步增加的线程数来模拟用户的增长趋势,确保系统在发布后能够稳定运行。
- jp@gc - Ultimate Thread Group 可以通过创建多种负载模式,全面测试系统在不同用户行为模式下的性能表现,为发布做好充分准备。比如在发布一个新的电商平台时,可以通过创建阶梯负载和波浪形负载来模拟用户在促销活动和日常使用中的行为,确保系统能够应对各种情况。
总之,jp@gc - Stepping Thread Group 和 jp@gc - Ultimate Thread Group 在参数设置和应用场景上各有特点,性能测试人员可以根据实际需求选择合适的线程组进行测试,以获得更准确的性能评估结果。
相关文章:

JMeter 中两大高级线程组的区别与应用
一、JMeter 中的高级线程组概述 最近群里的测试小伙伴在问在 JMeter 中,“jpgc - Ultimate Thread Group”和“jpgc - Stepping Thread Group 阶梯加压”有哪些区别和实际应用场景有哪些?所以这里也跟大家分享一下 JMeter 作为一款强大的性能测试工具&a…...

深入理解伪元素与伪类元素
在“探秘盒子浮动,破解高度塌陷与文字环绕难题,清除浮动成关键!”中,我们讲到如果父盒由于各种原因未设置高度, 子盒的浮动会导致父盒的高度塌陷。为了解决高度塌陷的问题,我们可以添加伪元素。 一、伪元素…...

HDU Romantic
题目大意:现在告诉你两个非负整数 a 和 b。找到满足 X*a Y*b 1 的非负整数 X 和整数 Y。如果没有这样的答案,请写 “sorry”。 思路:这是一道扩展欧几里得模板题,唯一容易错的就是 x 有可能是负数,要把它改成非负数…...

[每日一练]通过shift移动函数实现连续数据的需求
该题目来源于力扣: 603. 连续空余座位 - 力扣(LeetCode) 题目要求: 表: Cinema------------------- | Column Name | Type | ------------------- | seat_id | int | | free | bool | ------------------- Seat_id…...

go 中的斐波那契数实现以及效率比较
package mainimport ("fmt""math/big""time" )// FibonacciRecursive 使用递归方法计算斐波那契数列的第n个数 func FibonacciRecursive(n int) *big.Int {if n < 1 {return big.NewInt(int64(n))}return new(big.Int).Add(FibonacciRecursiv…...

基于ASP.NET的小型超市商品管理系统
文章目录 前言项目介绍技术介绍功能介绍核心代码数据库参考 系统效果图 前言 示 文章底部名片,获取项目的完整演示视频,免费解答技术疑问 项目介绍 小型超市商品管理系统是一款针对小型超市日常运营需求设计的软件解决方案。该系统主要内容有商品类别…...

spdlog学习记录
spdlog Loggers:是 Spdlog 最基本的组件,负责记录日志消息。在 Spdlog 中,一个 Logger 对象代表着一个日志记录器,应用程序可以使用 Logger 对象记录不同级别的日志消息Sinks:决定了日志消息的输出位置。在 Spdlog 中&…...

linux替换某个文件的某段内容命令
假设文件是a.sql 里面的库是abc,我想把这个abc给替换掉,改成hahaha cat a.sql |grep abc|sed -i s/abc/hahaha/g a.sql 如果想写个脚本指定整个文件夹中的内容替换 #!/bin/bash # 检查是否提供了文件夹路径 if [ -z "\$1" ]; then echo &…...

什么是SQL注入攻击?如何防止呢?
目录 一、什么是SQL注入? 二、如何防止? 2.1 使用预编译语句 2.2 使用 ORM 框架 2.3 用户输入校验 一、什么是SQL注入? SQL 注入是一种常见的网络安全漏洞,攻击者通过在应用程序的用户输入中插入恶意的 SQL 代码ÿ…...

consumer 角度讲一下i2c外设
往期内容 I2C子系统专栏: I2C(IIC)协议讲解-CSDN博客SMBus 协议详解-CSDN博客I2C相关结构体讲解:i2c_adapter、i2c_algorithm、i2c_msg-CSDN博客内核提供的通用I2C设备驱动I2c-dev.c分析:注册篇内核提供的通用I2C设备驱动I2C-dev.…...

面试经典150题刷题记录
数组部分 1. 合并两个有序的子数组 —— 倒序双指针避免覆盖 88. 合并两个有序数组 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中,使…...

【HarmonyOS NEXT】实现保存base64图片到图库
上篇文章介绍了HarmonyOS NEXT如何保存base64文件到download目录下,本次介绍如何保存base64图片到图库,网络图片保存方式大同小异,先下载图片,然后再保存 phAccessHelper.showAssetsCreationDialog参考官方文档’ ohos.file.pho…...

开题答辩最怕被问什么?教你用ChatGPT轻松准备,稳拿高分!
AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 开题答辩是学位论文写作过程中的重要环节,能帮助导师评估你的研究计划是否可行,并对后续写作起到指导作用。很多同学在面对导师提问时会感到紧张,因此提前准备好常见问题的…...

Unity3D功耗和发热分析与优化详解
前言 Unity3D作为广泛使用的游戏开发引擎,在游戏开发过程中,功耗和发热问题一直是开发者需要重点关注的问题。功耗和发热不仅影响用户体验,还可能对设备的硬件寿命造成一定影响。本文将从技术角度详细分析Unity3D游戏在移动设备上的功耗和发…...

深度学习中的掩码介绍
在深度学习中,**掩码(Mask)**通常用于屏蔽掉某些特定部分的数据,以确保模型在训练或推理时不处理无效或无关的输入。掩码的使用场景主要包括处理变长序列、生成模型中的自回归任务、处理填充数据等。掩码可以是二值矩阵(1 表示有效数据,0 表示屏蔽数据),在注意力机制中…...

rust高级进阶总结
文章目录 前言1. Rust生命周期进阶一、不太聪明的生命周期检查(一)例子1(二)例子2 二、无界生命周期三、生命周期约束(HRTB)(一)语法及含义(二)综合例子 四、…...

整理—计算机网络
目录 网络OSI模型和TCP/IP模型 应用层有哪些协议 HTTP报文有哪些部分 HTTP常用的状态码 Http 502和 504 的区别 HTTP层请求的类型有哪些? GET和POST的使用场景,有哪些区别? HTTP的长连接 HTTP默认的端口是什么? HTTP1.1怎…...

分布式数据库环境(HBase分布式数据库)的搭建与配置
分布式数据库环境(HBase分布式数据库)的搭建与配置 1. VMWare安装CentOS7.9.20091.1 下载 CentOS7.9.2009 映像文件1.2启动 VMware WorkstationPro,点击“创建新的虚拟机”1.3在新建虚拟机向导界面选择“典型(推荐)”1…...

100个JavaWeb(JDBC, Servlet, JSP)毕业设计选题
100个JavaWeb(JDBC, Servlet, JSP)毕业设计选题 教育行业 学生信息管理系统在线考试系统课程管理与选课系统教师评价管理系统图书馆管理系统学生成绩查询系统校园论坛作业提交与批改系统学生考勤管理系统教学资源共享平台 企业管理 员工管理系统考勤打卡系统办公用品申请管…...

05 go语言(golang) - 常量和条件语句
常量 在Go语言中,常量是使用 const 关键字定义的,并且一旦被赋值后,它们的值在程序运行期间不能改变。常量可以是字符、字符串、布尔或数值类型。 基本特性 不可修改:一旦一个常量被定义,它的值就不能被更新。编译时…...

【设计模式】深入理解Python中的适配器模式(Adapter Pattern)
深入理解Python中的适配器模式(Adapter Pattern) 在软件开发中,常常会遇到需要让不兼容的类或接口协同工作的问题。适配器模式(Adapter Pattern)是一种结构型设计模式,通过提供一个包装器对象,…...

RuoYi-Vue若依框架-后端设置不登陆访问(白名单)
找到SecurityConfig类 确认自己的需求 /*** anyRequest | 匹配所有请求路径* access | SpringEl表达式结果为true时可以访问* anonymous | 匿名可以访问* denyAll | 用户不能访问* fullyAuthenticated | 用户完全认证可…...

C语言初阶小练习2(三子棋小游戏的实现代码)
这是C语言小游戏三子棋的代码实现 test.c文件是用来测试的部分 game.h文件是用来声明我们说写出的函数 game.c文件是用来编写我们的功能实现函数部分 1.test.c #define _CRT_SECURE_NO_WARNINGS 1 #include"game.h" void menu() {printf("***************…...

金融行业合同管理如何利用AI技术进行风险预警?
2024年以来,金融行业的发展主线被锚定,强调了防风险的基调,尤其是系统性风险的防范。金融工作的重点在于实现六个强大:强大的货币、强大的中央银行、强大的金融机构、强大的国际金融中心、强大的金融监管、强大的金融人才队伍。这…...

世界数字农业盛宴与技术探索,25年3月聚焦世界灌溉科技大会
由中国农业节水和农村供水技术协会、中国农垦节水农业产业技术联盟、北京物联网智能技术应用协会、振威国际会展集团主办的“世界灌溉科技大会”、“第11届北京国际数字农业与灌溉技术博览会”,定于2025年3月31日至4月2日在北京国家会议中心举办。 作为世界三大灌溉…...

二百六十九、Kettle——ClickHouse清洗ODS层原始数据增量导入到DWD层表中
一、目的 清洗ClickHouse的ODS层原始数据,增量导入到DWD层表中 二、实施步骤 2.1 newtime select( select create_time from hurys_jw.dwd_statistics order by create_time desc limit 1) as create_time 2.2 替换NULL值 2.3 clickhouse输入 2.4 字段选择 2.5 …...

Maya---骨骼绑定
调节骨骼大小 回车键确认骨骼 FK子集跟父集走 IK子集不跟父集走 前视图中按shift键添加骨骼 清零、删除历史记录,创建新的物体...

携手并进,智驭教育!和鲸科技与智谱 AI 签署“101 数智领航计划”战略合作协议
近日,上海和今信息科技有限公司(以下简称“和鲸科技”)与北京智谱华章科技有限公司(以下简称“智谱 AI”)签署“101 数智领航计划”战略合作协议。双方将携手营造智能化学科教育与科研环境,提供多种大模型工…...

牛客周赛63
https://ac.nowcoder.com/acm/contest/91592 好数 简单的判断两位数,且十位等于个位 #include <bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define int long long using namespace std; using ll long long; using pii …...

git restore恢复删除文件
新版本 在 Git 2.23 版本之后,Git 引入了一个新的命令 git restore,用于简化文件恢复操作。可以用 git restore 来恢复误删除的文件。下面是详细的使用方法: 1. 恢复工作区中删除的文件(未提交) 如果文件已被删除&a…...