性能测试入门:从概念到压测工具
在项目开发过程中,代码能够正常运行只是第一步。随着用户量增加,系统是否还能保持稳定、快速响应,就需要通过性能测试来验证。
简单来说,性能测试就是模拟大量用户访问系统,观察系统在不同压力下的表现,提前发现性能瓶颈,保证系统上线后的稳定性。
一、性能测试关注哪些指标?
1. 并发用户(VU)
VU(Virtual User)指虚拟用户,也就是性能测试工具模拟出来的用户。
需要注意:
- 注册用户 ≠ 在线用户 ≠ 并发用户
- 注册用户只是数据库中的账号
- 在线用户可能只是打开页面
- 并发用户是真正向服务器发送请求,会产生压力
例如:
一个网站有 100 万注册用户,但高峰期同时操作的可能只有几万人,这几万人才是性能测试关注的对象。
2. QPS
QPS(Queries Per Second)表示每秒查询次数。
例如:
一个接口每秒能够处理 500 次请求,那么它的 QPS 就是 500。
常用于衡量接口处理能力。
3. TPS
TPS(Transaction Per Second)表示每秒完成的事务数量。
事务通常代表一个完整业务流程。
例如:
用户购买商品:
提交订单
↓
扣减库存
↓
支付
↓
生成订单
整个流程完成一次,可以算一个 TPS。
4. RT
RT(Response Time)表示响应时间。
也就是:
用户发送请求
↓
服务器处理
↓
返回结果
整个过程花费的时间。
RT 越低,说明系统响应越快。
二、TPS、QPS、RPS 的区别
| 指标 | 含义 | 关注点 |
|---|---|---|
| TPS | 每秒事务数 | 业务处理能力 |
| QPS | 每秒查询数 | 接口、数据库查询能力 |
| RPS | 每秒请求数 | HTTP请求处理能力 |
举个例子:
用户下单一次:
创建订单接口
+
库存查询接口
+
支付接口
可能产生多个 HTTP 请求。
所以:
1 TPS ≠ 1 QPS
一个业务事务可能包含多个请求。
三、并发用户和 TPS 的关系
常见公式:
TPS = 并发用户数 / 响应时间
例如:
一个接口响应时间:
RT = 1秒
一个用户1秒只能完成:
1次请求
那么:
1000个用户 ≈ 1000 TPS
如果接口优化后:
RT = 10ms
一个用户1秒可以完成:
100次请求
那么少量用户也可以产生较高 TPS。
所以性能优化不仅是增加服务器,更重要的是降低响应时间。
四、常见性能测试工具
1. JMeter
Apache JMeter 是目前 Java 后端使用非常广泛的性能测试工具。
特点:
优点:
- 支持接口压测
- 支持多用户并发
- 支持复杂业务流程
- 支持分布式压测
- 图形化操作简单
缺点:
- 基于 Java,比较消耗资源
- 超高并发场景下单机能力有限
适合:
企业接口性能测试、业务流程压测。
2. ApacheBench(ab)
ab 是 Apache 提供的简单 HTTP 压测工具。
特点:
优点:
- 安装简单
- 使用方便
- 适合快速测试接口性能
缺点:
- 功能比较简单
- 不支持复杂业务流程
- 没有可视化界面
适合:
简单接口压力测试。
3. wrk
wrk 是一个高性能 HTTP 压测工具。
特点:
优点:
- 性能非常高
- 单机可以模拟大量请求
- 使用简单
缺点:
- 只支持 HTTP
- 不支持复杂场景
- 没有流程控制
适合:
测试接口最大吞吐能力。
五、为什么需要性能测试?
性能测试可以帮助我们:
- 找到系统瓶颈
- 判断服务器承载能力
- 优化代码和数据库
- 提前发现线上风险
例如:
接口开发完成后,通过压测发现:
1000并发正常
5000并发出现响应变慢
10000并发服务崩溃
那么开发人员可以针对问题优化:
- SQL 查询
- 缓存设计
- JVM 参数
- 数据库连接池
- 接口逻辑
总结
性能测试是后端开发中非常重要的一环。
核心指标:
VU:多少用户同时访问
QPS:每秒查询次数
TPS:每秒完成业务数量
RT:请求响应时间
常见工具:
JMeter:业务压测首选
ab:简单接口测试
wrk:高性能接口压测
通过性能测试,可以提前了解系统极限,让应用在真正上线后更加稳定可靠。