性能测试核心术语

  • 并发用户:在性能测试工具中,一般称为虚拟用户(Virtual User,简称 VU),指的是现实系统中操作业务的用户。

说明:并发用户与注册用户、在线用户不同。注册用户一般指的是数据库中存在的用户。在线用户只是“挂”在系统上,对服务器不产生压力。但并发用户一定会对服务器产生压力。

  • QPS (Queries Per Second):每秒执行的查询次数。例如,如果一个网站的首页每秒可以响应 100 次用户请求,则该页面的 QPS 为 100。

  • TPS (Transaction Per Second):每秒事务数(吞吐量),是衡量系统性能的常用指标。事务通常是指一系列相关的操作,例如一个在线商城,在高峰期平均每秒能够完成多少笔交易。

  • RPS(Request Per Second):每秒请求数。RPS模式适合用于容量规划和作为限流管控的参考依据。

  • RT(Response Time):响应时间,指的是业务从客户端发起到客户端接收的时间。

易混淆的术语

TPS、QPS 和 RPS 容易混淆,对比如下:

  • TPS vs. QPS
    • TPS 关注的是整个业务流程的完成情况,例如完成一笔订单交易。
    • QPS 更加细化,专注于单个数据库查询或 API 调用的速度。一个TPS可能包含多个QPS。
  • QPS vs. RPS
    • QPS 通常特指数据库查询的频率、API 接口的调用速率。
    • RPS 是指 HTTP 请求的频率,可以包括GET、POST等不同类型的操作。
  • TPS vs. RPS
    • TPS 关注的是业务层面的事务处理速度。
    • RPS 则是针对 HTTP 协议的请求处理速度,通常比 TPS 更加频繁。

VU (并发用户) 和 TPS 换算

公式描述:TPS = VU/RT,(RT单位:秒)。

举例说明:假如1个虚拟用户在 1 秒内完成 1 笔事务,那么 TPS 明显就是1。如果某笔业务响应时间是1 ms,那么1个虚拟用户在1s内能完成1000笔事务,TPS就是1000 了;如果某笔业务响应时间是 1s,那么 1 个虚拟用户在1s内只能完成1笔事务,要想达到1000 TPS,就需要1000个虚拟用户。因此可以说1个虚拟用户可以产生1000 TPS,1000个虚拟用户也可以产生1000 TPS,无非是看响应时间快慢。

性能测试工具对比

主流的压测工具有 Apache JMeter、ApacheBench(ab)和 wrk,各自特点如下。

Apache JMeter

Apache JMeter是Apache组织开发的基于Java的压力测试工具。Apache JMeter具备如下特性:

  • 支持分布式施压。
  • 支持图形化界面,且支持流程编排,同时支持断言、逻辑控制器等高级指令,可满足复杂业务压测需求。
  • 扩展性强,开发、测试人员可通过编写自己的插件,满足各种压测需求。
  • 技术生态好,开源社区活跃。
  • 支持查看资源监控、性能报告,但可查看的监控和报告指标较少。
  • 基于并发模型,受限于JVM,单机无法支持超高并发。且只支持并发施压模型,不支持吞吐量施压模型。
  • 开源支持的分布式能力无法大规模应用到生产环境,部署成本高。
  • 不支持测试用例管理、压测脚本管理等功能。

ApacheBench

ApacheBench(ab)是一款针对HTTP协议做性能压测的命令行工具。ApacheBench具备如下特性:

  • 扩展性较弱,没有插件或脚本机制,只能通过命令行参数配置请求。
  • 支持协议单一。只发送 HTTP/1.0 请求;编译时带 SSL 支持即可测试 HTTPS,但不支持 HTTP/2、WebSocket 等协议。
  • 支持请求总数、并发数、压测时长控制。
  • 作为一款命令行压测工具,上手较为简单。
  • 单机压测工具,无分布式施压能力,无可视化界面。
  • 不支持链路编排、场景管理等功能,无法做带业务含义的复杂压测。
  • 单次压测,只能对单个域名或地址发起流量请求。
  • 压测统计指标维度少,缺少压测过程中的统计数据,无法获取系统负载等指标。

wrk

wrk是一款针对HTTP协议的基准测试工具。wrk具备如下特性:

  • 轻量级性能测试工具,安装简单。
  • 学习成本低。
  • 基于异步事件驱动框架,单机支持高并发。
  • 单机压测工具,无分布式施压能力。
  • 只支持 HTTP/1.1 协议(包括基于 OpenSSL 的 HTTPS),不支持 HTTP/2、WebSocket 等协议。
  • 无可视化界面,不支持流程编排、断言等能力,无法满足复杂压测需求。