性能测试不是跑个脚本就完事
很多人以为性能测试就是写个脚本,跑一下看有没有报错。但真正在项目里干过的人知道,一场完整的性能测试,从准备到出报告,中间要走好几个步骤,稍有疏漏,数据就可能失真。尤其在团队协作中,用表格把流程列清楚,能省下大量沟通成本。
第一步:明确测试目标
别急着上工具,先问清楚这次测什么。是上线前压测?还是系统优化后对比性能提升?比如电商系统大促前,目标可能是“支持5000用户并发下单,平均响应时间不超过1.5秒”。把这个写进表格第一行,后面所有动作都围绕它展开。
第二步:梳理业务场景
真实用户不会只点一个接口。拿登录-浏览商品-加购-下单这条链路来说,得按实际使用比例分配权重。可以做个表格:
| 业务场景 | 占比 | 关键接口 |
| 浏览商品 | 50% | /api/products, /api/detail |
| 加入购物车 | 30% | /api/cart/add |
| 下单支付 | 20% | /api/order/create, /api/payment |
这样脚本设计才有依据。
第三步:准备测试环境与数据
环境不一致,测出来也没用。数据库数据量、网络延迟、服务器配置都要尽量贴近生产。比如用Excel表格对比:
| 项 | 测试环境 | 生产环境 |
| 应用服务器 | 4核8G × 2 | 8核16G × 4 |
| 用户数据量 | 10万 | 80万 |
差距大的地方,后续分析时要特别标注。
第四步:脚本开发与调试
用JMeter或Locust写脚本时,记得加上事务控制器和检查点。比如JMeter里标记“下单流程”为一个事务:
<TransactionController guiclass="LogicControllerGui" testclass="TransactionController" testname="下单流程" enabled="true">
<hashTree>
<HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="提交订单" enabled="true">
<stringProp name="HTTPsampler.path">/api/order/create</stringProp>
<stringProp name="HTTPsampler.method">POST</stringProp>
</HTTPSamplerProxy>
</hashTree>
</TransactionController>调试阶段用少量线程跑通流程,确认返回结果正确再放大。
第五步:执行测试并监控
正式运行时,一边跑压测,一边抓服务器指标。可以用Prometheus + Grafana看CPU、内存、GC频率,数据库连接数也不能漏。把这些监控项也列个表,测试时逐项打钩确认。
第六步:结果分析与报告输出
跑完不是结束,关键在解读数据。比如TPS先升后降,可能是数据库锁表;响应时间突增,结合GC日志发现是频繁Full GC。把这些发现整理成表格,附上截图和日志片段,开发一看就明白问题在哪。
整个流程走下来,你会发现,性能测试的本质不是“测”,而是“验证假设+定位瓶颈”。而表格,就是帮你把模糊的感觉变成可追踪、可复盘的依据。