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

发布于:2025-09-11 ⋅ 阅读:(18) ⋅ 点赞:(0)

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


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分析需要通过响应时间和监控指标等各个方面分析

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

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


网站公告

今日签到

点亮在社区的每一天
去签到