Published
- 4 min read
Python製負荷試験ツールLocustで、分散負荷試験環境を準備する
Locustでも、Jmeterのようなmaster×1-slave×N環境を準備できるということで、実際に分散負荷試験環境を構築するまでのメモ
参考サイト
Locust なる load testing tool Python 製の負荷試験ツール Locust を試してみた Running Locust distributed
Locustインストール
pipのインストール作業は割愛。
Locust自体のインストールは以下の2つがあれば十分なので、非常に簡単。
pip install pyzmq
pip install locustio
pyzmqをインストールせずにLocustを起動すると、以下のようなWARNINGが出力される。
Warning: WARNING: Using pure Python socket RPC implementation instead of zmq. If running in distributed mode, this could cause a performance decrease. We recommend you to install the pyzmq python package when running in distributed mode.
warnings.warn("WARNING: Using pure Python socket RPC implementation instead of zmq. If running in distributed mode, this could cause a performance decrease. We recommend you to install the pyzmq python package when running in distributed mode.")
なお、環境によっては、pyzmqインストール時に、
<code>gcc: error trying to exec 'cc1plus': execvp: そのようなファイルやディレクトリはありません</code>
というエラーが出る時があるので、こういったときはyum install gcc-c++
などで必要なライブラリをインストールしてあげる。
Locust設定
master-slave間は、ポート5557,5558を空けておく(デフォルト)
テストシナリオ準備
LocustはPythonでシナリオを記述できるということが、JmeterのXMLよりも開発者に優しい仕様。
今回は分散負荷試験環境を準備するまでがメインなので、サイトに直アクセスするだけのテストシナリオを準備した。
from locust import HttpLocust, TaskSet, task
class MyTaskSet(TaskSet):
@task(1)
def index(self):
self.client.get("/")
class MyLocust(HttpLocust):
task_set = MyTaskSet
Locust起動
master(10.127.29.162)
# locust -f test.py -H http://www.example.com --master
[2014-07-21 13:16:51,592] ip-10-127-29-162/INFO/locust.main: Starting web monitor at *:8089
[2014-07-21 13:16:51,596] ip-10-127-29-162/INFO/locust.main: Starting Locust 0.7.1
slave(10.172.132.249)
# locust -f test.py -H http://www.example.com --slave --master-host=10.127.29.162
[2014-07-21 13:17:07,447] ip-10-172-132-249/INFO/locust.main: Starting Locust 0.7.1
メモ
slaveの接続に成功すると、master側に以下のようなログが出力される。
[2014-07-21 13:17:07,454] ip-10-127-29-162/INFO/locust.runners: Client 'ip-10-172-132-249_5f40fc0bbaf6951a803e51d16dea946e' reported as ready. Currently 1 clients ready to swarm.
slaveがmasterから外されたときは、以下のようなログが出力される。
[2014-07-21 13:22:24,523] ip-10-127-29-162/INFO/locust.runners: Client 'ip-10-172-132-249_5f40fc0bbaf6951a803e51d16dea946e' quit. Currently 0 clients connected.
Locust起動画面
スタンドアローンでの起動画面
master-slaveでの起動画面(右上にslaveの数が記載される)
Locustの負荷試験中の画面
まとめ
起動オプションで、Locustの分散負荷試験環境が準備できた。
他の方が書いているように、Jmeterほど高機能さはないけど、簡単な負荷試験にはちょうどよさそう。
個人的には、以下の項目に該当するなら、Locustでの負荷試験を検討してもよいのではないかと思われる。
- JmeterのJavaヒープサイズまわりのチューニングが面倒くさい
- XMLでテストシナリオを管理したくない(≒Pythonで書きたい)
- Webで負荷がけ状況を把握したい(Jmeterのためだけに、X11設定するのが面倒くさい)
- 豪華なグラフなど、Jmeterほどしっかりした試験結果は不要