压力测试一般按照规划-脚本-执行-监控-分析的流程流程。
第一步:测试准备和工具选型
确定目的:确定要找的是什么短板(如登录接口的极限QPS,或服务器能支撑的最大在线用户数)。
工具选择:
JMeter:开源免费,适合HTTP、数据库等协议,是绝大多数项目的第一选择。
LoadRunner:功能强大的商业工具,适合复杂协议的大型企业级应用。
Locust:根据Python,适合编写复杂的压测场景模拟。
wrk:轻量级命令行工具,适合针对HTTP接口进行快速压测。
第二步:设计压测场景
不要只测一个接口,要根据业务思路设计:
单接口标准测试:单独测试登录、查询商品、提交订单等重要接口,找到各自的短板。
混合场景测试:按照业务比例混合调用(如70%浏览 + 20%下单 + 10%支付),模拟真实用户行为。
峰值测试:突然将压力加到预计峰值的2-3倍,观察系统是不是能扛住突发流量。
耐久测试:用80%的预估极限负载不断运行4-12小时,检测内存泄漏或连接未释放等稳定性问题。
第三步:脚本编写和参数化
录制/编写脚本:在工具中录制或编写API请求。
参数化:不能让所有用户都使用同一个账号登录或查询同一条数据,这样会导致缓存命中率失真。必须准备参数池(如1000个不同账号、1万条不同商品ID),让模拟请求更真实。
关联:处理动态数据,如从登录响应中提取Token,用于后续下单请求。
第四步:执行测试和监控
阶梯加压:不要一次性加到1万并发。建议从100并发开始,每1分钟增加100并发,观察各标准的变化趋势。
全链路监控:在执行压测时,同时打开任务管理器(简单场景)、Nmon(Linux系统监控工具)或专门的APM工具(如SkyWalking),记录服务器CPU、内存、网络I/O的变化。
寻找拐点:重视TPS曲线。当并发数增加,TPS保持线性增长时,系统健康;当并发数增加,TPS增长放缓甚至下降,说明资源耗尽,进入了压力区。
第五步:短板分析和调优
压力测试不是为了通过,而是为了发现问题。常见情况包括:
现象:CPU高,TPS上不去。诊断:代码思路复杂,缺乏缓存或死循环。
现象:CPU低,TPS低,响应慢。诊断:IO短板(读写磁盘慢)或数据库连接池满(等待数据库)。
现象:并发一高就报错。诊断:查看是不是有连接超时设置过短,或是线程池配置太小。
调整后复测:修改代码或配置(如增加缓存、优化SQL、调整JVM参数)后,再次执行同样的压力测试,对比标准是不是改善。