性能测试-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分析需要通过响应时间和监控指标等各个方面分析
下节实操咱们学习分布式压力测试