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 にアクセスすると、このような画面が表示されます。
Number of users:
最大同時接続数
Spawn rate:
1秒当たりに増やしていく接続数
Host:
テスト対象のURL
今回はテスト対象のコンテンツもDockerの同じComposeに「test」という名前で用意しているので、Hostには「http://test」を設定しました。
「START」をクリックするとテストが開始します。
テストが開始すると、「STATISTICS」タブや「CHARTS」タブで疎通状況やレスポンス時間確認できます。
「STOP」をクリックするとテストが終了します。
「Download Date」タブではテスト結果をCSV形式でダウンロードできます。
「LOGS」タブではログを確認できます。
使ってみた感想
今回は負荷テストというよりも大量アクセスがあった状態での動作を確認する目的で使用したのですが、WEB UIがとても見やすく、ログで状態を確認できたり、とても使いやすかったです。
今回は触れませんでしたが、タスクの重みづけやシーケンシャルなテストなど、いろいろなケースに対応していて便利だと思いました。興味ある方は本家のサイトを見てみてください!
https://locust.io/