性能测试-jmeter9-逻辑控制器、定时器压力并发

课程:B站大学
记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师

性能测试-jmeter逻辑控制器、定时器妙用

  • IF控制器
    • **IF 控制器的作用**
  • 循环控制器
    • 循环控制器的作用
  • ForEach控制器
    • ForEach 控制器的作用
    • **ForEach案例**
  • 定时器:
    • 同步定时器:
    • 常数吞吐量定时器
  • 实践是检验真理的唯一标准


IF控制器

IF 控制器(If Controller)​​ 是 JMeter 中的一种 ​​逻辑控制器​​,用于根据指定的条件判断是否执行其内部的采样器(如 HTTP 请求)或其它逻辑元件。

IF 控制器的作用

  • 1.条件化执行​​:仅当指定条件为 true时,才执行控制器内的请求或逻辑(如登录成功后才执行查询操作)。
  • 2.​​动态决策​​:基于变量值、响应数据或前置条件动态控制测试流程(如根据用户角色跳转到不同页面)。
  • 3.​​流程控制​​:实现复杂的测试场景(如循环、分支、异常处理等)。
  • 4.提升效率​​:避免不必要的请求执行(如未登录时跳过需授权的接口)。

在这里插入图片描述

参数名称类型默认值是否必填作用与说明
参数名称文本-存储 JDBC 请求中占位符对应的实际参数值,多个值用逗号分隔
参数类型文本-指定传递给 SQL 语句中占位符的参数的数据类型,如 VARCHAR、INTEGER 等
变量名称文本-用于存储从数据库查询结果中提取的变量名,多个变量用逗号分隔,和查询结果列一一对应
结果变量名称文本-把整个 JDBC 查询结果存为一个 JMeter 变量,该变量为集合类型,可通过索引访问结果行
查询超时时间 (s)数字0设置 JDBC 查询超时时间,单位秒,超时 JMeter 会中断查询并抛异常,0 表示不限制
限制结果集数字0限制数据库返回结果集的行数,0 不限制,大于 0 的整数 n 则只返回前 n 行
处理结果集下拉选择Store as String指定处理 JDBC 查询结果集的方式,可选 Store as String(以字符串形式存储)、Store as Object(以 Java 对象如 ResultSet 存储,适合复杂操作)

在这里插入图片描述

循环控制器

循环控制器(Loop Controller)​​ 是 JMeter 中的一种 ​​逻辑控制器​​,用于控制其内部包含的 ​​采样器(如 HTTP 请求)或其它逻辑元件​​ 按照指定的次数或条件进行 ​​重复执行​​。它允许您模拟用户多次执行相同操作(如刷新页面、重复提交表单等),是构建循环测试流程的核心元件。

循环控制器的作用

  • 1.​​重复执行​​:让内部的请求或逻辑按固定次数循环(如模拟用户连续点击某个按钮 5 次)。
  • 2.流程控制​​:与 ​​线程组循环次数​​ 形成嵌套,实现更灵活的测试场景(如线程组循环 3 次,每个线程组循环内再执行某个请求 10 次)。
  • 3.​​性能测试​​:通过循环模拟高频率操作,测试系统在持续负载下的表现(如短时间内多次查询接口)。
  • 4.简化脚本​​:避免手动重复添加相同的采样器,通过循环控制器统一管理重复逻辑。
参数名称类型默认值是否必填作用与说明
名称文本Loop Controller循环控制器的显示名称,在测试计划中用于标识该元件(如"查询接口循环5次")
注释文本-对循环控制器的功能描述或备注信息(便于团队协作理解)
循环次数(Loop Count)数值1指定内部元件循环执行的总次数。
- 填写具体数字(如5):内部元件会执行5次
- 填写Forever(或勾选下方选项):无限循环,直到手动停止测试或达到线程组的总循环限制
注意:若线程组本身也设置了循环次数,实际执行次数为线程组循环次数×循环控制器循环次数
永远(Forever)布尔(复选框)未勾选若勾选,循环次数设置为无限循环(等同于填Forever),内部元件会一直执行,直到测试计划停止或达到全局停止条件(如线程组的调度器时间结束)
典型场景:模拟持续不断的用户操作(如长连接心跳请求)

在这里插入图片描述
在这里插入图片描述

注意点:循环控制器针对子元件,线程组针对所有子元件

ForEach控制器

ForEach 控制器(ForEach Controller)​​ 是 JMeter 中的一种 ​​逻辑控制器​​,用于 ​​遍历一组变量值​​,并针对每个值 ​​重复执行其内部的采样器或逻辑元件​​。它通常与 ​​用户定义的变量​​ 或 ​​提取器(如正则表达式提取器、JSON 提取器等)​​ 配合使用,实现 ​​基于动态数据集合的循环操作​​,是处理多值关联数据的常用元件。

ForEach 控制器的作用

  • 1.遍历多值数据​​:对一组相关的变量值(如从响应中提取的多个 ID、Token 等)进行逐个处理。
  • 2.动态关联​​:将提取器获取的多个动态值(如列表页商品 ID)依次传递给后续请求,实现批量操作(如查询每个商品的详情)。
  • 3.​​简化重复逻辑​​:避免为每个值手动添加相同的请求,通过控制器统一管理循环流程。
  • 4.​​精准控制​​:按顺序处理每个值,且支持自定义起始索引和结束条件。

在这里插入图片描述

参数名称类型默认值是否必填作用与说明
名称文本ForEach Controller控制器的显示名称,在测试计划中用于标识该元件(如"遍历商品ID")
注释文本-对控制器的功能描述或备注信息(便于团队协作理解)
输入变量前缀(Input Variable Prefix)文本-定义一组待遍历变量的 共同前缀。这些变量通常由提取器(如正则提取器、JSON 提取器)生成,格式为 前缀_数字(如 itemId_1, itemId_2)。
示例:若提取器生成的变量为 userId_1, userId_2, userId_3,则此处填写 userId。
Start index for loop (exclusive)数值0遍历的起始索引(从 0 开始),但不包含该索引对应的值(即从 Start index + 1 开始处理)。
典型值:0(表示从第一个变量开始,如 前缀_1)。
用途:若提取器生成的变量从 前缀_1 开始,通常填 0;若从 前缀_0 开始,可填 0 或调整。
End index for loop (inclusive)数值-1遍历的结束索引(包含该索引对应的值)。
- 填写具体数字(如 3):表示处理到 前缀_数字(如 前缀_3)。
- 填写 -1:自动遍历所有存在的变量(直到找不到下一个 前缀_数字变量为止)。
典型值:-1(推荐,自动匹配所有提取到的值)。
输出变量名称(Output variable name)文本-定义一个变量名,用于存储当前正在处理的变量值。在控制器内部的采样器中,可通过该变量名引用当前值。
示例:填写 currentUserId,则在循环内可通过 ${currentUserId} 获取当前遍历到的 userId_X 的值。

在这里插入图片描述

ForEach案例

ForEach+用户定义变量
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
ForEach+正则表达式提取器
ForEach循环可以搭配各个提取器共同使用
流程:
1、先i请求业务接口a,查看响应数据
2、正则表达式提取器提取值
3、foreach控制器设置
4、业务接口b引用变量进行使用
在这里插入图片描述

定时器:

同步定时器:

思考:

  • 在电商活动中如何测试秒杀活动(绝对高并发) jmeter软件线程数可以模拟多用户,但是并不会在同一时刻瞬间发压力,怎么办?
    故jmeter有元件:同步定时器(区分sleep含函数)
    又叫做集合点(LR 的叫法),保证大量的请求在同一时间进行发送,形成绝对的并发
    实现原因:设置同步定时器,有请求要发出时,同步定时器会暂缓请求发送,一直到积攒的请求数达到,将所有的请求同步发送出去,形成绝对的并发(更大的压力负载)
    在这里插入图片描述
    在这里插入图片描述
    在100个线程中,​​每次触发20个用户同时并发请求​​(模拟20组用户同时操作),其余用户按Ramp-Up逐步加入。超时未凑齐的线程会在5秒后自动执行,保证测试流程不卡死。
    在这里插入图片描述

常数吞吐量定时器

​​吞吐量(Throughput)​​ 是衡量系统性能的关键指标之一,表示 ​​单位时间内系统处理的请求数量​​,通常用 ​​"请求/秒"(Requests/Second)​​ 或 ​​"事务/秒"(Transactions/Second, TPS)​​ 来衡量。
常数吞吐量定时器(Constant Throughput Timer)​​ 是 JMeter 中用于 ​​精确控制测试脚本的吞吐量(即每秒处理的请求数,Requests/Second 或 Transactions/Second)​​ 的定时器元件。它的主要作用是 ​​通过动态调整请求的发送间隔时间,使得测试整体达到用户设定的目标吞吐量​​,常用于模拟 ​​稳定的业务负载​​ 或 ​​验证系统在不同吞吐量下的性能表现​​。
核心作用

  • 1.​​精确控制吞吐量​​:强制测试计划以设定的目标速率(如每秒 50 个请求)发送请求,而非单纯依赖线程数和循环次数。
  • 2.​​模拟稳定业务负载​​:适用于需要测试系统在 ​​恒定业务压力​​ 下的表现(如每分钟处理 3000 笔订单)。
  • 3.​​独立于线程组配置​​:吞吐量控制与线程组的线程数、Ramp-Up 时间等参数解耦,可单独调整压力强度。
  • 4.​​支持动态调整​​:通过变量或函数动态修改目标吞吐量,适应复杂测试场景。

在这里插入图片描述
此处的是客户端达不到20QPS(样本数是1200),此处我更改为测试单线程10QPS的频率访问业务接口,进行统计测试
在这里插入图片描述
在这里插入图片描述

定时器的作用:模拟负载压力要求,本省不代表性能是否有bug,bug分析需要通过响应时间和监控指标等各个方面分析

下节实操咱们学习分布式压力测试

实践是检验真理的唯一标准

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/921898.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/921898.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

T:线段树入门(无区间更新)

线段树.线段树介绍.线段树框架.理解线段树.图式整个过程.线段树代码逐层解析.代码汇总.leetcode练习.线段树介绍 线段树(SegmentTree)\;\;\;\;\;\;\;\;线段树(SegmentTree)线段树(SegmentTree) is 用于高效处理区间查询和单点修改的数据结构,和树状数组很像&#xf…

【ISP】Charlite工具实操

实习一周了&#xff0c;参与了客观拍摄和测试&#xff0c;复习一下nv工具 BLACK LEVEL&#xff08;黑电平&#xff09; eg&#xff1a; $ nv_ob 0 in_dir <input directory> out_name <ob file> nv_ob 0 in_dir D:\study\nvraw\ob1 out_name D:\study\nvraw\my_out…

普蓝机器人 AutoTrack-IR-DR200 外设配置全指南

为什么外设配置对机器人研究如此重要&#xff1f;在当今机器人技术飞速发展的时代&#xff0c;高校学生研究团队正成为创新的重要力量。无论是参加机器人竞赛、开展毕业设计&#xff0c;还是进行学术研究&#xff0c;正确配置和使用外设设备都是成功的关键。尤其学生组装一个服…

8、Python性能优化与代码工程化

学习目标&#xff1a;掌握Python程序性能分析和优化的通用方法&#xff0c;建立工程化开发的规范意识&#xff0c;为后续AI项目开发奠定坚实的编程基础在数据科学和AI开发中&#xff0c;代码性能往往决定了项目的可行性。一个处理时间从几小时缩短到几分钟的优化&#xff0c;可…

【算法--链表】117.填充每个节点的下一个右侧节点指针Ⅱ--通俗讲解

通俗算法讲解推荐阅读: 【算法–链表】83.删除排序链表中的重复元素–通俗讲解 【算法–链表】删除排序链表中的重复元素 II–通俗讲解 【算法–链表】86.分割链表–通俗讲解 【算法】92.翻转链表Ⅱ–通俗讲解 【算法–链表】109.有序链表转换二叉搜索树–通俗讲解 【算法–链…

分词器(Tokenizer)总结(89)

分词器(Tokenizer)总结 分词器(Tokenizer) 分词器的词表(vocabulary)长度通常短于模型嵌入层(embedding layer)的长度。 结束标记(EOS token)应仅用于标记文本结尾,不可用于其他用途。 填充标记(PAD token)通常未预先定义,但你仍可能需要用到它: 对于生成式模型…

19 webUI应用中 Controlnet精讲(05)-图像修复与编辑

前面的篇章已经详细讲解了线条约束、三维关系与空间深度、人体姿态等几类controlnet的功能与应用&#xff0c;本节内容将对通过controlnet对图像修复与编辑进行讲解。 通过controlnet也可以对图片进行编辑、重绘及放大等操作&#xff0c;具体包括Recolor、Inpaint、Tile等&…

消息推送的三种常见方式:轮询、SSE、WebSocket

摘要&#xff1a;本文介绍消息推送的三种常见方式&#xff1a;轮询&#xff08;定时请求&#xff0c;易增负担&#xff09;与长轮询&#xff08;阻塞请求至有数据 / 超时&#xff0c;减少请求&#xff09;、SSE&#xff08;HTTP 单向实时传输&#xff0c;纯文本、自动重连&…

论文阅读:ACL 2024 Stealthy Attack on Large Language Model based Recommendation

总目录 大模型相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 https://arxiv.org/pdf/2402.14836 https://www.doubao.com/chat/19815566713551106 文章目录速览攻击方法速览一、攻击核心目标与前提1. 核心目标2. 攻击前提二、模型无关的简单…

自动驾驶中的传感器技术43——Radar(4)

本文对目前毫米波雷达中的天线设计进行比较全面的罗列&#xff0c;并进行简单的设计评述 1、实际设计案例 图1 涵盖能宽窄覆盖的天线设计&#xff08;无俯仰分辨率&#xff09;图2 Bosch前雷达的天线设计&#xff08;有俯仰的分辨率但比较弱&#xff0c;也涵盖了扩展覆盖&…

使用反转法线材质球,实现切换天空盒相同的功能,优点:包体变小

切换天空盒第一步先把SKY 天空球资源导入到工程里&#xff0c; 第二步&#xff1a;天空球文件下的SKY预制件拖入到场景里 第三步 选着SKY材质球&#xff0c;拖入自己的全景图片(图片分辨率不能超过5000*5000&#xff0c;否则手机无法显示) 如果并没有效果&#xff0c;看看图…

真正有效的数据指标体系应该长什么样?

真正有效的数据指标体系应该长什么样&#xff1f;为什么大多数企业的指标体系都是"花架子"&#xff1f;真正有效的指标体系应该长什么样&#xff1f;从数据到洞察&#xff1a;让指标真正"活"起来结语在这个人人都在谈数字化转型的时代&#xff0c;企业就像…

分布式专题——6 Redis缓存设计与性能优化

1 多级缓存架构2 缓存设计 2.1 缓存穿透 2.1.1 简介缓存穿透是什么&#xff1f;当查询一个根本不存在的数据时&#xff0c;缓存层和存储层都不会命中。正常逻辑下&#xff0c;存储层查不到数据就不会写入缓存层。这会导致&#xff1a;每次请求这个不存在的数据&#xff0c;都要…

一文了解大模型压缩与部署

一文了解大模型压缩与部署&#xff1a;从 INT4 量化到 MoE&#xff0c;让大模型跑在手机、边缘设备和云端&#x1f3af; 为什么需要模型压缩与部署&#xff1f;你训练了一个强大的大模型&#xff08;如 Qwen-72B、LLaMA-3-70B&#xff09;&#xff0c;但在部署时发现&#xff1…

新手向:中文语言识别的进化之路

自然语言处理&#xff08;NLP&#xff09;技术正在以前所未有的速度改变我们与机器的交互方式。根据Gartner最新报告显示&#xff0c;全球NLP市场规模预计在2025年将达到430亿美元&#xff0c;年复合增长率高达21%。而中文作为世界上使用人数最多的语言&#xff08;全球约15亿使…

LeetCode100-206反转链表

本文基于各个大佬的文章上点关注下点赞&#xff0c;明天一定更灿烂&#xff01;前言Python基础好像会了又好像没会&#xff0c;所有我直接开始刷leetcode一边抄样例代码一边学习吧。本系列文章用来记录学习中的思考&#xff0c;写给自己看的&#xff0c;也欢迎大家在评论区指导…

uniapp开源多商户小程序商城平台源码 支持二次开发+永久免费升级

在电商行业竞争日益激烈的今天&#xff0c;拥有一个功能强大、灵活可拓展的多商户小程序商城至关重要。今天给大家分享一款 uniapp 开源多商户小程序商城平台源码&#xff0c;它不仅具备丰富的基础功能&#xff0c;还支持二次开发&#xff0c;更能享受永久免费升级服务&#xf…

使用脚本一键更新NTP服务器地址为自定义地址

【使用场景】 在银河麒麟桌面操作系统V10SP1-2303版本中使用脚本一键修改NTP服务器地址为自定义地址。 【操作步骤】 步骤1. 编写shell脚本 ```bash desktop2303@desktop2303-pc:~$ vim setntptimeserver.sh #!/bin/bashfunction modifykylinconf() { # 检查是否已存在目标配置…

linux内核 - 内核架构概览

当 Linux 系统启动时,内核会在启动过程的早期阶段接管控制——紧跟在固件(BIOS 或 UEFI)和引导加载程序完成任务之后。此时,压缩的 Linux 内核镜像会被加载到内存中,通常会附带一个称为 initramfs 的最小临时根文件系统,它用于在切换到真实根文件系统并继续系统初始化之前…

[react] react-router-dom是啥?

页面路由&#xff0c;注意页面路由不是路由器&#xff0c;因为我之前总是把路由和路由器搞混。而且我总是把前端页面的路由和路由器的路由搞混。那么这里一定要明白&#xff0c;这里我所说的页面路由就是指在浏览器里面的导航路由。 npm create vitelatest my-react-app – --t…