
性能测试报告
聊性能测试,很多人第一反应是"跑个压测工具看看系统能扛多少并发"。这个理解说对也对,说不对也不对,跑工具只是动作,真正有价值的是:你知不知道为什么要跑、跑了之后拿到的数据怎么解读、解读完之后怎么用。
第一步:先搞清楚你要测什么
性能测试不是"把所有东西都压一遍"。测什么,取决于你的目标是什么。这层问题不先想明白,后面所有数据都可能是废数据,因为你压根不知道自己要什么。
常见的测试目标有这么几类:
1.验证型:系统要达到某个既定的性能指标(比如合同里写了"1000并发下响应时间≤2秒"),你测一下看达不达标
2.探索型:不知道系统能扛多少,想摸个底,看看极限在哪里
3.调优型:系统已经上线了但感觉慢,想定位瓶颈在哪
4.稳定性验证:系统长时间跑会不会出问题,比如内存泄漏
目标不同,测法完全不一样。验证型你照着指标跑就行,探索型你得逐步加压直到系统崩,调优型你得结合监控一点一点查。
第二步:选工具、定场景
工具这事没那么复杂。小项目、预算有限,JMeter就够了,开源、社区活跃、能跑大部分场景。大项目、要出正规报告的,LoadRunner这种商业工具更稳妥。现在云压测平台也很多,按量付费、不用自己维护机器,适合短期项目。
场景怎么定?别想当然。
你得回去看生产环境的实际访问情况。早高峰有多少人在用?核心业务是哪个接口?用户的操作路径是什么样的?把真实的用户行为拿过来作为场景设计的依据,比拍脑袋猜出来的并发数靠谱得多。
一个常见的错误是只压单接口。比如只压"登录接口"的TPS,觉得数据好看就行。但现实是用户不会只点登录,他们登录之后会查数据、会下单、会退出,混合场景才是真实场景。
第三步:执行测试,同时开着监控
跑测试的时候有一个铁律:监控必须全程开着。很多人把注意力全放在测试工具的输出上,"你看,响应时间2.1秒,过了!",但没看服务器资源。如果响应时间达标了,但CPU已经跑到95%了,那这个"达标"就是虚假的安全感。再来一丁点波动,系统直接就崩了。
至少要看这几样:
1.CPU使用率、内存使用率、磁盘I/O、网络带宽,系统层面的基础指标
2.数据库连接池使用率、慢查询数量,数据库层面的关键指标
3.JVM堆内存、GC频率、线程池状态,Java应用必看
4.接口响应时间的分布,平均值没意义,要看P95、P99
不是说要把所有指标都盯死,但核心的那几个你得心里有数。
加压策略也有讲究。别一上来就500并发。从低开始,比如50,跑稳定了再往上加100、200、500、1000。这样你能看到系统在哪个节点开始劣化。响应时间突然跳升的那个点,就是系统的软肋。
第四步:数据采集,关键指标怎么拿?
1.响应时间,从发出请求到收到响应花多长时间。别只看平均值,平均值掩盖了太多问题。P99(99%的请求都在这个时间内完成)比平均值更能反映真实情况。比如平均响应1.2秒,但P99是5秒,意味着100个用户里有1个得等5秒,这体验就很糟糕了。
2.吞吐量(TPS/QPS),系统每秒能处理多少笔交易或请求。这是衡量系统处理能力的核心指标。同样的并发下,TPS越高越好。
3.错误率,失败的请求占总请求的百分比。一般要求低于1%,严格的项目可能要求低于0.1%。错误率突然升高,往往是系统到了极限的信号。
4.资源利用率,CPU、内存、磁盘、网络用了多少。资源利用率高本身不是问题,问题是高的时候系统表现怎么样。如果CPU到了80%响应时间还很稳,那没事;如果CPU刚到60%响应时间就飙升,那说明代码或架构本身就有瓶颈。
这些数据怎么拿?测试工具能直接输出响应时间和TPS,监控工具(比如Prometheus + Grafana)负责资源指标,数据库慢查询日志帮你定位SQL层面的问题,应用日志能暴露代码层面的异常。
第五步:结果分析,数据拿到之后怎么看?
看趋势,别只看单点。响应时间从50并发到1000并发是怎么变化的?是一条平缓的线还是一个陡峭的拐点?拐点出现的位置,就是系统的真实承载力。
关联着看,别割裂。发现响应时间变长了,同时看CPU是不是也上去了、数据库慢查询是不是增多了。找到那个和响应时间同步恶化的指标,就找到了瓶颈所在。
分析结果说白了就一句话:从现象出发,一层一层往里剥,直到找到那个最底层的"为什么"。
性能测试的核心不是"跑工具",而是"带着明确目标去验证系统的真实能力,并基于数据做出判断"。工具只是手段,数据分析才是真正产生价值的地方。