基準測試工具:Wrk初識
最近和同事聊起經常使用的一些壓測工具,談到了Apache ab、阿里雲的PTS、Jmeter、Locust以及wrk各自的一些優缺點和適用的場景類型。html
這篇博客,簡單介紹下HTTP基準測試工具wrk的基本使用方法。。。python
1、壓測工具對比linux
工具名稱 | 類型 | 多協議支持 | 優缺點 | 適用人羣&場景 |
Apache ab | 開源 | HTTP | Apache自帶源生測試工具,安裝部署簡單,不適合多協議及複雜場景 | 開發:單機&單接口性能基準驗證 |
PTS | 商業 | 多協議(支持不太好) | 阿里雲配套收費壓測工具,支持多協議鏈路壓測,功能完善 | 技術人員:基準&鏈路&高併發 |
Jmeter | 開源 | 多協議 | 使用率高&學習成本低,多協議複雜場景支持良好,受限於機制,資源損耗較高 | 技術人員:多場景&萬級如下併發全場景 |
Locust | 開源 | 多協議(需二次開發) | python開源壓測框架,支持多協議&複雜場景(需二次開發,定製化) | 技術人員:性能測試&支持程度取決於定製開發 |
Wrk | 開源 | HTTP | HTTP基準測試工具,高併發低損耗,安裝部署簡單,不適合多協議及複雜場景 | 開發:單機&單接口性能基準驗證 |
2、簡介及安裝git
一、簡介github
Wrk是一個支持HTTP協議的基準測試工具,結合了多線程設計和可擴展事件通知,底層封裝epoll(linux)和kqueue(bsd),能用較少線程生成大量併發請求(使用了操做系統特定的高性能io機制)。多線程
源生支持LuaJIT腳本,能夠執行HTTP發起請求、響應處理和自定義測試報告;SCRIPTING有詳細說明,而且scripts中提供了幾個示例。併發
GitHub地址:Wrk框架
二、安裝函數
Point:wrk託管與github,前先安裝Git;依賴gcc和OpenSSL(阿里雲Centos服務默認已有)庫,以下載報錯,安裝便可!命令以下:高併發
# 下載命令 git clone https://github.com/wg/wrk.git # 進入wrk文件夾 cd wrk # 編譯 make
編譯須要必定時間,耐心等待便可。編譯成功後,示例以下:
3、示例demo
一、參數說明
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
二、示例腳本
[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數據(吞吐量);
三、更多用法
前文提到了wrk支持LuaJIT腳本,能夠執行HTTP發起請求、響應處理和自定義測試報告,wrk提供的幾個lua函數做用以下:
是否是發現和selenium自動化很像,特別是setup和init函數(手動狗頭)。。。
以上就是關於基準測試工具Wrk的簡單用法和幾種常見的壓測工具對比,上面的腳本僅是個demo,具體使用方法請自行實踐。。。
其實吧,我以爲這個工具更適合開發童鞋寫好一個新的接口後,本身測試一下,這樣也不用等出性能問題了纔想起來要找性能測試同窗壓測。。。