PerfTest 轻量级高性能开源压测工具,支持 HTTP/1/2/3 与 WebSocket,还能分布式集群压测 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
gvison
V2EX    Go 编程语言
  •  
  •   gvison 86 天前 1853 次点击
    这是一个创建于 86 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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  
       86 天前
    赞,star
    gesse
        2
    gesse  
       85 天前

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

    我认为可以考虑支持脚本( QuickJS 集成也容易)以及多种报告格式支持
    millken
        8
    millken  
       85 天前
    此外压测策略也是一个特色,如模拟真实情况(前 1 分钟 10 并发, 后面 3 分钟 50 并发, 再来 5 分钟的 100 并发)
    gvison
        9
    gvison  
    OP
       84 天前
    @millken 额外集成 QuickJS 确实不难,这样与 K6 趋同化了,那就没必要重复造轮子了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4819 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 01:11 PVG 09:11 LAX 17:11 JFK 20:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86