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、响应时间与并发数之间的内在联系,以及它们在压力测试中的变化趋势。

压力测试核心指标关系图 TPS 每秒事务数 QPS 每秒查询数 响应时间 RT (ms) 并发数 Concurrency Little's Law 并发数 = TPS × RT 压力测试趋势 负载↑ → RT↑ → 并发数↑ → 崩溃 负载增加方向 → 崩溃点

1.6 指标速查表

以下表格汇总了四个核心指标的定义、单位与典型关注场景,便于快速查阅:

指标 英文全称 单位 典型关注场景
TPS Transactions Per Second 笔/秒 支付、下单、转账等写密集型业务
QPS Queries Per Second 次/秒 搜索引擎、API网关、数据库读操作
响应时间 Response Time 毫秒(ms) 用户体验、SLA监控、性能调优
并发数 Concurrency 个 连接池配置、线程池大小、容量规划
实战建议:在压力测试报告中,务必同时记录TPS/QPS、响应时间(TP50/TP95/TP99)和并发数,三者共同构成完整的性能画像。单一指标无法反映系统真实状态。