基準測試工具: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,具體使用方法請自行實踐。其實吧,我覺得這個工具更適合開發童鞋寫好一個新的介面後,自己測試一下,這樣也不用等出性能問題了才想起來要找性能測試同學壓測。。。