程序员如何做「性能测试」:不是压死,是摸底
性能测试是系统上线的最后一关。
不知道系统能承受多少压力的团队,就像不知道能跑多快的赛车手——随时可能出事。
一、性能测试的类型
1. 基准测试(Benchmark)
在特定条件下测试系统性能,作为参考基准。
单用户、单功能,测纯性能。
2. 负载测试(Load Test)
模拟真实用户场景,测试系统在正常负载下的表现。
3. 压力测试(Stress Test)
逐步增加压力,找到系统的极限。
4. 稳定性测试(Soak Test)
长时间运行,测试系统在持续压力下的稳定性。
二、性能测试的指标
1. 响应时间
- 平均响应时间
- P50、P90、P95、P99
2. 吞吐量
- QPS(每秒请求数)
- TPS(每秒事务数)
3. 资源使用
- CPU 使用率
- 内存使用率
- 磁盘 IO
- 网络 IO
4. 错误率
- 请求失败率
- 超时率
三、常用性能测试工具
1. JMeter
开源免费,功能强大,适合复杂场景。
2. Gatling
Scala 编写,报表漂亮,适合 DevOps。
3. wrk
命令行工具,轻量级,简单场景够用。
4. Locust
Python 编写,支持分布式,脚本简单。
四、性能测试的步骤
1. 设定目标
- 目标 QPS 是多少
- 响应时间要求是多少
- 支持多少并发用户
2. 设计场景
- 核心业务场景
- 用户行为模型
- 数据量
3. 执行测试
- 逐步加压
- 记录数据
- 观察系统表现
4. 分析结果
- 找到瓶颈
- 分析原因
- 给出建议
五、常见错误
❌ 测试环境不稳定
测试环境不稳定,结果不可信。
❌ 测试数据不真实
用假数据测不出真实问题。
❌ 只测接口不测全链路
单接口没问题,不代表全链路没问题。
❌ 测完不分析
测了一堆数据,不分析等于没测。
六、一句话总结
性能测试 = 基准 + 负载 + 压力 + 稳定性,指标(响应时间/吞吐量/资源/错误率),工具(JMeter/Gatling/wrk/Locust)。