https://note.com/shift_tech/n/n77be58376523

はじめに

こんにちは。SHIFTのインフラ・アーキテクトの岡田です。

テストツールのLocustを使用してAPIの性能テストを行う機会がありました。そこで得た知見を、よく使用する機能に絞って紹介したいと思います。「Locustを使ってすぐに性能テストを始めたい!」という方の一助になれば幸いです。

Locustって何?

Locust( https://locust.io/ )はWebアプリケーションやAPIの性能テストを行うための、オープンソースの負荷テストツールです。同様のものとしてはJMeterやk6などが有名ですが、Locustの特徴は何といってもPythonでテストスクリプトを書けることです。

テストスクリプトは普通のPythonプログラムなので、使い慣れたIDEはそのまま使用できます。また、Pythonの豊富なパッケージを使ってテスト結果を処理したり、CI/CDに性能テストを組み込むことなども出来ますね。

Locustのインストールは簡単です。Python(3.7以降)をインストールして、

$ pip3 install locust

を実行するだけです。

Locustプログラミングのお作法

Hello Locust

それでは早速Locustのテストスクリプトを作ってみましょう。ターゲットとなるアプリケーションのURLは

<https://example.com/test/locust-test>

で、メソッドはGETだとします。 本ブログではこのアプリケーションを例として、それに負荷をかけるためのLocustスクリプトをいくつか紹介していきますが、example.comは架空のものです。スクリプトを実行する際はご自身でテスト用のAPIをご用意ください。

まず、このアプリケーションに対して負荷をかけるための、(ほぼ)ミニマムのLocustスクリプトを次に示します。

from locust import HttpUser, task, constant_throughput                   hellolocust.py

class HelloLocust(HttpUser):
    host = "<https://example.com>"
    wait_time = constant_throughput(1)

    @task(1)
    def hello_locust(self):
        with self.client.get("/test/locust-test", catch_response=True) as response:
            if response.status_code != 200:
                response.failure("statusCode is not 200")

このようにLocustスクリプトでは、HttpUserを継承したクラスを作成します。HttpUserはHTTPリクエストを発生させるユーザーを表すクラスですが、ブラウザーと考えればよいと思います。