'Custom rate for adding user to test process in locust

I'm pretty new to locust and load testing, I need to write a load test that should be for a total of 30 users, these users should be added to the test step by step and 3 users per minute, and at a time of 30 users at the same time, the test should be running for 5 minutes.Is there any way that I can do this?



Solution 1:[1]

for this timing that's enough to add a LoadTestShape class to locustfile.py like below:

class StagesShape(LoadTestShape):
    """
    A simply load test shape class that has different user and spawn_rate at
    different stages.
    Keyword arguments:
        stages -- A list of dicts, each representing a stage with the following keys:
            duration -- When this many seconds pass the test is advanced to the next stage
            users -- Total user count
            spawn_rate -- Number of users to start/stop per second
            stop -- A boolean that can stop that test at a specific stage
        stop_at_end -- Can be set to stop once all stages have run.
    """

    stages = [
        {"duration": 60, "users": 3, "spawn_rate": 0.05},
        {"duration": 60, "users": 6, "spawn_rate": 0.05},
        {"duration": 60, "users": 9, "spawn_rate": 0.05},
        {"duration": 60, "users": 12, "spawn_rate": 0.05},
        {"duration": 60, "users": 15, "spawn_rate": 0.05},
        {"duration": 60, "users": 18, "spawn_rate": 0.05},
        {"duration": 60, "users": 21, "spawn_rate": 0.05},
        {"duration": 60, "users": 24, "spawn_rate": 0.05},
        {"duration": 60, "users": 27, "spawn_rate": 0.05},
        {"duration": 300, "users": 30, "spawn_rate": 0.05},
    ]

    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

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1