完整的性能测试流程一般分为五个步骤:
1. 需求分析和方案制定
目的:是为了证实上线前的承载能力,还是排查已知的卡顿问题?
场景:用户主要访问的是首页、登录还是查询报表页面?需要模拟日常访问还是秒杀抢购高峰?
标准:根据分析,设定具体的标准阈值。
2. 测试环境准备
搭建环境:最好能搭建一个和生产环境配置接近的测试环境(硬件、网络拓扑、数据库版本尽量一致),这样测试结果更有参考作用。
准备数据:数据库中不能只有几条数据。比如测试查询功能,数据库里需要有模拟真实情况的几十万甚至上百万条数据。
3. 测试工具选型和脚本录制
常用的性能测试工具有这些,可以根据团队情况选择:
JMeter:开源免费,根据Java,功能强大,支持分布式压测。绝大多数Web应用,是目前最主流的选择。
LoadRunner:商业软件,功能非常全面,但价格昂贵。大型企业级项目,要求全面分析和报告的场合。
WebPageTest:在线工具,可详细分析前端页面加载性能。前端开发人员优化页面加载速度。
Lighthouse:Chrome浏览器内置工具,可一键生成性能报告。快速考虑和优化前端性能,给出优化建议。
阿里云PTS / 腾讯云压测:云服务,可发起大规模分布式压力,无需自建压力机。需要模拟海量IP、海量用户的超大并发场景。
操作时,需要录制或编写脚本,模拟用户点击、登录、查询等操作,并设置多个事务点。
4. 测试执行和监控
先小后大:先模拟少量用户(如10个)运行几分钟,看系统有无报错;再逐步增加并发数(如100、500、1000),观察拐点。
监控:在压测的同时,通过任务管理器或性能监控工具(如Prometheus+ Grafana) 盯着服务器的CPU、内存变化,以及数据库的慢查询日志。
5. 结果分析和调优
测试完成后分析短板在哪:
如果是前端慢:图片太大未压缩?JS/CSS阻塞渲染?启用浏览器缓存或CDN加速一般能改善。
如果是后端慢:
数据库方面:慢SQL语句、缺少索引、数据库连接池不够,可以通过优化SQL或增加索引解决。
服务器方面:CPU飙升(代码死循环/复杂运算)、内存溢出(程序有Bug),需要进行代码级优化或增加服务器内存。
架构方面:单点服务器扛不住,需要考虑增加服务器做负载均衡、引入Redis缓存或使用消息队列削峰填谷。