一、性能测试概要
1.1 性能测试工具
前言
性能测试工具的核心作用是 模拟多用户并发、采集性能指标、生成测试报告,不同工具的特点、适用场景不同。
2.1 主流性能测试工具对比
| 工具名称 | 核心特点 | 适用场景 | 优势 | 劣势 |
|---|---|---|---|---|
| JMeter(Apache) | 开源免费、功能强大、支持多协议、可扩展 | Web/APP接口测试、中小型项目并发测试 | 免费、社区活跃、插件丰富、易上手,适合中小团队 | 万级以上高并发场景性能略弱,GUI模式占用资源多 |
| LoadRunner(Micro Focus) | 商业工具、功能全面、支持多协议、监控能力强 | 大型企业级项目、复杂高并发场景 | 稳定性强、高并发支持好、监控全面 | 收费昂贵、上手难度高 |
| Locust(Python) | 开源、基于Python、轻量级、支持分布式 | 高并发场景、Python技术栈项目(有Python基础可尝试) | 轻量、高并发支持好、灵活度高 | 需掌握Python基础,GUI功能简单,报告不够直观 |
| Gatling(Scala) | 开源、基于Scala、高性能、支持实时监控 | 高并发场景、Scala/Java技术栈项目 | 性能优异、实时监控强、报告清晰 | 需掌握Scala基础,上手难度中等,社区活跃度低于JMeter |
2.2 工具选择方法
工具选择核心原则:贴合学习/项目需求、匹配自身技术能力、控制学习成本,具体步骤如下:
- 明确测试需求 :确定是接口性能测试,明确并发量(千级以内)、测试场景(如简单并发、负载测试);
- 匹配技术能力 :熟悉Java,优先选择JMeter;有Python基础可尝试Locust,无需学习复杂的商业工具;
- 考虑学习成本 :优先选择开源、社区活跃、教程丰富的工具(JMeter),降低学习难度,适合自主练习;
- 结合场景选择 :中小型项目、接口测试→ JMeter;高并发、Python技术栈 → Locust。
1.1 性能测试相关术语
前言
性能测试的核心是用数据说话 ,需先掌握核心术语,才能明确测试目标、判断测试是否通过。
3.1 核心术语
- 响应时间(Response Time) :从用户发起请求到收到服务器响应的总时间,单位为毫秒(ms);核心观测点:平均响应时间、90%响应时间(P90)、95%响应时间(P95)。
- 并发用户数 :同一时间向服务器发起请求的用户数量,≠ 实际在线用户数(在线用户可能不发起请求)。
- 吞吐量(Throughput) :单位时间内服务器处理的请求数量,单位为QPS(每秒查询数)、TPS(每秒事务数);核心观测点:平均吞吐量、峰值吞吐量。
- 并发量 :服务器同时处理的请求数量,与并发用户数相关但不等同(一个用户可能同时发起多个请求)。
- 资源利用率 :服务器CPU、内存、磁盘IO、网络IO的使用率,核心观测点:峰值利用率、平均利用率。
- 性能瓶颈 :导致系统性能下降的关键环节(如CPU过高、内存泄漏、数据库慢查询)。
- 负载测试 :逐步增加并发用户数,观察系统性能变化,找到系统最大处理能力。
- 压力测试 :超过系统预期负载,持续运行测试,观察系统是否崩溃、能否恢复。
- 稳定性测试 :预期负载下持续运行一段时间(如24小时),观察系统是否稳定、有无异常。
3.2 性能测试通过标准
通过标准无统一模板,需结合业务需求、用户体验、系统设计指标确定,核心原则:“满足业务正常运行,用户体验良好,系统稳定可靠”,通用标准如下:👇
3.2.1 响应时间标准(用户体验核心)
行业通用标准:
- 普通接口 (如查询、列表):平均响应时间 ≤ 500ms,P95响应时间 ≤ 1000ms
- 核心接口 (如登录):平均响应时间 ≤ 300ms,P95响应时间 ≤ 800ms
- 复杂接口 (如大数据查询):平均响应时间 ≤ 1000ms,P95响应时间 ≤ 2000ms
- 无超时情况 (响应时间 ≤ 5000ms,超时率为0)
3.2.2 吞吐量标准(系统处理能力)
参考标准: 👇
- 中小型项目(如校园系统):峰值QPS ≥ 200,平均QPS ≥ 100
- 电商类练习项目:峰值QPS ≥ 500,平均QPS ≥ 200
- 吞吐量稳定,波动范围 ≤ 10%
3.2.3 资源利用率标准(系统稳定性)
服务器资源利用率合理范围:
- CPU利用率 :峰值 ≤ 80%,平均 ≤ 60%(超过80%易出现卡顿);
- 内存利用率 :峰值 ≤ 85%,无内存泄漏(持续运行后内存不持续增长);
- 磁盘IO利用率 :峰值 ≤ 70%,无磁盘读写异常;
- 网络IO: 无明显瓶颈,带宽利用率 ≤ 75%。
3.2.4 稳定性标准(长期运行能力)
- 预期负载下,持续运行8-24小时,系统无崩溃、无异常报
- 事务成功率 ≥ 99.9%(
核心事务成功率 ≥ 99.99%) - 瞬时高负载后,系统能快速恢复正常,无持续卡顿
二、性能测试结构体系
前言
(一)理论介绍
1. 性能测试整体结构体系
性能测试是通过模拟多用户并发、高并发流量、长时间运行等方式,检验软件系统在不同压力下的运行表现,判断系统是否满足业务性能需求。完整结构体系分为四层:
- 测试目标层:明确性能指标,如并发用户数、响应时间、吞吐量(TPS/QPS)、错误率、服务器资源利用率等。
- 测试类型层:基准测试、负载测试、压力测试、浸泡测试(稳定性测试)、并发测试、容量测试。
- 执行流程层:需求分析→测试计划→脚本开发→负载设计→测试执行→数据监听→结果分析→瓶颈定位。
- 支撑工具层:压力生成工具、协议模拟工具、服务器监控工具、日志分析工具、报告生成工具。
2. 性能测试工具核心组成与功能
通用性能测试工具一般由四大模块构成:
- 脚本录制/开发模块:模拟用户业务操作,生成可重复执行的测试脚本,支持协议解析、参数化、关联、断言。
- 负载生成引擎:根据场景配置,模拟大量虚拟用户(Vuser),向被测系统发起持续请求。
- 实时监控模块:采集客户端、应用服务器、数据库、中间件的性能指标。
- 测试分析与报告模块:统计聚合数据,生成图表,定位性能瓶颈,输出测试结论。
3. 主流工具对比(课堂重点)
| 工具名称 | 开源/商业 | 核心功能 | 教学与企业应用场景 |
|---|---|---|---|
| Apache JMeter | 开源免费 | 支持多协议、分布式压测、插件扩展 | 接口/Web/数据库压测 |
| LoadRunner | 商业 | 协议全、报告专业、企业级管控 | 金融、电信大型项目 |
| k6 | 开源 | JS语法、轻量、适合DevOps | 微服务、接口自动化压测 |
| Gatling | 开源 | 高并发、基于Scala、报告美观 | 高吞吐Web系统压测 |
案例实操:JMeter工具组成与功能实操
实操目标
熟悉JMeter界面结构,理解测试计划、线程组、取样器、配置元件、监听器之间的层级关系。
实操步骤
- 环境准备 1️⃣
- 安装 JDK 1.8 及以上版本(JDK17也可以),配置环境变量 JAVA_HOME。
- 下载 apache-jmeter-5.6.x,可以Apache Jmeter官网下载,地址:http://jmeter.apache.org/download_jmeter.cgi
- 解压后运行 bin/jmeter.bat(Windows)或 jmeter(Linux)。
- 双击即可运行,但是有两点注意:1.启动速度比较慢,要耐心等待;2. 启动后黑窗口不能关闭,否则Jmeter也跟着关闭了




认识JMeter核心组件功能 2️⃣
- 测试计划(Test Plan)
- 作用:整个性能测试任务的根容器,是所有组件的“总入口”,负责管理脚本、线程组、配置元件等所有内容。
- 关键说明:每个测试任务对应一个测试计划,可设置全局参数、用户定义变量,所有后续操作(添加线程组、取样器)都必须在测试计划下进行,相当于“整个测试项目的总纲领”。

image 线程组(Thread Group)
- 作用:JMeter负载生成的核心组件,模拟真实用户的并发场景,每个线程代表一个独立的虚拟用户。
- 核心配置参数:
- 线程数:模拟的并发用户数量(如100线程=100名同时操作的用户);
- Ramp-Up时间:所有线程启动完成的时间(避免瞬间加压导致测试失真);
- 循环次数:单个线程重复执行操作的次数(可设置为具体次数或无限循环,用于稳定性测试)。
- 适用场景:所有性能测试场景,是负载设置的核心,笔记中每个实操案例(登录、注册、社保查询)都需先配置线程组。

image
取样器(Sampler)
- 作用:模拟用户的具体操作,向被测系统发送请求,是脚本的“核心执行单元”,不同协议对应不同取样器。
- 重点取样器及适用场景:
- HTTP请求取样器(最常用):对应HTTP/HTTPS协议,用于网站、APP接口测试(如登录、注册、社保查询接口);
- TCP取样器:对应TCP协议,用于物联网设备、客户端软件与服务器的通信测试;
- JDBC请求取样器:对应JDBC协议,用于数据库性能测试(执行SQL语句);
- FTP请求取样器:对应FTP协议,用于文件上传、下载性能测试。
- 关键说明:取样器需依赖线程组,无法单独运行,每个取样器对应一个具体的用户操作(如“登录请求”取样器=用户点击登录)。

image
- 测试计划(Test Plan)
Jmeter辅助组件(为取样器服务)
- 监听器(Listeners)
- 作用:实时捕捉测试数据、查看测试结果,分为“请求级监听”和“系统级监听”,是分析性能瓶颈的核心依据。
- 重点监听器:
- 聚合报告:统计整体性能数据,重点关注平均响应时间、90%响应时间、错误率、吞吐量(企业测试报告核心数据);
- 查看结果树:查看每个请求的详细信息(请求内容、响应内容、响应状态码),用于脚本调试、错误排查;
- PerfMon Metrics Collector(服务器监控插件):实时监测服务器资源占用(CPU、内存、磁盘IO、网络带宽),避免忽略服务器承载能力;
- 汇总图:直观展示吞吐量、响应时间的变化趋势,快速判断负载增加时系统性能的变化。
- 配置元件(Config Elements)
- 作用:辅助取样器配置,提供请求所需的基础信息,减少重复配置,提升脚本复用性。
- 重点配置元件:
- HTTP信息头管理器:统一配置HTTP请求的请求头(如Content-Type: application/json),避免每个HTTP取样器重复设置;
- CSV Data Set Config:实现参数化(如多账号登录、多手机号注册),读取外部CSV文件中的数据,动态替换请求参数;
- JDBC Connection Configuration:配置数据库连接信息(驱动、URL、用户名、密码),供JDBC取样器调用,实现数据库连接;
- FTP Request Defaults:配置FTP服务器的基础信息(地址、用户名、密码),简化多个FTP取样器的配置。
- 前置/后置处理器(Pre/Post Processors)
- 作用:辅助脚本执行,处理请求发送前、响应接收后的逻辑,重点解决“参数关联”问题。
- 重点处理器:
- JSON提取器:从HTTP响应中提取关键数据(如登录后的Token),供后续请求使用(如查询个人信息需携带Token);
- 正则表达式提取器:与JSON提取器功能类似,适用于非JSON格式的响应(如HTML页面、普通文本响应);
- 用户定义的变量:设置全局变量(如服务器IP、端口),方便脚本统一修改,提升可维护性。
- 断言(Assertions)
- 作用:验证请求是否正常执行、响应是否符合预期,是判断脚本有效性、测试结果达标的核心,避免“请求发送成功,但业务失败”(如注册请求返回“注册成功”,但数据库未写入数据)。
- 重点断言:
- 响应断言:验证响应文本、响应状态码(如200表示请求成功)、响应头是否符合预期(如登录请求响应包含“登录成功”);
- JSON断言:专门用于JSON格式的响应,验证JSON字段的值(如$.code == 200,确保接口返回正常);
- 持续时间断言:验证请求的响应时间是否不超过预设阈值(如响应时间≤1秒),直接判断性能是否达标。
- 插件组件(补充组件,提升JMeter功能)
- 作用:JMeter默认组件无法满足所有场景,需通过插件扩展功能.
- 重点插件:
- Stepping Thread Group(阶梯线程组):实现阶梯式加压(逐步增加线程数),模拟真实用户流量波动(如大促期间用户陆续涌入);
- ServerAgent:配合PerfMon Metrics Collector,实现服务器资源的实时监控;
- WebSocket插件:支持WebSocket协议脚本开发(如即时通讯、直播弹幕测试);
- Redis Data Set插件:支持Redis缓存协议脚本开发(如缓存读写性能测试)。
- 监听器(Listeners)
基础验证实操 3️⃣
- 新建测试计划 → 添加线程组 → 添加HTTP取样器 →监听→ 添加察看结果树。
- 访问百度首页(
www.baidu.com,协议http,端口80,路径/)。 - 运行脚本,观察请求是否成功,理解各组件作用。

三、性能测试脚本开发
前言
(一)理论介绍
1. HTTP协议基础
HTTP是无状态的应用层协议,性能测试中主要模拟:
- 请求方法:GET、POST、PUT、DELETE
- 请求结构:请求行、请求头、请求体
- 响应结构:响应行、响应头、响应体
- 会话保持:Cookie(浏览器)、Session(服务器)、Token(令牌)
2. HTTP性能脚本核心技术
- 参数化:使用不同账号、参数执行同一业务,避免数据重复。
- 关联:从上一个请求的响应中提取数据(如Token、SessionID)供后续请求使用。
- 断言:验证业务是否执行成功,保证压测数据有效。
- 思考时间:模拟用户真实操作间隔,更贴近真实场景。
案例实操:HTTP协议登录+查询业务脚本开发
业务场景
模拟用户先登录系统,再查询个人信息,完成完整业务链路脚本。
实操步骤
- 准备jar包,启动项目。

- 创建线程组
- 线程数:10
- 启动时间(Ramp-Up Period):5秒
- 循环次数:2

- 添加HTTP信息头管理器
- 配置:Content-Type: application/json
- 作用:统一管理请求头,避免每个请求重复配置。


- 编写登录请求(POST)
- 服务器名称:localhost
- 端口:8080
- 路径:/api/user/login
- 请求方法:POST
- 请求体参数:
{ "username": "${username}", "password": "123456" }

- CSV参数化配置
- 添加 CSV Data Set Config
- 文件名:user.csv
- 变量名称:username
- 编码:UTF-8
- 文件内容每行一个用户名,实现多账号登录。
- 步骤:选中线程组→右键 → 添加 → 配置元件 → CSV Data Set Config

- 添加JSON提取器获取Token
- 应用于:登录请求
- 引用名称:token
- JSON Path表达式:$.data.token
- 作用:提取登录返回的令牌,用于鉴权。
- 步骤:选中你的 登录请求(HTTP Request)→右键 → 添加 → 后置处理器 → JSON 提取器 = 英文:Add → Post Processors → JSON Extractor

- 添加查询个人信息请求
- 路径:/api/user/info
- 请求头添加:Authorization: Bearer $
- 实现登录态关联。
- 步骤:选中线程组→右键 → 添加 → HTTP Request


- 添加断言
- 响应断言:响应码为200
只要请求返回的 HTTP 状态码不是 200(比如 401、404、500),JMeter 就会标记这个请求为失败,在察看结果树里标红,一眼就能看出问题。
- JSON断言:$.code == 0 或 $.msg包含“成功”
- 响应断言:响应码为200


接下来复制上面2个断言到查询个人信息请求中,即可完成断言配置。

- 添加 察看结果树和汇总报告,运行脚本,查看结果。
- 步骤:选中线程组→右键 → 添加 → 监听器 → 汇总报告、察看结果树

- 运行调试
- 使用察看结果树查看请求与响应,确认参数化、关联、断言均正常。

- 使用察看结果树查看请求与响应,确认参数化、关联、断言均正常。
四、性能测试负载与监听
前言
理论介绍
1. JMeter负载生成机制
负载即向服务器施加的压力大小,JMeter通过线程组实现负载控制:
- 普通线程组:固定并发用户数。
- 阶梯线程组(Stepping Thread Group):逐步加压,观察系统拐点。
- 终极线程组:灵活设置高低负载,模拟真实波浪式流量。
- 分布式压测:多台压力机协同施压,支持更高并发。
2. 性能监听体系
监听分为三类:
- 请求级监听:响应时间、吞吐量、错误率、成功率。
- 系统级监听:服务器CPU、内存、磁盘I/O、网络带宽。
- 应用级监听:JVM GC、线程池、数据库连接数、慢SQL。
案例实操:负载加压配置 + 全方位监听
实操目标
实现阶梯式加压,并监听请求指标与服务器资源。
实操步骤
1. 安装插件
- 安装 JMeter Plugins Manager
- 安装:Stepping Thread Group、PerfMon Server Agent、Custom Metrics
- 打开 Plugins Manager,切换到 Available Plugins 标签,搜索并勾选以下 3 个插件:
- Stepping Thread Group(阶梯线程组,用于阶梯式加压)
- PerfMon (Server Agent & Metrics Collector)(服务器资源监控)
- Custom Thread Groups(兼容阶梯线程组,部分版本需安装)
- 点击 Apply Changes and Restart JMeter,等待重启完成




2. 配置阶梯负载场景
- 初始线程:10
- 每30秒增加:10个线程
- 最大线程数:100
- 持续运行时间:10分钟
- 线程退出时间:10秒
3. 新建测试计划,添加阶梯线程组
- 打开JMeter,右键「测试计划」→
Add > Threads (Users) > jp@gc - Stepping Thread Group - 严格按要求填写参数(完全匹配你的配置):
界面参数 填写值 含义 This group will start 10初始线程数10 First, wait for 0启动前不等待,立即启动 Then start 0首次不额外启动线程 Next, add 10每次增加10个线程 threads every 30每30秒加压一次 using ramp-up 0新增线程立即启动(无延迟) Then hold load for 600达到最大线程后持续运行10分钟(10×60=600秒) Finally, stop 10每次停止10个线程 threads every 1每1秒停一批,10秒内全部退出 自动计算:初始10 + 每30秒加10,加9次 → 100个最大线程,完全符合要求
4. 添加接口请求(核心取样器)
- 右键「阶梯线程组」→
Add > Sampler > HTTP Request - 填写接口信息:
配置项 填写内容 协议 http服务器名称/IP 你的后端服务IP(本地填 localhost)端口号 8080(和后端一致)方法 GET路径 /api/demo/slow?delay=100注意:
delay=100必须完整写在路径里,不要漏参数
4. 添加断言(校验接口正确性)
右键「HTTP请求」→ Add > Assertions > 响应断言,配置:
- Response Field to Test:选择
Response Code - Pattern Matching Rules:选择
Equals - Patterns to Test:添加
200
作用:确保接口始终返回200,错误率统计准确

5. 添加监控监听器(全量指标采集)
右键「测试计划/线程组」→ Add > Listener,依次添加:
(1)聚合报告(核心性能指标看板)
- 作用:统计平均响应时间、90%响应时间、TPS、错误率,直接对应你的验收标准
- 无需额外配置,运行后自动生成数据

(2)PerfMon Metrics Collector(服务器资源监控)
- 点击「Add Row」,填写服务器信息:
- Host/IP:被测服务器IP(本地填
127.0.0.1) - Port:
4444(Agent默认端口) - Metric to collect:依次添加
CPU、Memory
- Host/IP:被测服务器IP(本地填
- 保存配置,运行时实时监控服务器资源

(3)汇总图(趋势可视化)
- 作用:直观展示响应时间、吞吐量随线程数的变化趋势,验证阶梯加压效果
- 无需额外配置,运行后自动生成图表

总结
课堂作业
压测执行(标准非GUI模式,避免性能干扰)
1. 保存脚本
将配置好的脚本保存为 slow_api_perf_test.jmx,放在JMeter bin 目录下
2. 执行压测命令
打开终端/CMD,进入JMeter bin 目录,执行:
# 非GUI模式执行压测,生成结果文件
jmeter -n -t slow_api_perf_test.jmx -l slow_result.jtl- 参数说明:
-n:非GUI模式(生产级标准,避免JMeter本地资源占用影响压测)-t:指定脚本路径-l:指定结果文件路径(自动生成,无需提前创建)
- 执行成功:终端打印
end of run,表示压测完成(总时长约16分钟:4分30秒加压+10分钟持续+10秒退出)


生成HTML性能报告(可视化分析)
压测结束后,执行以下命令生成完整报告:
# 基于结果文件生成HTML报告,输出到report文件夹
jmeter -g slow_result.jtl -o ./slow_report注意:
slow_report文件夹必须为空或不存在,否则会报错


报告核心查看项
- Overview(概览页)
- 直接查看:平均响应时间、错误率、CPU使用率
- 对照标准:
- 平均响应时间 < 500ms ✅
- 错误率 < 0.1% ✅
- CPU < 80% ✅
- Response Time Over Time(响应时间趋势)
- 观察:随线程数从10→100,响应时间是否平稳,无突增
- 正常:响应时间稳定在100ms左右(符合delay=100),线程增加后轻微上涨
- 异常:响应时间突增到500ms以上,说明系统出现瓶颈
- PerfMon Metrics(服务器资源)
- 查看CPU曲线:是否随线程数增加线性上升,持续阶段稳定在80%以下
- 异常:CPU满负载(100%),说明服务器计算资源不足
- Error Rate Over Time(错误率趋势)
- 正常:错误率始终为0或<0.1%
- 异常:错误率飙升,说明服务出现雪崩、超时等问题
五、性能测试常用脚本开发
前言
(一)理论介绍
JMeter支持几乎所有常用协议,不同协议脚本结构相似,仅取样器与配置元件不同:
- HTTP/HTTPS:Web、接口、小程序、APP后端
- JDBC:数据库压测
- WebSocket:即时通讯、直播弹幕、推送服务
- FTP:文件上传下载服务器
- Redis:缓存读写性能
- Dubbo:微服务接口
- Kafka/MQ:消息队列生产消费性能
(二)案例实操:常用多协议脚本完整开发
1. JDBC MySQL 脚本开发
- 拷贝 mysql-connector-java.jar 到 JMeter/lib 目录。
- 添加 JDBC Connection Configuration:
- Variable Name:mysqlConn
- Driver Class:com.mysql.cj.jdbc.Driver
- URL:jdbc:mysql://localhost:3306/testdb
- 用户名/密码
- 添加 JDBC Request:
- Variable Name:mysqlConn
- Query:select * from user where id =?
- 参数值:$
- 添加断言与监听器,执行压测。
2. WebSocket 脚本开发
- 安装 WebSocket 插件。
- 添加 WebSocket Open Connection:
- ws://localhost:8080/ws/chat
- 添加 WebSocket Sampler 发送消息。
- 添加 WebSocket Close Connection。
- 监听连接数、消息延迟、丢包率。
3. FTP 文件传输脚本开发
- 添加 FTP Request 取样器。
- 配置FTP服务器地址、用户名、密码。
- 选择操作:上传文件 / 下载文件。
- 设置本地文件与远程文件路径。
- 监听传输速度、成功率、并发文件操作性能。
4. Redis 脚本开发
- 安装 Redis Data Set 插件。
- 添加 Redis Sampler。
- 配置 Redis 服务器地址与端口。
- 操作类型:set、get、hset、hget。
- 执行压测,监控缓存读写响应时间与QPS。
六、数据库 JDBC 性能测试专题
前言
(一)理论介绍
1. JDBC 性能测试负载机制
JDBC 性能测试的负载,核心是模拟多线程并发执行 SQL,对数据库施加查询/写入压力,JMeter 同样通过线程组实现负载控制:
- 普通线程组:固定并发连接数,执行基准压测。
- 阶梯线程组:逐步增加数据库并发访问,观察连接数、SQL 响应拐点。
- 终极线程组:模拟波浪式读写流量,贴近真实业务峰值。
- 分布式压测:多台压测机同时发起 JDBC 请求,支持更高数据库并发压力。
2. 数据库性能监听体系
数据库压测监听分为三类:
- 请求级监听:SQL 执行响应时间、查询吞吐量 QPS、事务成功率、错误率。
- 系统级监听:数据库服务器 CPU、内存、磁盘 I/O、网络带宽、磁盘使用率。
- 数据库应用级监听:连接池占用、活跃连接数、慢查询数量、锁等待、事务回滚率、索引命中率。
(二)案例实操:JDBC MySQL 压测负载与监听
实操目标
实现数据库阶梯式加压压测,完成 JDBC 脚本开发,并对 SQL 执行与数据库服务器进行全方位监听。
实操步骤
我给你整理一套最清晰、能直接照着做的完整步骤,完全按你这份文档来,一步不缺、一句废话没有👇
一、准备工作
- 放 MySQL 驱动包
把mysql-connector-java-x.x.xx.jar复制到:JMeter\lib\ext或JMeter\lib
然后重启 JMeter。

确保插件装好
- 插件管理器装好:
Custom Thread Groups(阶梯线程组) - 插件装好:
PerfMon Metrics Collector
- 插件管理器装好:
服务器端启动监控
解压ServerAgent.zip- Windows 双击
startAgent.bat - Linux 运行
./startAgent.sh
看到端口4444启动就 OK。
- Windows 双击
二、新建测试计划
- 打开 JMeter
- 新建测试计划 → 保存为
jdbc_db_test.jmx
三、添加阶梯线程组(加压配置)
右键测试计划 → 添加 → 线程(Users)
→ jp@gc - Stepping Thread Group
按你要求填写:
- This group will start:10
- First, wait for:0
- Then start:0
- Next, add:10 threads every 30 seconds
- using ramp-up:0
- Then hold load for:600 秒(=10分钟)
- Finally, stop:10 threads every 1 秒

四、配置 JDBC 连接(核心)
右键阶梯线程组 → 添加 → 配置元件
→ JDBC Connection Configuration
填写:
- Variable Name:mysqlConn
- Driver Class:com.mysql.cj.jdbc.Driver
- Database URL:
jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=Asia/Shanghai - Username:root
- Password:你的数据库密码
- Max Number of Connections:100(跟最大线程一致)


五、添加 JDBC Request(执行SQL)
右键线程组 → 添加 → 取样器 → JDBC Request
配置:
- Variable Name:mysqlConn(必须跟上面一样)
- Query Type:Select Statement
- SQL Query:
select * from student where id = ? - Parameter values:
${__Random(1,20)} - Parameter types:INTEGER


六、添加监听器(看性能指标)
在线程组下添加这些:
- 聚合报告(看响应时间、QPS、错误率)
- 察看结果树(调试看SQL是否成功)
- 汇总图(看趋势)

七、添加服务器监控(PerfMon)
测试计划右键 → 添加 → 监听器
→ jp@gc - PerfMon Metrics Collector
点 Add Row 加4个指标:
- CPU
- Memory
- Disk I/O
- Network
IP 填:127.0.0.1
端口:4444

八、非GUI运行压测
打开 cmd,进入 JMeter/bin 目录:
jmeter -n -t jdbc_db_test.jmx -l jdbc_result.jtl

summary + 【总请求数】 in 【时间】 = 【QPS】/s Avg: 【平均响应时间】 Min: 【最小】 Max: 【最大】 Err: 【错误数(错误率)】 Active: 【活跃线程数】 Started: 【启动线程数】 Finished: 【完成线程数】

九、生成HTML报告
jmeter -g jdbc_result.jtl -o ./jdbc_report打开 jdbc_report/index.html 看图表。

十、结果判断标准
- SQL 平均响应时间 < 200ms
- 错误率 < 0.1%
- 数据库服务器 CPU < 80%
出现以下情况就是数据库瓶颈:
- SQL 响应突然飙升
- CPU 持续 100%
- 数据库连接打满
- 慢查询暴增
