🚗

Locustで負荷テストをやってみる

2024/12/26に公開

はじめに

Locustという負荷テストツールについて紹介します。
立ち上げ方法と、レポートの出力方法について記載します。

Locustについて

locust.io
Pythonでリクエストを定義することのできる負荷テストツールです。
立ち上げた後はWeb UIで操作し、リアルタイムでグラフを表示することができます。
もちろんレポートの出力も可能です。

環境準備

今回はローカルにインストールして動かします。
こちらのページにある通り、以下コマンドでインストールします。

pip install locust

負荷テストのリクエスト内容を記載する。

今回はGETリクエストの簡単なテストを書いてみます。
クエリパラメータやヘッダーの設定はもちろん可能です。
ログ出力もできるので、リクエスト失敗時に詳細が出るようにすると良さそうです。

hoge.py
from locust import HttpUser, task, constant_pacing
import json
import logging

# ログ出力の設定
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

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

    @task
    def get_test(self):
        # クエリパラメータを辞書形式で指定
        params = {
            "fuga": "aaa",
        }
        # 必要なヘッダーを辞書形式で指定
        headers = {
            "Content-Type": "application/json",
            "X-Api-Version": "2.0"
        }
        with self.client.get(
            "/hoge",
            params=params,
            headers=headers,
            catch_response=True) as response:

            # レスポンスの詳細をログ出力
            if response.status_code == 200:
                response.success()
            else:
                response.failure("Failed to post data.")
                logging.info(f"Response status code: {response.status_code}")
                logging.info(f"Response headers: {response.headers}")
                logging.info(f"Response content: {response.text}")

立ち上げる

上記ファイルを置いたパスで以下を実行することで立ち上がります。

locust -f hoge.py
[2024-12-26 07:47:38,314] user/INFO/locust.main: Starting Locust 2.32.4
[2024-12-26 07:47:38,315] user/INFO/locust.main: Starting web interface at http://0.0.0.0:8089

記載されている通り、http://0.0.0.0:8089にアクセスするとWeb UIが立ち上がります。

リクエスト前の設定

それぞれ以下のフォームに設定を入力します。

  • Number of users(peak concurrency):最大同時アクセス数
  • Ramp up(users started/second):1秒ごとに増加させるアクセス数
  • Host:ベースのURL
  • Advanced options
    • Run time:実行時間

実行する

実行開始すると以下のように実行画面に遷移します。

リアルタイムのグラフを見ることができます。

DOWNLOAD DATEからレポートを出力することもできます。

出力されたレポート↓

まとめ

Locustによる負荷テストツールをご紹介しました。
個人的に以下のメリットを感じました。

  • Pythonで自由度高くテストのシナリオを作成できる
  • UIがシンプルで使いやすい

以上です!

Discussion