
性能测试流程
性能测试不是"跑个压测看看响应时间"就完事了,它的核心任务是搞清楚系统的承载边界在哪、瓶颈在哪、风险在哪。搞清楚这三个"在哪",才算做完了性能测试。
第一,确定系统能扛多少。
这是负载测试和压力测试干的事。你得知道系统在正常业务量下表现如何,扛到极限会怎样,崩在哪个点。这个数据是容量规划和扩容决策的依据,不是跑着玩的。
第二,找到性能瓶颈在哪。
响应时间慢,到底是数据库慢、网络慢、代码逻辑有问题、还是资源不够?性能测试必须把瓶颈定位到具体组件,不然开发拿到报告也不知道改哪。CPU打满了还是内存泄漏了还是锁竞争,得说清楚。
第三,评估风险、给出上线依据。
领导问你"能不能上线",你不能说"差不多吧"。你得给出明确结论:在多少并发下、响应时间多少、错误率多少,系统是稳定的。超过这个边界,会出什么问题、影响多大。这才是性能测试真正的交付物。
第一步,明确测试目标。
这步最容易被跳过,但最重要。你得先回答:这次性能测试是为了什么?是上线前验收?是容量规划?是调优对比?目标不同,策略完全不一样。
目标定了之后,把关键指标写下来:响应时间P99不超过多少、TPS要达到多少、错误率控制在多少以内。这些数字必须有业务依据,不能拍脑袋。
第二步,梳理业务场景。
不是所有功能都值得做性能测试。把核心业务链路挑出来,比如登录、下单、支付、查询,这些是用户量最大、对体验影响最直接的。边缘功能可以不测或者简化测。
同时要分析每个场景的并发模型:多少用户同时操作、读写比例是多少、请求频率是怎样的。这些数据从线上监控或者业务部门拿。
第三步,搭建测试环境。
这步是重灾区。很多团队测试环境和生产环境差太多,测出来的结果根本没有参考价值。
关键原则:硬件配置、网络拓扑、数据量级,尽量逼近生产环境。 至少也要保持同比例缩放,比如生产是8核16G,测试环境至少4核8G,不能用自己的笔记本测。
数据库数据量也得注意。10万条数据和1000万条数据,查询性能可能差十倍。
第四步,设计测试脚本和场景。
脚本要模拟真实用户行为,不是简单地循环调一个接口。比如下单场景,应该是:登录→浏览商品→加入购物车→结算→支付,完整走一遍,而不是只压支付接口。
场景设计一般分这几种:
基准测试:单用户跑一遍,建立性能基线
负载测试:按预期并发量持续跑,验证正常负载下的表现
压力测试:不断加压直到系统崩溃,找到极限
稳定性测试:中等负载跑8小时以上,看有没有内存泄漏、连接池耗尽
尖峰测试:模拟流量突增,看系统弹性
第五步,执行并监控。
执行的时候,不光要看响应时间和TPS,必须同时监控服务器资源:CPU、内存、磁盘I/O、网络带宽、数据库连接数、JVM堆内存(Java应用)。
很多问题不是从响应时间上看出来的,是从资源曲线上看出来的。比如CPU持续90%以上但响应时间还行,说明还有余量;但如果内存一直在涨不回收,那就是泄漏,迟早要崩。
发现瓶颈后,立刻定位。 别测完了再说"有问题",要边测边分析。响应时间突然飙升,先看CPU还是I/O,再看是哪个接口、哪条SQL、哪段代码。
调优后必须回归。 改完代码不能直接上线,得重新跑一轮测试,确认优化有效、没有引入新问题。
记录所有数据。 每次测试的环境配置、脚本参数、结果数据,全部存档。下次对比才有依据。
说到底,性能测试的核心不是跑出多高的数字,是给业务一个明确的答案:这个系统在什么条件下能用、什么条件下会出问题、出了问题影响多大。 数字是手段,决策依据才是目的。
标签:性能测试、测试流程