前言
在每一位後端工程師的工具箱裏,總有那麼幾款壓測工具常年“上崗”。當我們想快速驗證一個接口性能時,可能會隨手敲下 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 在某些特定場景下,它可能是你最高效的選擇:
- 擁抱未來,測試前沿協議:當你的服務已經支持 HTTP/3 或者正在使用 gRPC-Web (其底層依賴 HTTP/2 或更高版本),
perftest可以讓你輕鬆驗證新技術帶來的性能收益。 - 實時通信服務壓測:你的應用有聊天室、實時行情、協同編輯等 WebSocket 場景嗎?
perftest可以模擬大量客户端連接和高頻消息轟炸,真實檢驗你的後端承載能力。 - CI/CD 裏的“性能哨兵”:在你的自動化部署流水線中加入
perftest的一個步驟。每次代碼合併後,自動對核心接口進行一輪基準測試,並將數據推送到 Prometheus。通過設定告警,就能在性能發生衰退時第一時間發現問題。 - 快速、簡單的性能驗證:不想為了一個簡單的接口測試而去寫一整個
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 替換為 http2 或 http3 即可,其他參數保持不變,簡單直觀。
如果想實時推送統計數據給 Prometheus,需要添加 2 個參數 --prometheus-job-name 和 push-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
如果認為命令行測試較為繁瑣,我們還提供一種更簡便的測試方式:您只需在頁面中填寫相應參數即可開始測試。參數設置與命令行完全一致,並且同樣支持隨時終止測試。具體步驟如下:
-
打開 sponge UI 頁面
sponge run - 在左邊菜單點擊【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的定位非常清晰,在兩個維度上做到極致:- 最前沿的協議支持:當你的團隊在探索 HTTP/3 帶來的性能提升時,
perftest是市面上為數不多能讓你“開箱即用”進行測試的工具。 - 最原生的監控集成:它沒有像
k6那樣構建一個龐大的輸出生態系統,而是直擊痛點,原生支持了當前雲原生領域的事實標準——Prometheus。這種“少即是多”的哲學,讓集成工作變得異常簡單。
- 最前沿的協議支持:當你的團隊在探索 HTTP/3 帶來的性能提升時,
結論
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