前言
在每一位后端工程师的工具箱里,总有那么几款压测工具常年"上岗"。当我们想快速验证一个接口性能时,可能会随手敲下 ab
;当追求极致的单机 QPS 时,wrk
往往是我们的不二之选;而当需要编写复杂的测试场景时,k6
以其强大的脚本能力和开发者友好的生态,成为了越来越多团队的选择。
这些工具都很出色,但技术的浪潮总在向前。HTTP/3 协议逐渐从"未来"变为"现在",WebSocket 的应用场景也愈发广泛。同时,在 DevOps 理念深入人心的今天,一次性的、孤立的压测报告已经不够了,我们更渴望能将性能数据实时地融入到整个可观测性体系中。
这时,我们不禁会想:有没有一款工具,既能像 ab
一样简单直接,又能覆盖 HTTP/3 和 WebSocket 等现代协议,还能像 k6
那样轻松地与监控系统(如 Prometheus)联动?
答案是肯定的。今天,我们就来聊聊一款潜力新星------perftest
。
PerfTest 是什么?
perftest
是一个集成在 Go开发框架Sponge 中的轻量级、高性能压测工具。你可以把它理解成一个为现代网络协议和云原生监控而生的"特种兵"。
它的核心亮点,说起来很简单直接:
- 协议全能:原生支持 HTTP/1.1、HTTP/2、HTTP/3 和 WebSocket。
- 模式灵活 :无论是想打满固定的请求数(
--total
),还是想在规定时间内持续施压(--duration
),它都能满足。 - 监控无缝集成 :这是它的"杀手锏"。
perftest
可以将压测过程中的实时指标(QPS、延迟等)直接推送到 Prometheus 或任何自定义的 HTTP 端点,让你的 Grafana 大盘能立刻"动起来"。 - 简单纯粹:所有功能都通过清晰的命令行参数实现,学习成本极低。
什么场景下应该用 PerfTest?
perftest
在某些特定场景下,它可能是你最高效的选择:
- 拥抱未来,测试前沿协议 :当你的服务已经支持 HTTP/3 或者正在使用 gRPC-Web (其底层依赖 HTTP/2 或更高版本),
perftest
可以让你轻松验证新技术带来的性能收益。 - 实时通信服务压测 :你的应用有聊天室、实时行情、协同编辑等 WebSocket 场景吗?
perftest
可以模拟大量客户端连接和高频消息轰炸,真实检验你的后端承载能力。 - CI/CD 里的"性能哨兵" :在你的自动化部署流水线中加入
perftest
的一个步骤。每次代码合并后,自动对核心接口进行一轮基准测试,并将数据推送到 Prometheus。通过设定告警,就能在性能发生衰退时第一时间发现问题。 - 快速、简单的性能验证 :不想为了一个简单的接口测试而去写一整个
k6
脚本?perftest
的命令行模式让你可以在几十秒内完成一次标准的并发测试,并拿到一份详尽的报告。
上手体验
perftest
基于 Go 开发,安装过程就是一行命令的事(前提是你已安装 Go 环境):
bash
go install github.com/go-dev-frame/sponge/cmd/sponge@latest
安装后,我们来几个实际的例子感受一下。
HTTP 压测示例
压测一个 HTTP/1.1 接口,模拟 50 个并发,共发送 100 万个请求:
bash
sponge perftest http \
--worker=50 \
--total=1000000 \
--url=http://localhost:8080/user/1
如果想进行一个持续 1 分钟的压测,可以这样做:
Bash
sponge perftest http \
--worker=50 \
--duration=1m \
--url=http://localhost:8080/user/1
切换到 HTTP/2 或 HTTP/3 压测,只需将子命令 http
替换为 http2
或 http3
即可,其他参数保持不变,简单直观。
如果想实时推送统计数据给 Prometheus,需要添加 2 个参数 --prometheus-job-name
和 push-url
。
压测结束后,你会得到一份类似这样的详细报告:
yaml
========== HTTP/1.1 Performance Test Report ==========
[Requests]
• Total Requests: 1000000
• Successful: 1000000 (100%)
• Failed: 0
• Total Duration: 8.55 s
• Throughput (QPS): 116914.5 req/sec
[Latency]
• Average: 0.42 ms
• Minimum: 0 ms
• Maximum: 22.41 ms
• P25: 0 ms
• P50: 0.51 ms
• P95: 1.18 ms
[Data Transfer]
• Sent: 25000000 Bytes
• Received: 49000000 Bytes
[Status Codes]
• 200: 1000000
[Push Statistics]
• ok
如果认为命令行测试较为繁琐,我们还提供一种更简便的测试方式:您只需在页面中填写相应参数即可开始测试。参数设置与命令行完全一致,并且同样支持随时终止测试。具体步骤如下:
-
打开 sponge UI 页面
bashsponge run
-
在左边菜单点击【Public】--> 【生成性能测试报告】,然后填写参数进行测试,如下图所示:

模拟 WebSocket 消息风暴
现在,我们模拟 100 个用户同时在线聊天,每个用户每秒发送 2 条消息(间隔 500ms),持续 5 分钟。
bash
sponge perftest websocket \
--worker=100 \
--duration=5m \
--send-interval=500ms \
--body={\"event\":\"message\",\"payload\":\"你好,perftest!\"} \
--url=ws://localhost:8080/ws
测试结束后,终端会清晰地告诉你连接成功率、消息收发总量和吞吐量,所有关键数据一目了然。
横向对比:perftest vs. ab, wrk, k6
是骡子是马,拉出来遛遛。perftest
与几位"前辈"相比,究竟处在什么位置?
特性 / 工具 | ab (ApacheBench) | wrk / wrk2 | k6 | perftest |
---|---|---|---|---|
核心定位 | 简单验证 | 极限性能 | 开发者体验与复杂场景 | 现代协议与监控集成 |
HTTP/1.1 | ✅ | ✅ | ✅ | ✅ |
HTTP/2 | ❌ | ❌ (需特定分支) | ✅ | ✅ |
HTTP/3 (QUIC) | ❌ | ❌ | ❌ (社区扩展) | ✅ (原生) |
WebSocket | ❌ | ❌ (需脚本) | ✅ | ✅ |
实时数据推送 | ❌ | ❌ | ✅ (生态丰富) | ✅ (原生) |
脚本能力 | 无 | 强 (Lua) | 非常强 (JavaScript) | 无 |
上手难度 | 极低 | 中等 | 中等 | 极低 |
深度解析
-
ab (The Old Guard) :
ab
就像一把老锤子,简单、可靠,但仅限于敲钉子(HTTP/1.1)。 -
wrk (The Speedster) :
wrk
是性能界的"速度之王"。它利用事件驱动模型能榨干机器的每一分性能,通过 Lua 脚本也能实现一定的定制化。但它的短板在于协议支持的滞后,原生不支持 HTTP/2 及以上协议。 -
k6 (The Powerhouse) :
k6
是目前最受开发者欢迎的压测工具之一。它用 JavaScript 写测试脚本,生态非常完善,可以模拟非常复杂的真实用户行为。在协议支持上,它覆盖了 HTTP/1.1, HTTP/2, WebSocket 和 gRPC。然而,对于 HTTP/3,k6 目前仍需要通过社区扩展来支持。 -
perftest (The Specialist) :
perftest
的定位非常清晰,在两个维度上做到极致:- 最前沿的协议支持 :当你的团队在探索 HTTP/3 带来的性能提升时,
perftest
是市面上为数不多能让你"开箱即用"进行测试的工具。 - 最原生的监控集成 :它没有像
k6
那样构建一个庞大的输出生态系统,而是直击痛点,原生支持了当前云原生领域的事实标准------Prometheus。这种"少即是多"的哲学,让集成工作变得异常简单。
- 最前沿的协议支持 :当你的团队在探索 HTTP/3 带来的性能提升时,
结论
perftest
是为开发者和测试工程师提供了一个更现代、更聚焦、更贴近云原生生态的选择。
当你的需求是:
- 快速验证和对比最新网络协议(HTTP/3、WebSocket)的性能表现。
- 将性能测试与 Prometheus 监控系统无缝打通,实现压测过程的可视化和自动化。
- 在 CI/CD 中进行轻量级的性能回归测试。
- 寻找一款比
ab
强得多,又比k6
轻得多的命令行工具。
那么,perftest
绝对值得你一试。它就像一把锋利的"手术刀",精准地切入了现代 Web 性能测试中最需要、也最前沿的那部分需求。在工具日趋复杂的今天,这样一款"小而美"的利器,或许正是你一直在寻找的答案。
perftest
是 Sponge 的子命令,Sponge 是一个功能强大且易于使用的 Go 开发框架,秉承"定义即代码"(Definition is Code)的核心理念,通过低代码方式轻松构建稳定、可靠的高性能后端服务,支持包括 RESTful API、gRPC、HTTP+gRPC 和 gRPC Gateway 等多种接口类型。Sponge 内置的 AI 助手能够感知服务代码文件及其上下文,在精准的 AI 约束下,智能生成更符合需求的业务逻辑代码,显著提升开发效率。
Sponge Github 地址: github.com/go-dev-fram...