Stories

Detail Return Return

PerfTest:壓測工具的“瑞士軍刀”,覆蓋 HTTP/1/2/3 與 WebSocket,全程實時監控 - Stories Detail

前言

在每一位後端工程師的工具箱裏,總有那麼幾款壓測工具常年“上崗”。當我們想快速驗證一個接口性能時,可能會隨手敲下 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 Avatar meirenlidexiaomaju Avatar yuzhoustayhungry Avatar xuxueli Avatar gouguoyin Avatar smalike Avatar liberhome Avatar songzihuan Avatar wilburxu Avatar tangge Avatar
Favorites 10 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.