#はじめに
Webシステムの開発では、想定どおりの動きをするかだけでなく、どれくらいの負荷にたえられるのかについても、事前に把握しておく必要があるのではないかと思います。
今回は、負荷試験ツールであるLocustをDockerに構築して、まず動かしてみるところを行いたいと思います。
#Locustの特徴
- シナリオをPythonスクリプトで記述するため、柔軟なシナリオを作成可能
- 試験シナリオがスクリプトであるため、ソースコード管理が可能
- 必要なサーバリソースが少ないため、少ない攻撃サーバで負荷をかけやすい
- 結果表示がシンプル
#環境
- Dockerのversionは19.03.12です。
- Locustのversionは1.1です。
クライアントのPCはWindows10Proになります。
#公式ドキュメント等
公式ドキュメント等は以下となります。
#構築手順
1.DockerDesktopをインストール
以下からDockerDeskTopをインストールします。
https://www.docker.com/products/docker-desktop
2.docker-compose.ymlファイルの入手
任意の場所にフォルダを作成し、以下から、docker-compose.ymlファイルをダウンロードします。
https://github.com/locustio/locust/tree/master/examples/docker-compose
masterのコマンドの-Hの部分はテストを行うページに変更します。
version: "3"
services:
web:
build:
context: ./apache-php
ports:
- 80:80
privileged: true
links:
- db
volumes:
- "./lara-d/:/var/www/html"
- "./apache-php/apache.conf:/etc/httpd/conf/httpd.conf"
container_name: "apache-php"
version: '3'
services:
master:
image: locustio/locust
ports:
- "8089:8089"
volumes:
- ./:/mnt/locust
command: -f /mnt/locust/locustfile.py --master -H http://master:8089
worker:
image: locustio/locust
volumes:
- ./:/mnt/locust
command: -f /mnt/locust/locustfile.py --worker --master-host master
3.locustfile.pyの作成
locustfile.pyはシナリオを記述するファイルで、docker-compose.ymlと同じ場所に配置します。
今回は、簡単なHTTPリクエストを行うためのスクリプトを作成します。
from locust import HttpUser, task, between
class MyUser(HttpUser):
wait_time = between(5, 10) #userを立ち上げるタイミングを指定
@task(1)
def index(self):
url = '/api/test.php' #負荷をかける箇所を指定
params = {'id':'0001'} #必要に応じてパラメータを指定
headers = {'x-api-key':'***********'} #必要に応じてheader項目を付与
self.client.get(url=url,params=params,headers=headers) #GETリクエストを送信
#実行方法
1.Dockerの起動
コマンドプロンプトを開き、docker-compose.ymlを配置したフォルダに移動し、以下のコマンドを実行します。
docker-compose up -d
Workerを増やして、負荷を並列に行いたい場合は、起動時に指定します。
ymlファイルに書いても大丈夫だと思います。
docker-compose up -d --scale worker=3
2.パラメータ設定
Dockerを起動したら、ブラウザでLocustを表示する。
http://localhost:8089/
ユーザ数と、ユーザが立ち上がる速度を入力し、Startを押すと実行されます。(ホストはymlに設定したものが表示されます)