You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Locust运行测试报错:__init__()缺少必填位置参数'ecu_model_id'

问题根因

报错触发在你第一次实例化EcuModelApi的代码行EcuModelApi(self.client),原因是EcuModelApi类的__init__构造函数要求必须传入2个位置参数,第二个参数为ecu_model_id,你当前只传了第一个self.client参数,不符合初始化要求。

你提到其他用例不需要传这个参数,大概率是两种情况:

  • 其他用例使用的是旧版本的EcuModelApi,当时ecu_model_id是带默认值的可选参数,后续类定义被修改成了必填参数
  • 其他用例实例化EcuModelApi的场景已经提前拿到了ecu_model_id,只是你没注意到传参逻辑
解决方案
  • 方案一:修改EcuModelApi类定义,将ecu_model_id改为可选参数
    调整EcuModelApi的构造函数,给ecu_model_id设置默认值None即可兼容你当前的调用逻辑:
class EcuModelApi:
    # 给ecu_model_id设置默认值,改为可选参数
    def __init__(self, client, ecu_model_id=None):
        self.client = client
        self.ecu_model_id = ecu_model_id
    # 其余类方法保持不变
  • 方案二:不修改依赖类源码,单独发起请求获取ecu_model_id
    如果你没有权限修改apicall.ecu.EcuModelApi的源码,可以直接用Locust的self.client直接调用查询ECU型号的接口,拿到ID后再实例化EcuModelApi:
def on_start(self):
    super().on_start()
    # 替换为你实际的查询接口地址、请求方式和参数解析逻辑
    resp = self.client.get(f"/api/ecu/model?name={ECU_NAME}")
    self.ecu_model_id = resp.json()["data"]["ecu_model_id"]
    self.ecu_api = EcuModelApi(self.client, self.ecu_model_id)
其他注意事项

你当前的测试代码中使用了threading.Lock(),但没有导入threading模块,后续运行时会触发NameError,需要在代码开头补上import threading。

内容的提问来源于stack exchange,提问作者Beti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:18:02