基準測試工具:Wrk初識
- 2019 年 12 月 2 日
- 筆記
最近和同事聊起常用的一些壓測工具,談到了Apache ab、阿里雲的PTS、Jmeter、Locust以及wrk各自的一些優缺點和適用的場景類型。這篇文章,簡單介紹下HTTP基準測試工具wrk的基本使用方法。。。
一、壓測工具對比
工具名稱 |
類型 |
多協議支援 |
優缺點 |
適用人群&場景 |
---|---|---|---|---|
Apache ab |
開源 |
HTTP |
Apache自帶源生測試工具,安裝部署簡單,不適合多協議及複雜場景 |
開發:單機&單介面性能基準驗證 |
PTS |
商業 |
多協議(支援不太好) |
阿里雲配套收費壓測工具,支援多協議鏈路壓測,功能完善 |
技術人員:基準&鏈路&高並發 |
Jmeter |
開源 |
多協議 |
使用率高&學習成本低,多協議複雜場景支援良好,受限於機制,資源損耗較高 |
技術人員:多場景&萬級以下並發全場景 |
Locust |
開源 |
多協議(需二次開發) |
python開源壓測框架,支援多協議&複雜場景(需二次開發,訂製化) |
技術人員:性能測試&支援程度取決於訂製開發 |
Wrk |
開源 |
HTTP |
HTTP基準測試工具,高並發低損耗,安裝部署簡單,不適合多協議及複雜場景 |
開發:單機&單介面性能基準驗證 |
二、簡介及安裝
1、簡介
Wrk是一個支援HTTP協議的基準測試工具,結合了多執行緒設計和可擴展事件通知,底層封裝epoll(linux)和kqueue(bsd),能用較少執行緒生成大量並發請求(使用了作業系統特定的高性能io機制)。
源生支援LuaJIT腳本,可以執行HTTP發起請求、響應處理和自定義測試報告;SCRIPTING有詳細說明,並且scripts中提供了幾個示例。
GitHub地址:https://github.com/wg/wrk
2、安裝
Point:wrk託管與github,前先安裝Git;依賴gcc和OpenSSL(阿里雲Centos服務默認已有)庫,如下載報錯,安裝即可!命令如下:
# 下載命令 git clone https://github.com/wg/wrk.git # 進入wrk文件夾 cd wrk # 編譯 make
編譯需要一定時間,耐心等待即可。編譯成功後,示例如下:

三、示例demo
1、參數說明
Usage: wrk <options> <url> Options: # 腳本開啟的HTTP連接數 -c, --connections <N> Connections to keep open # 測試腳本執行的時長 -d, --duration <T> Duration of test # 測試腳本使用的執行緒數 -t, --threads <N> Number of threads to use # 載入Lua腳本文件 -s, --script <S> Load Lua script file # 添加請求的資訊頭 -H, --header <H> Add header to request # 列印響應的詳細資訊 --latency Print latency statistics # 請求超時時間 --timeout <T> Socket/request timeout # 版本詳細資訊 -v, --version Print version details
2、示例腳本
[root@localhost wrk]# ./wrk -t4 -c100 -d60s --latency http://www.cnblogs.com/imyalost Running 1m test @ http://www.cnblogs.com/imyalost 4 threads and 100 connections Thread Stats Avg Stdev Max +/- Stdev Latency 196.87ms 318.88ms 1.90s 86.33% Req/Sec 316.86 220.75 3.19k 75.19% Latency Distribution 50% 5.73ms 75% 259.62ms 90% 615.77ms 99% 1.47s 73434 requests in 1.00m, 11.06MB read Socket errors: connect 0, read 2, write 0, timeout 267 Requests/sec: 1222.07 Transfer/sec: 188.51KB
結果解析:
4 threads and 100 connections :4個執行緒,發起100個http連接請求;
Thread Stats Avg Stdev Max +/- Stdev :測試結果統計(精簡版jmeter的聚合報告),分別是:平均值、標準偏差、最大值、偏差比(值越高表示測試結果離散程度越高,性能波動較大);
Latency :響應時間分布(即百分比響應時間範圍);
Req/Sec :每秒完成的請求數;
Latency Distribution :如上面的示例結果,分別代表50/75/90/99%響應時間在多少ms內;
73434 requests in 1.00m, 11.06MB read :本次測試共計在1min內發起73434個請求,總計讀取11.06MB的數據;
Socket errors: connect 0, read 2, write 0, timeout 267 :本次測試中,連接失敗0個,讀取錯誤2個,超時267個;
Requests/sec :所有執行緒平均每秒鐘完成1222.07個請求;
Transfer/sec :平均每秒讀取188.51KB數據(吞吐量);
3、更多用法
前文提到了wrk支援LuaJIT腳本,可以執行HTTP發起請求、響應處理和自定義測試報告,wrk提供的幾個lua函數作用如下:

是不是發現和selenium自動化很像,特別是setup和init函數(手動狗頭)。。。
以上就是關於基準測試工具Wrk的簡單用法和幾種常見的壓測工具對比,上面的腳本僅是個demo,具體使用方法請自行實踐。其實吧,我覺得這個工具更適合開發童鞋寫好一個新的介面後,自己測試一下,這樣也不用等出性能問題了才想起來要找性能測試同學壓測。。。