性能测试基础:让数据说话

性能测试,说白了就是给系统做一次「体检」。我见过太多项目上线后才发现扛不住流量,那时候再改就晚了。今天咱们聊聊性能测试的三种核心类型、标准流程,以及我常用的几把「手术刀」。

一、三种核心测试类型

很多人分不清负载测试和压力测试的区别。我刚开始也犯过这个错,直到有一次把压力测试当负载测试做,结果线上出了大问题。咱们一个一个说清楚。

1. 负载测试(Load Testing)

负载测试的目标是:在预期流量下,系统能不能稳定运行。比如你预估双十一峰值是1万QPS,那就模拟1万并发,看看响应时间、错误率是否达标。

核心指标:平均响应时间 < 200ms,错误率 < 0.1%,CPU使用率 < 70%

我个人习惯把负载测试分成三档:70%负载、100%负载、120%负载。这样能看出系统在接近极限时的表现趋势。

2. 压力测试(Stress Testing)

压力测试就狠多了——不断加压,直到系统崩溃。目的是找到系统的「天花板」在哪里。

我曾经帮一个电商平台做压力测试,发现数据库连接池在500并发时就开始报错。嗯,这就是瓶颈。找到它,你才能针对性优化。

注意:压力测试一定要有熔断机制。我见过有人把系统压死,结果恢复花了两个小时。建议设置自动降级或限流。

3. 稳定性测试(Endurance Testing)

稳定性测试也叫「长跑测试」。系统跑个72小时,看看内存会不会泄漏、连接会不会耗尽。

我记得有一次做稳定性测试,跑了48小时一切正常,结果第50小时突然OOM了。排查发现是一个缓存对象没释放。这种问题,短时间测试根本发现不了。

测试类型 目标 持续时间 典型场景
负载测试 验证预期性能 10-30分钟 日常峰值验证
压力测试 寻找极限点 5-15分钟 容量规划
稳定性测试 发现长期问题 24-72小时 上线前验证

二、测试流程:五步走

很多新手上来就开压,结果数据一塌糊涂。我建议按这个流程来:

  1. 需求分析——搞清楚要测什么。是接口响应时间?还是吞吐量?
  2. 场景设计——模拟真实用户行为。比如登录、浏览、下单的比例。
  3. 脚本开发——用工具写测试脚本。这一步最耗时。
  4. 执行测试——先小规模验证,再逐步加压。
  5. 结果分析——看数据,找瓶颈,出报告。
我的经验:第2步最容易出错。很多人只测一个接口,但真实用户是混合操作的。建议用「用户行为模型」来设计场景。

三、常用工具:JMeter vs wrk

工具不在多,在于用对地方。我主要用两个:

1. JMeter

JMeter是图形化工具,适合复杂场景。你可以配置线程数、循环次数、定时器,还能加断言检查结果。

// 一个简单的JMeter测试计划
Thread Group:
  - 线程数: 100
  - Ramp-Up: 10秒
  - 循环次数: 10

HTTP Request:
  - 协议: https
  - 域名: api.example.com
  - 路径: /users/login
  - 方法: POST
  - 参数: {"username":"test","password":"123456"}

监听器:
  - 聚合报告
  - 响应时间图

我个人习惯用JMeter做稳定性测试。因为它能跑很久,而且报告很详细。

2. wrk

wrk是命令行工具,轻量、高效。适合快速压测单个接口。

# 一个简单的wrk命令
wrk -t12 -c400 -d30s http://api.example.com/users

# 参数说明:
# -t12: 12个线程
# -c400: 400个并发连接
# -d30s: 持续30秒

wrk的输出很简洁:

Running 30s test @ http://api.example.com/users
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    45.67ms   12.34ms  123.45ms   75.00%
    Req/Sec     1.23k   123.45     1.56k    68.00%
  36900 requests in 30.00s, 4.52MB read
Requests/sec:   1230.00
Transfer/sec:  154.00KB
选型建议:
  • 复杂场景(登录+下单+支付)→ 用JMeter
  • 单接口快速验证 → 用wrk
  • 需要分布式压测 → 用JMeter + 远程代理

四、知识体系图

下面这张图帮你理清本章的核心逻辑:

性能测试基础 测试类型 负载测试 压力测试 稳定性测试 测试流程 ① 需求分析 → ② 场景设计 ③ 脚本开发 → ④ 执行测试 ⑤ 结果分析 常用工具 JMeter wrk 选型建议 核心目标:找到瓶颈 → 优化性能 → 保障稳定

五、避坑指南

最后分享几个我踩过的坑:

  • 不要在生产环境做压力测试——我曾经见过有人直接在线上压,结果把数据库压挂了。一定要用预发环境或隔离环境。
  • 监控要到位——压测时CPU、内存、IO、网络都要看。我习惯用Prometheus + Grafana实时监控。
  • 数据要真实——别用全量缓存数据压测。真实场景下缓存命中率没那么高。
重要提醒:性能测试不是一次性的。每次代码变更、架构调整后,都应该重新跑一遍。我建议把性能测试集成到CI/CD流水线中。

好了,性能测试的基础就聊到这儿。记住一句话:没有数据,就没有优化。下次咱们聊聊如何分析测试结果,找到真正的瓶颈。

可可精品资料库