1. 压力测试基础
1.1 压力测试的定义
压力测试(Stress Testing)是一种通过向系统施加超出正常预期负载的测试方法,旨在观察系统在极端条件下的行为表现。其核心目标是找出系统的崩溃点、瓶颈以及恢复能力。
核心定义:压力测试 = 在超负载条件下,验证系统的稳定性、可靠性与恢复能力。
1.2 压力测试的目的
- 发现系统瓶颈:定位CPU、内存、磁盘I/O、网络带宽或数据库连接池等资源的上限。
- 验证容错与恢复:测试系统在崩溃后能否自动恢复,以及恢复时间(RTO)是否符合要求。
- 评估稳定性:确保系统在持续高压下不出现内存泄漏、死锁或数据不一致。
- 确定最大承载能力:明确系统在保证SLA(服务等级协议)的前提下,能承受的最大并发用户数或请求量。
- 为容量规划提供依据:根据压力测试结果,预测未来业务增长所需的资源投入。
1.3 压力测试与负载测试的区别
很多从业者容易混淆压力测试与负载测试,二者在目标、方法和关注点上存在本质差异。下表从多个维度进行对比:
| 对比维度 | 压力测试 | 负载测试 |
|---|---|---|
| 核心目标 | 寻找系统崩溃点与恢复能力 | 验证系统在预期负载下的性能表现 |
| 负载特征 | 持续增加负载,直至系统失效 | 模拟正常或峰值业务负载 |
| 关注指标 | 崩溃阈值、错误率、恢复时间 | 响应时间、吞吐量、资源利用率 |
| 典型场景 | 双11秒杀、突发流量冲击 | 日常业务高峰、常规促销活动 |
| 测试终止条件 | 系统出现明显错误或崩溃 | 达到预设负载目标或SLA阈值 |
| 结果用途 | 容量规划、弹性伸缩策略 | 性能基线、SLA验证 |
记忆口诀:负载测试问“能不能扛住”,压力测试问“扛不住之后会怎样”。
1.4 常见压力测试指标
压力测试中,以下四个指标是衡量系统性能的核心维度,缺一不可。
1.4.1 TPS(Transactions Per Second)
每秒事务数。事务通常代表一个完整的业务操作(如一次下单、一次支付)。TPS是衡量系统业务处理能力的关键指标。
- 计算公式:TPS = 总事务数 / 测试时长(秒)
- 典型场景:银行转账系统关注TPS,因为一次转账包含多个原子操作。
1.4.2 QPS(Queries Per Second)
每秒查询数。QPS通常用于衡量读密集型系统的处理能力,如搜索引擎、API网关、数据库查询。
- 与TPS的关系:一个TPS可能包含多个QPS。例如一次页面加载(1 TPS)可能触发10次数据库查询(10 QPS)。
- 典型场景:内容管理系统(CMS)更关注QPS。
1.4.3 响应时间(Response Time)
从客户端发送请求到收到完整响应所经过的时间。通常关注平均响应时间、TP95(95%请求的响应时间)和TP99(99%请求的响应时间)。
- 重要性:响应时间直接影响用户体验。超过2秒的响应时间通常会导致用户流失。
- 压力测试中的表现:随着负载增加,响应时间会呈现非线性增长,直至系统崩溃。
1.4.4 并发数(Concurrency)
同一时刻系统正在处理的请求或事务数量。并发数并不等同于在线用户数,而是同时处于处理状态的请求数。
- 关键关系:并发数 = TPS × 平均响应时间(Little's Law)
- 典型场景:一个在线聊天系统可能有100万在线用户,但并发数可能只有1万。
常见误区:不要将“并发用户数”直接等同于“并发请求数”。一个用户可能同时发起多个请求(如页面加载时的CSS、JS、图片请求),也可能在思考间隙不产生任何请求。
1.5 指标关系图解
下图展示了TPS、QPS、响应时间与并发数之间的内在联系,以及它们在压力测试中的变化趋势。
1.6 指标速查表
以下表格汇总了四个核心指标的定义、单位与典型关注场景,便于快速查阅:
| 指标 | 英文全称 | 单位 | 典型关注场景 |
|---|---|---|---|
| TPS | Transactions Per Second | 笔/秒 | 支付、下单、转账等写密集型业务 |
| QPS | Queries Per Second | 次/秒 | 搜索引擎、API网关、数据库读操作 |
| 响应时间 | Response Time | 毫秒(ms) | 用户体验、SLA监控、性能调优 |
| 并发数 | Concurrency | 个 | 连接池配置、线程池大小、容量规划 |
实战建议:在压力测试报告中,务必同时记录TPS/QPS、响应时间(TP50/TP95/TP99)和并发数,三者共同构成完整的性能画像。单一指标无法反映系统真实状态。