1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Posted at

#はじめに
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/

コメント 2020-08-31 115336.png

ユーザ数と、ユーザが立ち上がる速度を入力し、Startを押すと実行されます。(ホストはymlに設定したものが表示されます)

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?