動態

詳情 返回 返回

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

[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 / 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 的定位非常清晰,在兩個維度上做到極致:

    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/sponge

user avatar aliterminal 頭像 meirenlidexiaomaju 頭像 yuzhoustayhungry 頭像 xuxueli 頭像 gouguoyin 頭像 smalike 頭像 liberhome 頭像 songzihuan 頭像 wilburxu 頭像 tangge 頭像
點贊 10 用戶, 點贊了這篇動態!
點贊

Add a new 評論

Some HTML is okay.