負荷試験ツールのLocust1.1をDockerに構築


はじめに

Webシステムの開発では、想定どおりの動きをするかだけでなく、どれくらいの負荷にたえられるのかについても、事前に把握しておく必要があるのではないかと思います。

今回は、負荷試験ツールであるLocustをDockerに構築して、まず動かしてみるところを行いたいと思います。

Locustの特徴

  • シナリオをPythonスクリプトで記述するため、柔軟なシナリオを作成可能
  • 試験シナリオがスクリプトであるため、ソースコード管理が可能
  • 必要なサーバリソースが少ないため、少ない攻撃サーバで負荷をかけやすい
  • 結果表示がシンプル

環境

  • Dockerのversionは19.03.12です。
  • Locustのversionは1.1です。

クライアントのPCはWindows10Proになります。

公式ドキュメント等

公式ドキュメント等は以下となります。

Locust公式ドキュメント
Locust github

構築手順

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に設定したものが表示されます)