Skip to content

Webサーバの負荷・ロードテストツール(2)「Locust」

by : 2015/08/14

LocustはPythonで制作されたWebサーバの負荷テストツールの一つで、MasterとSlaveによる分散テストも可能なツールとなっています。

はじめに(ご注意ください!)

今回紹介するテストツールは、DOS攻撃にも利用出来てしまいます。テストを行う時は、サーバのURLが正しいか注意し、他人のサーバに間違ってもアクセスしないようにくれぐれもご注意願います。

インストール

インストールはPythonが実行出来る環境が必要です。またここでは、パッケージ管理の「pip」を利用していますが、ここでは割愛しますので予め用意して下さい。

pipを使ってlocust本体とpyzmqをインストールします。

$ pip install locustio
$ pip install pyzmq

テストシナリオの設定

Locustはテストシナリオの設定ファイルが必要になります。設定ファイルは「locustfile.py」として保存すると、実行時に設定ファイルを読み込んでくれます。

以下は単純にサイトを読み込むだけの、極簡単なスクリプトです。

from locust import HttpLocust, TaskSet, task

class WebsiteTasks(TaskSet):

    @task(1)
    def index(self):
        self.client.get("/")

    @task(2)
    def search(self):
        self.client.get("/search.html")

class WebsiteUser(HttpLocust):
    task_set = WebsiteTasks
    min_wait = 5000
    max_wait = 15000

設定ファイルの説明

  • WebsiteTasksクラスは、各タスクを設定するクラスです。TaskSetクラスを継承しています。@taskの括弧内の数値は、重み付けです。@task(2)は、@task(1)に対して、約倍の実行比率となります。

    self.client.get()には、テストサイトのGETメソッド・パラメータを記述します。

  • WebsiteUserクラスが実行時のクラスです。HttpLocustクラスを継承しています。task_setに、上記WebsiteTasksクラスを設定します。

    min_wait、max_waitについては、それぞれタスクの待ち時間をミリ秒で設定します。

これ以外にも、Basic認証などの設定などや、CSVなどで記述したテストデータを外部から取込み、その情報を元に繰り返しテストすることもできます。テストはスクリプトで記述できるので、柔軟にテスト設計ができると思います。

実行方法

基本の実行コマンドは、以下の通りです。実行時のカレントディレクトリにあるテストシナリオファイルの「locustfile.py」を読み込みます。

$ locust -H http://test-site.xxx

別のシナリオファイルを読み込む場合は、-f オプションを設定します。

$ locust -f test.py -H http://test-site.xxx

その他のオプションパラメータ

locustの代表的なオプションを例に挙げます。

オプション 説明
-H HOST テストサイトのURL
-P PORT テストサイトのポート番号
-f LOCUSTFILE Locustの設定ファイル
–no-web CLIとして稼働させる場合に設定(-c、-rが必要です)
-c NUM_CLIENTS クライアント数を設定
-r HATCH_RATE Hatch rate(1秒間に作成するユーザ数)を設定
–web-port=PORT WEBコンソール画面のポート番号(デフォルトは8089)

実行画面

スタンドアローンでのWEB実行画面です。デフォルトでは、「http://localhost:8089」で接続出来ます。

locust first
locust first
  • Number of users to simulate(シミュレートするユーザ数)
  • Hatch rate(1秒間に作成するユーザ数)

それぞれ、値を設定してから、「Start swarming」をクリックします。

実行中の画面です

locust start
locust start
  • 随時、結果は更新されていきます。
  • Stopボタンを押すことで、テストを停止します。

実行後の画面です。

locust finish
locust finish
  • 結果はメニューの「Download Data」から、CSVなどでダウンロードも可能です。

分散環境テスト

疑似高負荷環境を作成する時は、さすがに端末が1台だけでは無理があります。 実際、高負荷設定でLocustを動かすと、端末にかなりの負荷が掛かります。Locustでは、複数台の端末を利用しアクセスすることで、アクセスを分散する事が可能です。

実行方法は、1台の端末(Master)に対して、複数の端末(Slave)を用意するだけです。

Masterの端末

マスターとしてlocustを起動します。

$ locust -H http://test-site.xxx --master

Slave側の端末

Slaveとしてlocustを起動します。–master-hostパラメータでMasterのURLかIPを指定します。

$ locust -H http://test-site.xxx --slave --master-host=xxx.xxx.xxx.xxx

まとめ

テストシナリオファイルはPythonスクリプトで記述していますが、簡単に動かすだけであれば、Pythonになれていない方でも、すぐに理解出来るでしょう。

テストはスクリプトでコントロールしますので、柔軟にテスト設計ができることが、このツールの強みだと思います。

また、高負荷のテストを行う場合にも、分散環境が用意されていますので、他の負荷テストツールと比較しても十分な性能をもったツールと言えるでしょう。

参考

From → テスト

現在コメントは受け付けていません。

%d人のブロガーが「いいね」をつけました。