perfkitbenchmarker/data/locust/rampup.py (26 lines of code) (raw):

"""Locust file to simulate a "stepped" rampup of load.""" import locust class Rampup(locust.HttpUser): # Send 1QPS (per user) wait_time = locust.constant_throughput(1) @locust.task def rampup(self): # Close the connection after each request (or else users won't get load # balanced to new pods.) headers = {"Connection": "close"} self.client.get("/calculate", headers=headers) class StagesShape(locust.LoadTestShape): """Locust LoadTestShape to simulate a "stepped" rampup.""" # pyformat: disable # pylint: disable=bad-whitespace _stages = [ {"endtime": 60, "users": 1}, # 1 rps for 1m {"endtime": 360, "users": 20}, # 20 rps for 5m {"endtime": 420, "users": 40}, # 40 rps for 1m {"endtime": 480, "users": 60}, # 60 rps for 1m {"endtime": 540, "users": 90}, # 90 rps for 1m {"endtime": 660, "users": 120}, # 120 rps for 2m {"endtime": 780, "users": 150}, # 150 rps for 2m {"endtime": 900, "users": 1}, # 1 rps for 2m # -------------- # Total: 15m ] # pyformat: enable def tick(self): run_time = self.get_run_time() for stage in self._stages: if run_time < stage["endtime"]: user_count = stage["users"] spawn_rate = 100 # spawn all new users roughly immediately (over 1s) return (user_count, spawn_rate) return None