負荷テストツール「Locust」を使ってみた

四角ズボン
2024-08-29
2024-08-29

Locust とは?

オープンソースの負荷テストツールで、以下の特徴があります。

  • Pythonでシナリオを作成
  • Web UIでテストの進行状況をリアルタイムで確認できる
  • 分散された負荷テストの実行をサポート

公式のDockerイメージが用意されているのでDockerで動かしてみました。

Dockerで動かしてみる

◆Dockerfile

FROM python:3.10-slim-buster

RUN apt-get update && apt-get install -y \
  build-essential && \
  pip install --upgrade pip \
  locust && \
  echo `python --version`

WORKDIR /app/src


◆docker-compose.yml

version: '3.8'

services:
  app:
    build: .
    ports:
      - 8089:8089
    tty: true
    volumes:
      - .:/app
  test:
    image: httpd:2.4.54
    ports:
      - 9999:80


◆locustfile.py

from locust import HttpUser, task, constant_pacing

class HelloWorld(HttpUser):
    #  1タスク = 1秒間に1回リクエストを送信する
    wait_time = constant_pacing(1)

    @task
    def helloworld(self):
        with self.client.get(url="/helloworld.html", catch_response=True) as response:
            if response.status_code != 200:
                response.failure(f"statusCode is {response.status_code}")

「locust」コマンドを実行すると、Locustサーバが起動します。

docker-compose up -d

docker exec -it locust-app-1 locust

ブラウザで localhost:8089 にアクセスすると、このような画面が表示されます。

locust(1)

Number of users:
 最大同時接続数
Spawn rate:
 1秒当たりに増やしていく接続数
Host:
 テスト対象のURL

今回はテスト対象のコンテンツもDockerの同じComposeに「test」という名前で用意しているので、Hostには「http://test」を設定しました。

「START」をクリックするとテストが開始します。

テストが開始すると、「STATISTICS」タブや「CHARTS」タブで疎通状況やレスポンス時間確認できます。

locust(2)

locust(3)
「STOP」をクリックするとテストが終了します。
「Download Date」タブではテスト結果をCSV形式でダウンロードできます。

locust(4)

「LOGS」タブではログを確認できます。

locust(5)

使ってみた感想

今回は負荷テストというよりも大量アクセスがあった状態での動作を確認する目的で使用したのですが、WEB UIがとても見やすく、ログで状態を確認できたり、とても使いやすかったです。
今回は触れませんでしたが、タスクの重みづけやシーケンシャルなテストなど、いろいろなケースに対応していて便利だと思いました。興味ある方は本家のサイトを見てみてください!

https://locust.io/