以前から名前は知ってたけど、パフォーマンステストをするのに Vegeta が手軽に使えて便利そう。README にだいたい書いてあるけど取り急ぎ使いそうなところだけ備忘録。
$ brew update && brew install vegeta
$ echo "GET http://localhost:8080/" | \ vegeta attack -rate=10 -duration=60s | \ tee results.bin | \ vegeta report
-rate
は単位時間あたりのリクエスト数。デフォルトは秒間。分間で指定する場合は -rate=10/m
のように書けばよさそう。-duration
はテストの実行期間。
リクエストヘッダは -header
で指定する。例えば、Authorization
ヘッダを付ける場合はこんな感じ。
$ echo "GET http://localhost:8080/" | \ vegeta attack -header "authorization: Basic $(echo -n '{username}:{password}' | base64)" -rate=10 -duration=60s | \ ...
実行結果を vegeta report
で出力するとこんな感じ。
Requests [total, rate, throughput] 600, 10.02, 10.01 Duration [total, attack, wait] 59.956s, 59.902s, 54.164ms Latencies [min, mean, 50, 90, 95, 99, max] 38.694ms, 56.504ms, 49.225ms, 70.715ms, 85.368ms, 175.937ms, 576.39ms Bytes In [total, mean] 1059600, 1766.00 Bytes Out [total, mean] 0, 0.00 Success [ratio] 100.00% Status Codes [code:count] 200:600 Error Set:
Requests
Duration
total
: テスト実行時間の合計 (attack
+wait
)attack
: すべてのリクエスト送信にかかった時間 (total
-wait
)wait
: レスポンスが返るまでの時間 (total
-attack
)
Latencies
min
,mean
,max
: レイテンシの最小値, 平均値, 最大値50
,90
,95
,99
: パーセンタイル
Bytes In
,Bytes Out
total
,mean
: リクエストボディ, レスポンスボディのバイト数の合計, 平均値
Success
Status Codes
code:count
: ステータスコードの分布
Error Set
: エラーレスポンスのステータスコードが列挙される
vegeta plot
で実行結果をグラフ表示できる。
$ cat results.bin | vegeta plot > plot.html
現場からは以上です。