Locustで時間に応じて一定のRPSをかける

概要

Locustで時間に応じて一定のrpsを流す

結論

constant_pacingとLoadTestShapeを利用する。

バージョン

  • Locust v1.6.0

  • 120秒かけて0->100rpsまで上げる
  • 120秒間100rpsをかける
  • 120秒かけて100->1rpsまで下げる

1秒に1回タスクを実行するようにして、ユーザ数を増やしていけば目的のRPSを達成できる。

from locust import HttpUser, task, constant_pacing, LoadTestShape

class CustomShape(LoadTestShape):
    stages = [
        {"duration": 120, "users": 100, "spawn_rate": 1},
        {"duration": 240, "users": 100, "spawn_rate": 0},
        {"duration": 360, "users": 1, "spawn_rate": 1},
    ]

    def tick(self):
        run_time = self.get_run_time()

        for stage in self.stages:
            if run_time < stage["duration"]:
                tick_data = (stage["users"], stage["spawn_rate"])
                return tick_data

        return None


class GuestPcUser(HttpUser):
    wait_time = constant_pacing(1)

    host = "http://localhost:3000"

    @task
    def task(self):
        name = self.host

        self.client.get("/",)

結果

f:id:mMQnaZ7vL2DWkoU:20210726194836p:plain
Locustのレポート

参考情報

https://github.com/locustio/locust/issues/277#issuecomment-812831204
https://docs.locust.io/en/stable/api.html#locust.wait_time.constant_pacing
https://github.com/locustio/locust/blob/master/examples/custom_shape/stages.py