https://note.com/shift_tech/n/n77be58376523
こんにちは。SHIFTのインフラ・アーキテクトの岡田です。
テストツールのLocustを使用してAPIの性能テストを行う機会がありました。そこで得た知見を、よく使用する機能に絞って紹介したいと思います。「Locustを使ってすぐに性能テストを始めたい!」という方の一助になれば幸いです。
Locust( https://locust.io/ )はWebアプリケーションやAPIの性能テストを行うための、オープンソースの負荷テストツールです。同様のものとしてはJMeterやk6などが有名ですが、Locustの特徴は何といってもPythonでテストスクリプトを書けることです。
テストスクリプトは普通のPythonプログラムなので、使い慣れたIDEはそのまま使用できます。また、Pythonの豊富なパッケージを使ってテスト結果を処理したり、CI/CDに性能テストを組み込むことなども出来ますね。
Locustのインストールは簡単です。Python(3.7以降)をインストールして、
$ pip3 install 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リクエストを発生させるユーザーを表すクラスですが、ブラウザーと考えればよいと思います。