Locust调用类实例方法报missing 1 required positional argument 'self'错误
问题场景
使用Locust框架开发测试脚本时,执行print(AbstractUser.get_token())触发如下报错:
TypeError: get_user_id() missing 1 required positional argument: 'self'
涉及的核心代码如下:
from locust import HttpUser class AbstractUser(HttpUser): abstract = True def __init__(self, parent): super(AbstractUser, self).__init__(parent) self.user_attr = {} def set_token(self, token): self.user_attr['token'] = token def get_token(self): if 'token' in self.user_attr.keys(): return self.user_attr['token'] else: return None
错误截图参考:

报错原因
set_token、get_token都是类的实例方法,这类方法定义时第一个参数固定为self,作用是接收当前类的实例对象,这个参数不需要手动传,当你通过「类的实例」调用方法时,Python会自动把实例绑定给self。- 直接用
AbstractUser.get_token()的写法,是通过类本身调用实例方法,此时Python不会自动传入实例对象给self参数,自然会抛出缺少必填参数的错误。 - 额外说明:定义的是Locust的抽象用户类,正常压测运行时Locust会自动完成用户类的实例化,这类存取token的方法本来就应该在类内部通过
self调用,不需要在类外部手动通过类名调用。
修复方案
- 如果是本地调试类方法逻辑,必须先实例化类,再通过实例调用方法:
# 错误写法 直接通过类调用实例方法 # print(AbstractUser.get_token()) # 正确调试写法 if __name__ == "__main__": # Locust的HttpUser初始化需要传入parent参数,本地调试可传None test_user = AbstractUser(parent=None) # 初始无token,打印None print(test_user.get_token()) # 存入测试token test_user.set_token("test_token_abc123") # 打印存入的token print(test_user.get_token())
- 正式压测脚本中,所有实例方法直接在类内部通过
self调用即可,参考标准写法:
from locust import HttpUser, task, between class AbstractUser(HttpUser): abstract = True wait_time = between(1, 3) def __init__(self, parent): super(AbstractUser, self).__init__(parent) self.user_attr = {} def set_token(self, token): self.user_attr['token'] = token def get_token(self): # 用字典get方法更简洁,key不存在时直接返回None return self.user_attr.get('token') def on_start(self): # 压测启动后每个虚拟用户先执行登录 login_resp = self.client.post( "/api/login", json={"username": "test_user", "password": "test_pass"} ) token = login_resp.json()["data"]["token"] # 类内部通过self调用方法,自动绑定self不会报错 self.set_token(token) @task def get_user_profile(self): # 取token组装鉴权请求头 auth_headers = {"Authorization": f"Bearer {self.get_token()}"} self.client.get("/api/user/profile", headers=auth_headers)
内容的提问来源于stack exchange,提问作者Sudip Neupane
相关产品推荐
相关产品推荐

