V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
gvison
V2EX  ›  Go 编程语言

PerfTest — 轻量级高性能开源压测工具,支持 HTTP/1/2/3 与 WebSocket,还能分布式集群压测

  •  
  •   gvison · 20 天前 · 1468 次点击

    Perftest 特性

    • 轻量易用:单个可执行文件,无复杂依赖,安装即用。
    • 多协议支持:支持 HTTP/1.1HTTP/2HTTP/3WebSocket
    • 实时监控:压测时实时推送 QPS 、延迟分布、状态码统计等指标到自定义端点或 Prometheus 。
    • 分布式压测:内置 Master-Agent 架构,轻松扩展多台机器发压。
    • Web 管理界面:Collector 启动后自动提供 UI 页面,可视化启动测试、查看实时曲线、导出报告。
    • Kubernetes 部署友好:官方提供完整的 k8s YAML 文件,一条命令即可扩容上百个 Agent 。

    快速上手

    安装很简单,只需一行命令:

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

    安装之后请看 perftest 的 使用指南

    单机压测执行命令示例:

    # 指定总请求数
    sponge perftest http --total=100000 --url=http://localhost:8080/user/1
    
    # 指定压测时长
    sponge perftest http --duration=30s --url=http://localhost:8080/user/1
    

    分布式集群压测

    当单机压测的能力不足时,使用集群压测,只需运行:

    sponge perftest collector
    

    然后在多台机器上执行:

    sponge perftest agent --config=agent.yml
    

    Collector 会自动汇总所有 Agent 的性能数据,并在 Web UI 实时展示,如下图所示:

    perftest-ui


    Kubernetes 一键部署

    对于大规模测试,手动管理节点是不现实的,因此提供了完整的 Kubernetes 部署脚本 perftest-deployment.yml,直接:

    kubectl apply -f perftest-deployment.yml
    

    即可启动 Collector + Agent 集群压测。


    WebSocket 压测也支持

    想测试消息推送、IM 、通知系统性能?示例:

    sponge perftest websocket --worker=100 --duration=1m \
      --body='{"msg":"hello"}' --url=ws://localhost:8080/ws
    

    QPS 、收发延迟、消息统计全都有。


    perftest 是一款“从单机到集群”的压测工具,不花时间配置、不依赖外部组件,非常适合开发阶段接口调优、性能回归、系统瓶颈排查和高并发预演。

    9 条回复    2025-10-12 11:18:35 +08:00
    lesismal
        1
    lesismal  
       20 天前
    赞,star
    gesse
        2
    gesse  
       20 天前

    一个建议,太大的数字加上千分号,便于阅读。
    Mageblade
        3
    Mageblade  
       20 天前
    到目前为止自己用过最好用的免费压测工具非 locust 莫属,可以编写压测脚本模拟真实的业务场景,也可以支持分布式压测。楼主这个工具如果能支持脚本的话倒是可以一战。
    millken
        4
    millken  
       20 天前
    和 k6 比有何优势
    gvison
        5
    gvison  
    OP
       20 天前
    @gesse 感谢建议
    gvison
        6
    gvison  
    OP
       20 天前
    @millken perftest 与 K6 的侧重点不同,perftest 侧重从单测到集群测试都比较简单,不依赖第三方组件。使用 K6 测试简单 api 需要写 js 脚本,对于不熟悉 js 的后端来说不够友好,当然对于复杂的负载测试挺好的。因为 perftest 没有使用脚本,性能比 K6 好。
    millken
        7
    millken  
       19 天前
    k6 的报告输出可以自定义,配合 k8s 及 grafana 实现压测数据实时查看非常棒。
    JS 脚本我觉得也是最大的优势,给了开发者以最大的灵活度,特别是动态参数及多接口的情况下。

    我认为可以考虑支持脚本( QuickJS 集成也容易)以及多种报告格式支持
    millken
        8
    millken  
       19 天前
    此外压测策略也是一个特色,如模拟真实情况(前 1 分钟 10 并发, 后面 3 分钟 50 并发, 再来 5 分钟的 100 并发)
    gvison
        9
    gvison  
    OP
       19 天前
    @millken 额外集成 QuickJS 确实不难,这样与 K6 趋同化了,那就没必要重复造轮子了。
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   3538 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:15 · PVG 18:15 · LAX 03:15 · JFK 06:15
    ♥ Do have faith in what you're doing.