性能测试-jmeter11-报告分析
课程:B站大学
记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师
性能测试-jmeter聚合报告
- Jmeter聚合报告
- 聚合报告指标
- 重点关注的性能指标:
- HTML测试报告
- 分布式总结
- jmeter直连数据库,使用jdbc(mysql)
- 逻辑控制器
- 一、IF控制器
- 三、ForEach控制器
- 定时器
- 一、同步定时器(集合点)——模拟高并发抢购场景
- 二、常数吞吐量定时器 —— 精确控制请求速率
- 分布式压力测试
- 测试报告
- 实践是检验真理的唯一标准
Jmeter聚合报告
聚合报告(Aggregate Report) 是 JMeter 中最常用、最重要的 监听器(Listener) 之一,它会在性能测试结束后,汇总并展示所有请求的统计信息,以表格形式呈现关键性能指标,帮助测试人员快速分析系统性能表现。
聚合报告指标
列名(中文) | 列名(英文) | 说明 |
---|---|---|
Label | Label | 请求的名称,通常是取样器(Sampler)的名称,如 “首页请求”、“登录接口” |
# Samples | Samples | 该请求总共发送的样本数(即请求次数) |
Average | Average | 平均响应时间(单位:毫秒),所有成功请求的平均处理时间 |
Min | Min | 最小响应时间(单位:毫秒),所有请求中最快的响应时间 |
Max | Max | 最大响应时间(单位:毫秒),所有请求中最慢的响应时间 |
90% Line | 90% Line | 90% 百分位响应时间,表示 90% 的请求响应时间都小于等于该值,是重要的用户体验指标 |
95% Line | 95% Line | 95% 百分位响应时间,同上,更严格的性能标准 |
99% Line | 99% Line | 99% 百分位响应时间,最严格的用户体验指标之一 |
Std. Dev. | Std Dev | 响应时间的 标准偏差,数值越小表示响应时间越稳定、波动越小 |
Error % | Error % | 错误率,请求失败的百分比(如连接超时、HTTP 5xx/4xx 错误),越低越好,理想为 0% |
Throughput | Throughput | 吞吐量,单位通常是 请求/秒(requests/sec) 或 KB/sec,表示服务器每秒处理的请求数,反映系统处理能力 |
Received KB/sec | Received KB/sec | 平均每秒从服务器接收的数据量(KB/秒),衡量带宽使用 |
Sent KB/sec | Sent KB/sec | 平均每秒向服务器发送的数据量(KB/秒) |
重点关注的性能指标:
响应时间
- 观察当前的最大最小值的波动范围
- 如果波动范围不大,以平均响应时间作为最终的性能响应时间结果
- 如果波动范围很大,以90%(经验)的响应时间作为最终性能响应时间结果
注意事项
- 1、不要在测试运行时使用 GUI 模式 + 聚合报告:会影响测试结果,推荐使用命令行模式运行测试,事后分析
- 2、合理设置测试时长和并发量:确保测试结果具有代表性
- 3、多次测试取平均值:避免偶发性网络或环境问题影响判断
HTML测试报告
执行该命令是必须在jmx文件目录下
常用命令:
jmeter -n -t [jmx file] -l [result file] -e -o [html report folder]eg: jmeter -n -t hello.jmx -l result.jtl -e -o ./report
参数描述:
- -n: 非GUI模式执行JMeter
- -t [jmx file]: 测试计划保存的路径及.jmx文件名, 路径可以是相对路径也可以是绝对路径
- -l [result file]: 保存生成测试结果的文件, jtl文件格式
- -e: 测试结束后, 生成测试报告
- -o [html report folder]: 存放生成测试报告的路径, 路径可以是相对路径也可以是绝对路径
注意: result.jtl和report会自动生成, 如果在执行命令时result.jtl和report已存在, 必须先用删除, 否则在运行命令时就会报错
此处我们可以配合sh文件实现脚本参数动态配置
后续我们采用nginx反向代理服务器放在云服务器,sh文件自动调用jmx 的方式,暂时先做些简单的,后续我会和大家分享性能测试真实业务场景
分布式总结
jmeter直连数据库,使用jdbc(mysql)
逻辑控制器
以下是您提供的 JMeter 控制器相关内容,整理为 布局美观、排版清晰的 Markdown 格式,包含 IF控制器、循环控制器、ForEach控制器 三部分,结构分明、重点突出,适合用于技术文档、笔记或演示材料:
一、IF控制器
功能
用于条件判断,仅当条件满足时,才会执行后续脚本。
⚠️ 注意:JMeter 中 IF 控制器 没有 ELSE 分支。如果需要实现多分支逻辑,需通过编写多个 IF 语句实现。
参数
•判断条件:支持两种写法:
•直接判断(示例):“name==”{baidu}"(需根据实际语法调整,但非官方推荐方式)
•推荐使用 JEXL3 函数(更灵活、可读性更强,官方推荐方式)。
二、循环控制器
功能
控制脚本语句循环执行多次,适用于需要对特定请求或代码块重复执行的场景。
参数
•循环次数:用户自定义的整数,指定该控制器下的子节点请求需要重复执行的次数。
与线程组循环次数的对比
•线程组的循环次数:对线程组内的所有子节点请求统一控制(即所有请求共享相同的循环次数)。
•循环控制器的循环次数:控制粒度更细,仅针对该控制器下的子节点请求生效。
📌 关键规则:若线程组的循环次数为 m,循环控制器的循环次数为 n,则循环控制器子节点的请求实际运行总次数 = m × n。
(例如:线程组循环 3 次,循环控制器设置循环 2 次,则该控制器下的每个请求会执行 3×2=6 次)
三、ForEach控制器
功能
类似于编程语言中的 For 循环,需与“用户定义的变量”或“正则表达式提取器”配合使用,用于循环读取这些组件中提取的参数数据(如从接口响应提取的一组值),并逐一遍历处理。
用户定义的变量(关联前提)
当通过“用户定义的变量”提供数据时,其参数名需遵循固定格式:
•格式要求:固定前缀 + 连续的数字后缀(例如:param1, param2, param3…)。
这种格式用于标识一组有序的参数,便于 ForEach 控制器按顺序读取。
引用时的配置项(关键参数)
在 ForEach 控制器的配置界面中,需设置以下信息:
1.参数名的前缀:用户定义的变量或提取器中参数的共同前缀(例如:若参数名为 param1, param2,则前缀为 param)。
2索引号的范围:
•最小值(不包含):循环起始的索引数字(不包含该值,例如填 1表示从 param1开始)。
•最大值(包含):循环结束的索引数字(包含该值,例如填 3表示到 param3结束)。
🔴 注:图中“索引号的最小(不包含)、最大值(包含)”被黄色圆圈标记,为核心需关注的配置项。
3.循环读取的变量值要保存的新的参数名:每次循环读取到的参数值,会被保存到一个新的变量中(用户自定义名称,例如 currentParam),后续请求可通过该新变量名引用当前循环的值。
定时器
核心指标:吞吐量=QPS * 60/虚拟用户数
一、同步定时器(集合点)——模拟高并发抢购场景
功能说明
同步定时器(Synch Timer)是 JMeter 中用于 模拟绝对并发 的核心元件,常用于电商大促(如双 11 抢购、抢红包)等需要 大量用户在同一时刻发起请求 的测试场景。其核心作用是:
当并发请求数未达到预设阈值时,暂缓请求发送;一旦达到目标并发数,所有请求将同时发出,形成瞬时高并发压力。
配置参数
参数名称 | 说明 | 注意事项 |
---|---|---|
并发数(Expected Number of Users) | 期望的 绝对并发用户数(即同时发起请求的用户数量) | 需根据测试目标设置(例如:模拟 1000 人同时抢红包,则填写 1000 ) |
超时时间(Timeout in milliseconds) | 当等待时间超过该值时,即使未达到预设并发数,也会 立即发送已到达的请求 | 必须设置!但建议不要过短(例如至少 1000ms ),否则可能因短暂网络延迟导致请求提前发送,无法形成真正的并发效果 |
📌 典型应用:在抢购测试中,通过设置并发数为目标用户量(如 1 万),并合理配置超时时间,可模拟真实用户集中点击抢购按钮的场景,验证系统在高并发下的稳定性。
二、常数吞吐量定时器 —— 精确控制请求速率
这个配置只能控制请求的发送速率,不能控制发送时间;而且Jmeter按照这个速率发送请求后,不能证明性能是否有问题。
功能说明
常数吞吐量定时器(Constant Throughput Timer)用于 精确控制测试脚本的吞吐量(即单位时间内发送的请求数),确保测试过程以 固定的速率 发送请求,常用于模拟稳定的业务负载(如每分钟处理 3000 笔订单)或验证系统在不同吞吐量下的性能表现。
核心配置与公式
- 吞吐量计算逻辑
•目标吞吐量单位:每分钟请求数(Requests/Minute),需根据业务需求换算。
•关键公式:
•若需达到 QPS(每秒请求数),则目标吞吐量 = QPS × 60(例如:目标 5 QPS → 填写 5 × 60 = 300)。
•图片中公式 () * 10 = QPS为示例逻辑(实际需根据上下文调整,核心是明确 QPS 与分钟级吞吐量的换算关系)。
•吞吐量速率(单位:分钟) = QPS × 60(明确分钟级吞吐量与 QPS 的转换关系)。
配置参数
参数名称 | 说明 | 设置建议 |
---|---|---|
目标吞吐量(Target Throughput (in samples per minute)) | 核心参数!设置每分钟需要处理的请求数(单位:Samples/Minute ) | 根据目标 QPS(每秒请求数) 换算: 例如目标为 10 QPS → 填写 10 × 60 = 600 (即每分钟 600 次请求)。 |
计算吞吐量的方式(Calculate Throughput based on) | 指定吞吐量的计算范围(如基于当前线程、所有线程等) | 根据测试场景选择: - 默认 “仅当前线程” 适合单用户/单线程场景; - 其他选项(如“所有线程”)适用于多线程协同的复杂场景。 |
📌 使用场景举例:若需模拟系统每秒处理 10 个请求(10 QPS),则目标吞吐量应设置为 10 × 60 = 600(每分钟 600 个请求);若需每分钟处理 3000 个订单,则直接填写 3000。
分布式压力测试
应用场景:在测试时,一台测试机无法模拟要求的负载量,使用多台测试机进行模拟
•原理:一台控制机和多台代理机
•控制机发布请求指令给代理机
•代理机向服务器发送请求,收到服务器返回的响应
•控制机会对所有代理机的测试数据进行汇总和统计