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("/",)
結果
参考情報
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