基准測試工具:Wrk初識


最近和同事聊起常用的一些壓測工具,談到了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地址: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,具體使用方法請自行實踐。。。

其實吧,我覺得這個工具更適合開發童鞋寫好一個新的接口后,自己測試一下,這樣也不用等出性能問題了才想起來要找性能測試同學壓測。。。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM