性能测试基础:目的、分类与关键术语

说实话,我入行那会儿,对性能测试的理解特别单纯。觉得就是拿工具跑一跑接口,看返回快不快。直到有一次,我负责的一个支付系统在上线前压测,TPS死活上不去,数据库连接池爆了,整个服务挂了半小时。那次事故教会我一个道理:性能测试不是跑个脚本就完事,它是一套系统的诊断方法。今天我就把自己这些年踩过的坑,跟各位好好聊聊。

我们到底为什么要做性能测试?

你想想看,一个接口上线前,功能测试已经跑通了,为什么还要做性能测试?答案其实很直接:功能和性能是两个维度的事情。

  • 评估系统能力:我的系统到底能扛多少并发?在峰值流量下会不会崩?
  • 发现性能瓶颈:是数据库慢,还是代码有锁,还是网络带宽不够?
  • 验证系统稳定性:跑一晚上会不会内存泄漏?长期压力下会不会越来越慢?
  • 容量规划:业务增长50%,我该加几台机器?
我的一点经验:很多团队在产品发布前三天才想起来做性能测试。但这时候往往来不及改架构了。性能测试应该在开发阶段就介入,每次代码合并都跑一轮基准测试。

说白了,性能测试最核心的目标只有一个:保证线上业务在预期压力下,能稳定、快速地返回正确结果。这也是我们学这门课要回答的核心问题。

性能测试的三大分类

分类这事,不同公司叫法可能不一样,但核心就是三类。我画个图帮你理清楚。

性能测试核心分类与关系 性能测试 负载测试 压力测试 稳定性测试 负载测试重点 • 模拟预期并发用户数 • 关注响应时间与吞吐量 • 验证是否满足SLA • 例如:500并发,TPS达到2000 记住:负载测试是“能不能扛住” 压力测试重点 • 超过预期负载,找极限 • 观察系统何时崩溃 • 发现失败模式和恢复能力 • 例如:逐步加压到2000并发 记住:压力测试是“极限在哪” 稳定性测试重点 • 长时间运行(如7×24h) • 检查内存泄漏、OOM • 关注GC频率和Full GC次数 • 例如:稳定200并发跑12小时 记住:稳定性测试是“能跑多久” 三者是递进关系:负载 → 压力 → 稳定性

负载测试

负载测试,说白了就是模拟真实用户场景。我记得有一次给电商平台做压测,上线前预估高峰期有1000人同时下单。我们就在测试环境模拟这个量级,看看每个接口的响应时间是否还在100ms以内。

压力测试

压力测试比负载测试更狠一点。它是为了找到系统的极限。我习惯逐步加压,先100并发,然后200、500、1000,直到TPS不再增长,或者响应时间突然飙升。这个拐点,就是系统的瓶颈所在。

我曾经踩过的坑:压力测试时千万别一上来就上5000并发。系统可能直接挂掉,你连监控数据都拿不到。要像温水煮青蛙,慢慢加压,记录每个节点的关键指标。

稳定性测试

稳定性测试也叫耐久测试。你可能遇到过,系统刚上线跑半小时一切正常,跑了两三个小时后突然变慢。嗯,这就是稳定性问题。我见过最典型的案例是,一个接口每次调用都会创建新线程但不销毁,24小时后线程数飙到20000,直接把CPU打满。

四个你必须背下来的关键术语

这几个术语,在面试和实战中都绕不开。我建议你不仅要记住定义,更要理解它们之间的换算关系。

术语 全称 核心含义 我平时怎么用
TPS Transactions Per Second 每秒完成的事务数 核心指标,评估系统吞吐能力
QPS Queries Per Second 每秒完成的查询数 常用于读接口,也泛指API调用量
响应时间 Response Time / Latency 从发请求到接收响应的时间 关注P99和P999,比平均时间更有价值
并发数 Concurrency / Vusers 同时向系统发起请求的用户/连接数 结合TPS和响应时间推算系统承载能力

重要公式:并发数 = TPS × 平均响应时间(秒)

举个例子:如果一个接口TPS是1000,平均响应时间是200ms。那么你需要维持的并发数就是 1000 × 0.2 = 200。这个公式在制定压测方案时特别实用。

为什么TPS和QPS不能混用?

很多人觉得TPS和QPS差不多。其实严格来说,TPS强调的是“事务”,一个事务可能包含多个查询。比如下单这个接口,它背后可能有查库存、扣库存、生成订单、推送消息四个数据库操作。在接口层面,我们通常用TPS。在数据库层面,我们才看QPS。

我的习惯:做接口性能测试时,我就看TPS。如果发现TPS上不去,再拆解去看数据库的QPS、慢查询数,以及应用层的线程情况。从宏观到微观,一层层往下钻。

响应时间的四个关键分位

我在项目里写性能报告,从来不看“平均响应时间”。为什么?因为平均值很容易被少数慢请求拉高,反而掩盖了真实问题。我建议你盯住这四个分位:

  • P50(中位数):一半的请求比这个值快,一半比这个值慢。能反映大多数用户的真实感受。
  • P90:90%的请求在P90以内。这个值如果太高,说明有小部分用户已经感受到卡顿了。
  • P99:99%的请求处理完毕的时间。这是性能测试最常用的硬指标,我一般要求P99 ≤ 200ms。
  • P999:千分之九十九点九的请求处理完毕的时间。用来排查极端情况下的慢请求。
避坑指南:我曾经遇到过一个问题,一个接口P99只有150ms,但P999直接飙到3秒。排查后发现是有一张大表没有走索引,偶尔触发全表扫描。如果只看P99,这个问题根本不会被发现。所以,性能调优的终点,一定是P999。

性能测试的“冰山模型”

你想想看,为什么同样的接口,到了线上就比压测环境慢很多?很多时候,问题藏在你看不见的地方。我习惯用一个“冰山模型”来思考这个问题:

  • 水面之上(看得见):TPS、响应时间、并发数、错误率。这些是监控系统可以直接报出来的。
  • 水面之下(需要深入排查):CPU使用率、内存占用、GC日志、线程池状态、数据库连接池等待、慢SQL、网络带宽、IO等待、锁竞争。

这其实是整个性能测试的核心逻辑:用压力把“水面之下”的问题逼出来。如果你只盯着TPS,而不去看系统层面的指标,就等于在打一场看不见敌人的仗。

好,这一章关于性能测试的基础就说到这里。记住,明确目的、选对分类、吃透术语,是后续所有诊断与优化的地基。后面几章我们会开始动手做具体的压测和诊断。