在蝗虫类中使用setattr

时间:2020-10-31 20:24:52

标签: python locust

我正在使用Locust对API进行负载测试。举例来说,我正在向Google发送GET请求。我的用例是我想通过setattr通过将函数动态分配给类来创建@task方法。这是我的代码

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 个答案:

答案 0 :(得分:0)

在on_start中添加任务为时已晚,因为Locust会在实际启动之前检查任务是否存在(我认为这是正确的行为,否则人们可能最终运行on_start只是在测试之后立即失败)。 / p>

是什么使您无法使用列表,例如文档中的示例:

def my_task(user):
    pass

class MyUser(User):
    tasks = [my_task]
    ...

只要列表开头不为空,您仍然可以从on_start操作该列表。