当前位置: 首页 > news >正文

PerfTest:轻量高性能压测工具,兼容 HTTP/1/2/3、WebSocket,并带实时监控

前言

在每一位后端工程师的工具箱里,总有那么几款压测工具常年“上岗”。当我们想快速验证一个接口性能时,可能会随手敲下 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 在某些特定场景下,它可能是你最高效的选择:

  1. 拥抱未来,测试前沿协议:当你的服务已经支持 HTTP/3 或者正在使用 gRPC-Web (其底层依赖 HTTP/2 或更高版本),perftest 可以让你轻松验证新技术带来的性能收益。
  2. 实时通信服务压测:你的应用有聊天室、实时行情、协同编辑等 WebSocket 场景吗?perftest 可以模拟大量客户端连接和高频消息轰炸,真实检验你的后端承载能力。
  3. CI/CD 里的“性能哨兵”:在你的自动化部署流水线中加入 perftest 的一个步骤。每次代码合并后,自动对核心接口进行一轮基准测试,并将数据推送到 Prometheus。通过设定告警,就能在性能发生衰退时第一时间发现问题。
  4. 快速、简单的性能验证:不想为了一个简单的接口测试而去写一整个 k6 脚本?perftest 的命令行模式让你可以在几十秒内完成一次标准的并发测试,并拿到一份详尽的报告。

上手体验

perftest 基于 Go 开发,安装过程就是一行命令的事(前提是你已安装 Go 环境):

go install github.com/go-dev-frame/sponge/cmd/sponge@latest

安装后,我们来几个实际的例子感受一下。


HTTP 压测示例

压测一个 HTTP/1.1 接口,模拟 50 个并发,共发送 100 万个请求:

sponge perftest http \--worker=50 \--total=1000000 \--url=http://localhost:8080/user/1

如果想进行一个持续 1 分钟的压测,可以这样做:

sponge perftest http \--worker=50 \--duration=1m \--url=http://localhost:8080/user/1

切换到 HTTP/2 或 HTTP/3 压测,只需将子命令 http 替换为 http2http3 即可,其他参数保持不变,简单直观。

如果想实时推送统计数据给 Prometheus,需要添加 2 个参数 --prometheus-job-namepush-url

压测结束后,你会得到一份类似这样的详细报告:

========== 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

如果认为命令行测试较为繁琐,我们还提供一种更简便的测试方式:您只需在页面中填写相应参数即可开始测试。参数设置与命令行完全一致,并且同样支持随时终止测试。具体步骤如下:

  1. 打开 sponge UI 页面
    sponge run
    
  2. 在左边菜单点击【Public】–> 【生成性能测试报告】,然后填写参数进行测试,如下图所示:
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

模拟 WebSocket 消息风暴

现在,我们模拟 100 个用户同时在线聊天,每个用户每秒发送 2 条消息(间隔 500ms),持续 5 分钟。

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 / wrk2k6perftest
核心定位简单验证极限性能开发者体验与复杂场景现代协议与监控集成
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 的定位非常清晰,在两个维度上做到极致:

    1. 最前沿的协议支持:当你的团队在探索 HTTP/3 带来的性能提升时,perftest 是市面上为数不多能让你“开箱即用”进行测试的工具。
    2. 最原生的监控集成:它没有像 k6 那样构建一个庞大的输出生态系统,而是直击痛点,原生支持了当前云原生领域的事实标准——Prometheus。这种“少即是多”的哲学,让集成工作变得异常简单。

结论

perftest 是为开发者和测试工程师提供了一个更现代、更聚焦、更贴近云原生生态的选择。

当你的需求是:

  • 快速验证和对比最新网络协议(HTTP/3、WebSocket)的性能表现。
  • 将性能测试与 Prometheus 监控系统无缝打通,实现压测过程的可视化和自动化。
  • 在 CI/CD 中进行轻量级的性能回归测试。
  • 寻找一款比 ab 强得多,又比 k6 轻得多的命令行工具。

那么,perftest 绝对值得你一试。它就像一把锋利的“手术刀”,精准地切入了现代 Web 性能测试中最需要、也最前沿的那部分需求。在工具日趋复杂的今天,这样一款“小而美”的利器,或许正是你一直在寻找的答案。


Sponge 是一个功能强大且易于使用的 Go 开发框架,秉承“定义即代码”(Definition is Code)的核心理念,通过低代码方式轻松构建稳定、可靠的高性能后端服务,支持包括 RESTful API、gRPC、HTTP+gRPC 和 gRPC Gateway 等多种接口类型。Sponge 内置的 AI 助手能够感知服务代码文件及其上下文,在精准的 AI 约束下,智能生成更符合需求的业务逻辑代码,显著提升开发效率。

Sponge Github 地址: https://github.com/go-dev-frame/spong


文章转载自:

http://3QvbT1zF.fgLxh.cn
http://T6R96MxF.fgLxh.cn
http://CGrrXV3M.fgLxh.cn
http://lD9unCyr.fgLxh.cn
http://SWYD3DT8.fgLxh.cn
http://zK8ETwg9.fgLxh.cn
http://ExjPGYJh.fgLxh.cn
http://NZMcQ2gf.fgLxh.cn
http://fP0vWNob.fgLxh.cn
http://1rdvoGdL.fgLxh.cn
http://NfCxDXK9.fgLxh.cn
http://dXCHICgZ.fgLxh.cn
http://sNEj5IUd.fgLxh.cn
http://mjOQNk8L.fgLxh.cn
http://7pGVK15U.fgLxh.cn
http://BaqNthiH.fgLxh.cn
http://SO6AhR3u.fgLxh.cn
http://34XdJ9DZ.fgLxh.cn
http://93Wwqtkt.fgLxh.cn
http://rOYLhGgS.fgLxh.cn
http://oEoH8YpJ.fgLxh.cn
http://2NkDOEl3.fgLxh.cn
http://dgLPP95S.fgLxh.cn
http://brq7AZxk.fgLxh.cn
http://EAt3Cy62.fgLxh.cn
http://LorJVl5E.fgLxh.cn
http://5hyJj84n.fgLxh.cn
http://CqtIxK6c.fgLxh.cn
http://xZEq3jeM.fgLxh.cn
http://OBchRWRu.fgLxh.cn
http://www.dtcms.com/a/371334.html

相关文章:

  • 【Linux基础】fdisk命令详解:从入门到精通的磁盘分区管理完全指南
  • 【从零开始学习Redis】秒杀优化——阻塞队列、消息队列实现异步秒杀
  • 【基于深度学习的中草药识别系统】
  • AI 驱动数据分析:开源 SQLBot 项目探索,基于大模型和 RAG 实现精准问数与图表挖掘
  • 延迟 队列
  • 宋红康 JVM 笔记 Day14|垃圾回收概述
  • 【ICCV2025】计算机视觉|即插即用|ESC:颠覆Transformer!超强平替,ESC模块性能炸裂!
  • 手机能看、投屏 / 车机不能看与反向链接验证类似吗?
  • Xilinx ZYNQ 开发环境中搭建 Qt 环
  • leetcode909.蛇梯棋
  • JAVA NIO学习笔记基础强化学习总结
  • 基于51单片机手机无线蓝牙APP控制风扇调速设计
  • 力扣hot100:相交链表与反转链表详细思路讲解(160,206)
  • 如何在 DevOps 管道中实现 AI?
  • 【Java基础07】面向对象进阶
  • 动态维护有效区间:滑动窗口
  • 桌面时间 Catime
  • 解锁服务器网络配置新姿势:Wisdom SSH 助力之旅
  • 设计模式:状态模式(State Pattern)
  • 【ARM基础知道】
  • SpringCloud Alibaba微服务--Gateway使用
  • 基于脚手架微服务的视频点播系统-播放控制部分
  • 【C++详解】C++ 智能指针:使用场景、实现原理与内存泄漏防治
  • 【iOS】push,pop和present,dismiss
  • HiCMAE 论文复现:基于 RAVDESS 数据集的音视频情感识别
  • axios的两种异步方式对比
  • uniapp结合uview制作美食页面
  • Spark mapreduce 的一个用法
  • [iOS] push 和 present Controller 的区别
  • 五.贪心算法