Go 每日一庫之 vegeta — http 壓力測試工具庫

今天給大家推薦的是一個對 HTTP 接口做壓力測試的工具:vegeta

項目地址:https://github.com/tsenart/vegeta

一、特點

二、安裝

2.1 MacOS 下安裝

macos 下使用 brew 即可安裝,如下:

brew update && brew install vegeta

2.2 Arch Linux 下安裝

pacman -S vegeta

2.3 FreeBSD 下安裝

pkg install vegeta

2.4 自行編譯

git clone https://github.com/tsenart/vegeta
cd vegeta
make vegeta
mv vegeta ~/bin # Or elsewhere, up to you.

三、使用教程

vegeta 工具主要有 4 個子命令組成,分別是 attackencodereportplot

3.1 指定壓測的接口地址

在指定壓測地址時有兩種方式:通過標準的 stdin 和指定具體的文件。

echo "GET https://www.baidu.com" | vegeta attack -duration=5s

如上所示,通過管道的方式將要壓測的接口地址輸出給 vegeta 的 attack 命令。這裏需要注意,在指定壓測接口時,一定要指定請求的方法,同時請求方法必須都是大寫。例如 GET、POST。而 Get 或 Post 則是無效的方法。

通過文件可以指定一個或多個要壓測的 url 地址。指定格式如下:

GET https://foo.bar/a/b/c
Header-X: 123
Header-Y: 321

POST https://foo.bar/b/c/a
Header-X: 123
@/path/to/body/file

在文件中,通過空行來區分兩個 url 的部分。每個 url 部分以方法名和 url 地址開頭,後續可以跟着對應的 Header 頭信息。在 POST 請求中,可以通過 @指定具體的 body 體內容的文件。

3.2 指定 body 體內容

要指定 body 體,只能通過文件的方式來指定。vegeta attack 有兩種方式來指定 body 的文件名。第一種是剛纔上面提到,在 targets 的文件中,可以通過 “@” 符號來指定對應的 body 體。第二種是通過命令行參數-body指定一個文件名:

vegeta attack -body

3.3 指定接口返回內容爲止

通過 vegeta encode 子命令來指定接口自身輸出的內容(即接口的響應值)被保存的位置以及輸出內容的格式(csv、json 等) 這裏主要有兩個參數項:

3.4 生成測試報告

vegeta 的測試報告是通過report子命令來生成的。該命令的輸入數據是 encode 子命令產生的輸出。如下示例所示:

sh-3.2# echo "GET https://www.baidu.com" | vegeta attack -duration=5s | vegeta report
Requests      [total, rate, throughput]         250, 50.21, 49.11
Duration      [total, attack, wait]             5.09s, 4.979s, 111.653ms
Latencies     [min, mean, 50, 90, 95, 99, max]  18.132ms, 32.41ms, 21.998ms, 55.54ms, 106.41ms, 171.889ms, 276.545ms
Bytes In      [total, mean]                     56750, 227.00
Bytes Out     [total, mean]                     0, 0.00
Success       [ratio]                           100.00%
Status Codes  [code:count]                      200:250

可以看到,在報表中輸出的信息有:

通過 - type 參數可以按響應時間區間統計,如下:

sh-3.2# echo "GET https://www.baidu.com" | vegeta attack -duration=5s | vegeta report -type="hist[0,100ms,200ms,300ms]"
Bucket           #    %       Histogram
[0s,     100ms]  247  98.80%  ##########################################################################
[100ms,  200ms]  3    1.20%   
[200ms,  300ms]  0    0.00%   
[300ms,  +Inf]   0    0.00%

按不同的響應時間的區間統計響應的結果量。

四、總結

vegeta 是一個命令行的工具。一個壓測工具最基本的功能就是輸入 url 及參數、啓動指定量的協程來進行壓力測試,同時把響應結果保存下來,並以報表的形式進行統計輸出。同時,該開源包也是大家學習使用 golang 進行命令行開發較好的參考。建議有興趣的朋友可以閱讀下源碼。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/am9dfFLnRE51ETwEnsOu2w