【ロカスト】

Locust とは?

最終更新:
💡 Pythonで行動を定め、負荷と応答を測る

Pythonで仮想ユーザーの行動を記述する負荷テストツール。HTTPリクエストなどを送って応答時間や失敗を集計し、WebUIやコマンドラインで実行できます。分散実行にも対応しますが、仮想ユーザー数と毎秒のリクエスト数は同じではありません。

📌 このページのポイント
Locust:制御と負荷生成を分けるマスター:制御・統計集約開始・停止を指示制御指示ワーカーA仮想ユーザーを実行ワーカーB仮想ユーザーを実行HTTPリクエストテスト対象サービスマスター自身は負荷を発生させないユーザー増加速度 ≠ 毎秒リクエスト数
上側は制御指示、下側はワーカーから対象へのHTTP通信です。統計はマスターへ戻ります(返送線は省略)。画面描画や業務の正しさは別に確認し、発生できる負荷も環境とシナリオによります。
ひよこ ひよこ
Locustは何を測るツール?
ペンギン先生 ペンギン先生
Pythonでユーザーの行動を記述し、対象へ負荷をかけて応答時間やリクエスト数、失敗などを集計するツールだよ。HTTPならHttpUserを使い、@taskで実行する行動を定める。通信を送るコードと、結果をどう判定するかを用意するんだ。
ひよこ ひよこ
Webページを開くブラウザと同じ?
ペンギン先生 ペンギン先生
HttpUserはHTTPクライアントで、ブラウザそのものではないよ。HTMLを取得しても、JavaScriptの実行や画面の描画、画像・CSSの追加取得をブラウザのように自動では行わない。どの通信を再現するのか、シナリオに明記しよう。
ひよこ ひよこ
画面で毎秒のリクエスト数を設定する?
ペンギン先生 ペンギン先生
基本の設定は仮想ユーザー数と、そのユーザーを毎秒何人増やすかを表すspawn rateだよ。spawn rateはリクエスト毎秒数のRPSではない。RPSはタスク内の通信回数、応答時間、タスク後の待ち時間などでも変わる。ユーザーを増やしても、対象が混雑するとRPSが増えない場合があるね。
ひよこ ひよこ
複数台で実行するとどうなるの?
ペンギン先生 ペンギン先生
分散モードではマスターが開始・停止を指示し、統計をまとめる。ワーカーが仮想ユーザーを動かして対象へ通信する。マスター自身は仮想ユーザーを実行しないんだ。発生できる負荷はCPUやシナリオなどに依存するので、固定の人数が必ず動くとは言えないよ。
ひよこ ひよこ
失敗が0なら、サービスは正しく動いた?
ペンギン先生 ペンギン先生
それだけでは不十分だよ。期待する内容が返ったかを確かめたい場合は、catch_responseなどで追加の判定をする。平均時間だけでなく遅い側の応答時間や失敗率も見よう。対象のCPUやDBなどの監視と、負荷を出す側が限界になっていないかの確認も役立つね。
ひよこ ひよこ
Pythonに慣れていたら、これで決まり?
ペンギン先生 ペンギン先生
候補にはなるけれど、対象のプロトコル、シナリオ、必要な負荷と運用に合うかを比べよう。WebUIを使わない実行もできる。試験は許可された環境で、開始・終了条件と負荷の上限を決めて行うことが必要だよ。
もっと詳しく知りたい人へ

Windowsでも、--processesで複数プロセスを起動できる?

公式資料では--processesはforkに依存し、Windowsでは動作しません。分散モード自体とこの補助オプションは別です。環境に応じてマスターとワーカーを個別に起動するなど、対応する方法を確認します。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Locust」って出てきたら「Pythonで行動を定める負荷テストツール」と思えばだいたいOK!
📖 おまけ:英語の意味
「Locust」 = イナゴ・バッタ
💬 英単語のlocustはイナゴやバッタを表します。ツール名から性能や、再現できるユーザー数の保証を読み取るものではありません。

参考資料

← 用語集にもどる