Как заставить Locust Master динамически распределять пользователей по подчиненным

Я пытаюсь загрузить тест HTTP-URL(динамический) с помощью Locust.io. У меня уже есть скрипты Python, которые будут делать вызов GET для URL. Проблема, с которой я сталкиваюсь, заключается в том, что URL-адреса и количество пользователей являются динамическими и считываются из файла CSV.

Например, вот как будет выглядеть ввод нагрузочного тестирования:

Input.csv:

============

URLs          No of users to simulate
=============================================
URL 1               1000
URL 2               5000
URL 3               2000
URL 4               1000

Каждый URL в CSV уникален, и количество пользователей для имитации изменений для каждого URL. Я хотел бы использовать нагрузочное тестирование саранчи в распределенном режиме.

Например, Locust master прочитает URL 1 и отправит его на Slave 1 для имитации 1000 пользователей. а затем выберите URL2 и отправьте его на ведомый 2 для имитации 5000 пользователей.

Как мне добиться этого с помощью саранчи? может кто-нибудь пролить свет?

1 ответ

Саранча не поддерживает это, как вы думаете. Саранча оценивает задачи, а не пользователей, поэтому вы придаете относительный вес задачам, которые вы хотите выполнять (ваши URL указаны выше).

Что вы, вероятно, хотите сделать, так это взвесить сами задачи, используя TaskSet:

class MyTaskSet(TaskSet):
    @task(1)
    def one(self):
        self.client.get("url 1")

    @task(5)
    def two(self):
        self.client.get("url 2")

    @task(2)
    def three(self):
        self.client.get("url 3")

    @task(1)
    def three(self):
        self.client.get("url 4")

У вас может быть код для разбора и чтения вашего файла (который не имеет формата csv, кстати, хотя вы назвали его таковым?), Перед этим в вашем файле саранчи и передачи его в task декоратор и URL.

Используйте Locust LoadTestShape:https://docs.locust.io/en/stable/generating-custom-load-shape.html

класс MyCustomShape(LoadTestShape): time_limit = 600 spawn_rate = 20

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

    if run_time < self.time_limit:
        # User count rounded to nearest hundred.
        user_count = round(run_time, -2)
        return (user_count, spawn_rate)

    return None
Другие вопросы по тегам