В моем сценарии я использую Locust без веб-интерфейса. Используемая мной команда:
locust -f my_locust_file --no_web -c 20 -r 4 # as a hack I add -t 10s
Это соответствует тому, что каждую секунду вылупляются 4 пользователя, всего до 20 пользователей.
Моя цель - получить каждого из 20 саранчовых пользователи выполняют задачу, и я хотел бы, чтобы запуск саранчи завершился и завершился, когда завершится задача последнего пользователя (20-й пользователь). Собранная статистика должна включать только время ответа, связанное с каждой задачей.
В этом сценарии было идентифицировано 5 задач (сценарий пользователя ios), которые могут быть случайным образом связаны с пользователем:
class UserScenarios(TaskSet):
tasks = [Sequence_One, ServerSequence, Components_Sequence, Embedded_Sequence, Connectivity_Sequence]
class MyLocust(HttpLocust):
def __init__(self):
super().__init__()
MyLocust.counter += 1
print(f"Counter = {MyLocust.counter}")
counter = 0
task_set = UserScenarios
wait_time = between(1, 1)
host = 'https://*****.com'
Каждое задание (пользовательский сценарий) соответствует разной последовательности из 3 или 4 страниц, которые следует загружать по порядку. Пример санированной и упрощенной последовательности, состоящей из 2 страниц:
class Sequence_One(TaskSequence):
@seq_task(1)
def get_task1(self):
response = self.client.get(url='https://****',
name='https://****',
timeout=30,
allow_redirects=False,
headers={...})
@seq_task(2)
def get_task2(self):
response = self.client.get(url='https://****',
name='https://****',
timeout=30,
allow_redirects=False,
headers={...})
Есть ли способ остановить тест после завершения 20-й (n-й) пользовательской задачи? Например, если каждое задание посещает 4 страницы, я хочу, чтобы тест завершался после выполнения запроса 20 * 4 = 80 страниц. На самом деле в рамках этого теста должно быть выполнено всего 80 запросов страниц.
Мой опыт работы с этим тестом заключается в том, что запросы страниц продолжают выполняться после завершения последней пользовательской задачи, пока я не остановлю тест вручную или не использую его вручную. временное ограничение, которое немного больше, чем на самом деле нужно для выполнения задач.