Azure Load Testing で Locust がプレビューサポートされていたので使ってみた
いわさです。
Microsoft Azure には Azure Load Testing というフルマネージドは負荷テスト向けサービスがあります。
このサービス、これまで JMeter スクリプトが前提だったのですが、先日眺めているとなんと Locust に対応しているようでした。(プレビュー)
Locust は Python で実行できるオープンソースの負荷テストツールです。
JMeter は多様なプロトコルやシナリオが最初から用意されていますが、Locust は使い慣れた Python でテストシナリオを記述することができます。
ということで早速使ってみます。
ローカル環境で Locust スクリプトを作成
今回はじめて Locust を使うのでまずはローカル環境(macOS)で環境を用意しスクリプトを作成します。
前提として Python が必要となりますが、そこのセットアップは割愛します。
pip で locust をインストールするだけです。公式手順は以下です。
% pip install locust
Collecting locust
Using cached locust-2.33.0-py3-none-any.whl.metadata (9.6 kB)
:
Successfully installed locust-2.33.0
[notice] A new release of pip is available: 24.3.1 -> 25.0.1
[notice] To update, run: pip install --upgrade pip
% locust --version
locust 2.33.0 from /Users/iwasa.takahito/.pyenv/versions/3.9.8/lib/python3.9/site-packages/locust (Python 3.9.8)
続いてスクリプトを作成します。ここも公式のクイックスタートドキュメントを元に作成します。
今回は"/"
への GET だけ実装します。
こんな漢字です。
from locust import HttpUser, task
class HelloWorldUser(HttpUser):
@task
def hello_world(self):
self.client.get("/")
特にホスト名や負荷のパラメータの指定は無いですね。これはこのあと実行時に指定する感じです。
まず、locust
コマンドを実行します。
% locust
[2025-03-02 06:02:23,123] HOGEHOGE/INFO/locust.main: Starting Locust 2.33.0
[2025-03-02 06:02:23,123] HOGEHOGE/WARNING/locust.main: Python 3.9 support is deprecated and will be removed soon
[2025-03-02 06:02:23,474] HOGEHOGE/INFO/locust.main: Starting web interface at http://0.0.0.0:8089, press enter to open your default browser.
そうするとローカルで Web インターフェース(ここではhttp://0.0.0.0:8089
)が起動できるようになります。アクセスしてみましょう。
ユーザー数やホスト名など負荷テストに必要な基本パラメータをここで指定します。
負荷テストシナリオの大部分をスクリプトで指定し、ホスト名や負荷の度合いなどは Web インターフェースで調整する感じですね。
「START」から実行してみます。
実行されました。
Locust 初めて使ったのですが、これは良いですね。シンプルで使いやすいです。
Azure Load Testing で使う
ローカル環境で Locust スクリプトの作成と実行を試すことが出来ました。
Azure Load Testing でこのテスト実行環境をスケールさせることが出来ます。やってみましょう。
Azure Load Testing でテストの作成を開始します。
テスト計画タブにてまずはスクリプトのアップロードを行います。
ロードテストフレームワークに「Locust (Preview)」を指定し、先ほどローカルで作成したスクリプトをアップロードします。
「パラメータ」タブで環境変数が設定されており、これが先程のローカルでの Web インターフェースで入力した負荷パラメータに該当します。
ただし、ここでは編集が出来ませんでした。次の「読み込み」タブを使ってパラメータの調整が可能です。
こちらでパラメータを変更します。。以下の赤枠部分は Web インターフェースと同じですね。
あとは Azure Load Testing として指定できるエンジンインスタンス数や複数リージョンを使った地理的分散機能などなど指定できます。
テストが作成できました。
テスト一覧を見てみるとテストの種類として「Locust」と表示されるようになっていますね。なるほど。
さて、早速テストを実行してみましょう。
今回の負荷パラメータは最小で 1 User - 1 Ramp up - 1 min です。
この構成で、テスト実行からリクエスト送信が開始されるまで 1 分くらいかかりました。プロビジョニング周りの時間ってところでしょうか。
無事テスト完了しました。
しっかり比較してないですが JMeter と同じようにクライアントメトリクスが確認できますね。
今回は負荷をかける対象が AWS でホスティングしている環境だったのでサーバーメトリクスが取れていないですが、Azure コンポーネントを連携する従来の機能も使えそうでした。
さいごに
本日は Azure Load Testing で Locust がプレビューサポートされていたので使ってみました。
まだプレビューですが、Locust でテストを行っている方は試す価値ありだと思いますし、個人的には Python でテストシナリオを記述できるのはシンプルで良いなと思っており、ちょっと使ってみたいと思います。
ちなみに、Locust には Locust Cloud という、Locust の負荷テストをクラウド環境で実行するための有償マネージドサービスも提供されています。
ここでは競合サービス同士の直接的な比較は避けますが Azure Load Testing の検討にあたってはこのあたりのサービスとの機能差なども見てみると良いのではないでしょうか。