#python #locust
#python #locust
Вопрос:
Я использую Locust для нагрузочного тестирования API. В качестве примера я отправляю запрос GET в Google. Мой ВАРИАНТ ИСПОЛЬЗОВАНИЯ заключается в том, что я хочу создать методы @task с помощью setattr, динамически назначая функции классу. Это мой код
from locust import TaskSet, HttpUser, between, task
@task
def default_method(self):
self.client.get("/")
class WebsiteTasks(TaskSet):
def on_start(self):
print("start process")
setattr(self, 'index', default_method)
class WebsiteUser(HttpUser):
host = "https://www.google.com"
tasks = [WebsiteTasks]
wait_time = between(1, 10)
В качестве ответа у меня есть это исключение при запуске нового браузера нагрузочного теста:
Exception: No tasks defined. use the @task decorator or set the tasks property of the User
Любая помощь будет оценена
Ответ №1:
Добавлять задачи в on_start слишком поздно, так как Locust будет проверять наличие задач перед фактическим запуском (и я думаю, что это правильное поведение, иначе люди могут в конечном итоге запустить on_start только для того, чтобы сразу после завершения теста выполнить сбой)
Что-нибудь мешает вам использовать список, как в этом примере из документации:
def my_task(user):
pass
class MyUser(User):
tasks = [my_task]
...
Вы все равно можете управлять этим списком из on_start, если он не пуст для начала.
Комментарии:
1. Да, его можно изменить позже. У меня есть потоки, где я это делаю. Просто нужно было иметь хотя бы одну задачу для начала, но затем вы можете вручную редактировать задачи на лету. Я не использую setattr для этого, я напрямую управляю списком задач.