程序员如何做「性能测试」:不是压死,是摸底
性能测试是系统上线的最后一关。
不知道系统能承受多少压力的团队,就像不知道能跑多快的赛车手——随时可能出事。
一、性能测试的类型
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. 设定目标
- 目标 QPS 是多少?
- 响应时间要求是多少?
- 支持多少并发用户?
2. 设计场景
- 核心业务场景
- 用户行为模型
- 数据量
3. 准备环境
- 测试环境配置
- 测试数据准备
- 监控工具就位
4. 执行测试
- 逐步加压
- 记录数据
- 观察系统表现
5. 分析结果
- 找到瓶颈
- 分析原因
- 给出建议
四、常用性能测试工具
1. JMeter
- 开源免费
- 功能强大
- 适合复杂场景
2. Gatling
- Scala 编写
- 报表漂亮
- 适合 DevOps
3. wrk
- 命令行工具
- 轻量级
- 简单场景够用
4. Locust
- Python 编写
- 支持分布式
- 脚本简单
五、常见问题
1. 测试环境不稳定
测试环境不稳定,结果不可信。
2. 测试数据不真实
用假数据测不出真实问题。
3. 只测接口不测全链路
单接口没问题,不代表全链路没问题。
4. 测完不分析
测了一堆数据,不分析等于没测。
六、一句话总结
性能测试 = 基准 + 负载 + 压力 + 稳定性,指标(响应时间/吞吐量/资源/错误率),工具(JMeter/Gatling/wrk/Locust)。