Как заставить 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