运行Locust时报AttributeError: MyApiTask类无task_set属性如何解决
问题排查与解决方案
核心错误原因
1. TaskSet初始化方法覆写错误
你自定义的MyApiTask覆写了__init__方法,但不符合Locust框架的参数要求:TaskSet父类初始化需要传入关联的用户实例作为参数,你写的无参__init__以及错误的传参super().__init__(self),导致TaskSet内部的任务相关属性没有正确挂载,最终触发属性不存在的报错。
2. 版本不兼容的API调用
Locust 1.0及以上版本已经弃用HttpLocust类,替换为HttpUser类,旧API在新版本中运行会出现属性不匹配问题。
修复方案
方案1:保留TaskSet写法(适配全版本)
直接删除多余的自定义__init__方法,同时根据Locust版本调整用户类名即可:
from locust import TaskSet, task, HttpUser, between from assertpy import assert_that class MyApiTask(TaskSet): @task(1) def get_response(self): response = self.client.get("/") print(response.json()) assert_that(200).is_equal_to(response.status_code) # Locust 1.x及以上版本用HttpUser,0.x旧版本替换为HttpLocust即可 class MyApiUser(HttpUser): task_set = MyApiTask wait_time = between(1,2)
如果确实需要自定义TaskSet初始化逻辑,按规范写参数即可:
class MyApiTask(TaskSet): def __init__(self, parent): super().__init__(parent) # 此处添加自定义初始化逻辑
方案2:新版Locust简化写法(1.x及以上版本推荐)
不需要额外定义TaskSet,直接把任务方法写在User类中,代码更简洁:
from locust import task, HttpUser, between from assertpy import assert_that class MyApiUser(HttpUser): wait_time = between(1,2) @task(1) def get_response(self): response = self.client.get("/") print(response.json()) assert_that(200).is_equal_to(response.status_code)
内容的提问来源于stack exchange,提问作者darthsithius
相关产品推荐
相关产品推荐

