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

VSCode中venv环境下Pytest运行失败,报AttributeError问题求助

PyCharm可正常运行pytest,VSCode中报错AttributeError: 'Config' object has no attribute '_metadata'

在PyCharm中能正常运行pytest测试,但切换到VSCode执行时出现属性错误。操作流程如下:

  • 创建虚拟环境:
    python -m venv env
    
  • 激活虚拟环境:
    env\Scripts\activate
    
  • 升级pip:
    python -m pip install --upgrade pip
    
  • 安装依赖包:
    pip install selenium webdriver-manager pytest pytest-html
    

安装完成后的包列表:

Package            Version
------------------ -----------
pip                23.3.2
pytest             7.4.4
pytest-html        4.1.1
pytest-metadata    3.0.0
pytest-xdist       3.5.0
selenium           4.16.0
setuptools         69.0.3
webdriver-manager  4.0.1

运行pytest时的错误信息:

(env) PS C:\Users\User\Desktop\automation-projects\Python\paloAlto> pytest
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "C:\Users\User\Desktop\automation-projects\Python\paloAlto\env\Lib\site-packages\_pytest\main.py", line 267, in wrap_session
INTERNALERROR>     config._do_configure()
INTERNALERROR>   File "C:\Users\User\Desktop\automation-projects\Python\paloAlto\env\Lib\site-packages\_pytest\config\__init__.py", line 1053, in _do_configure
INTERNALERROR>     self.hook.pytest_configure.call_historic(kwargs=dict(config=self))
INTERNALERROR>   File "C:\Users\User\Desktop\automation-projects\Python\paloAlto\env\Lib\site-packages\pluggy\_hooks.py", line 514, in call_historic
INTERNALERROR>     res = self._hookexec(self.name, self._hookimpls, kwargs, False)
INTERNALERROR>           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR>   File "C:\Users\User\Desktop\automation-projects\Python\paloAlto\env\Lib\site-packages\pluggy\_manager.py", line 115, in _hookexec
INTERNALERROR>     return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
INTERNALERROR>            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR>   File "C:\Users\User\Desktop\automation-projects\Python\paloAlto\env\Lib\site-packages\pluggy\_callers.py", line 113, in _multicall
INTERNALERROR>     raise exception.with_traceback(exception.__traceback__)
INTERNALERROR>   File "C:\Users\User\Desktop\automation-projects\Python\paloAlto\env\Lib\site-packages\pluggy\_callers.py", line 77, in _multicall
INTERNALERROR>     res = hook_impl.function(*args)
INTERNALERROR>           ^^^^^^^^^^^^^^^^^^^^^^^^^
INTERNALERROR>   File "C:\Users\User\Desktop\automation-projects\Python\paloAlto\testCases\conftest.py", line 49, in pytest_configure
INTERNALERROR>     config._metadata['Project Name'] = 'Palo Alto'
INTERNALERROR>     ^^^^^^^^^^^^^^^^
INTERNALERROR> AttributeError: 'Config' object has no attribute '_metadata'

问题原因

报错源于conftest.py中直接访问了pytest配置对象的私有属性_metadata,新版本的pytest-metadata(3.0.0版本)已将该属性改为公开的metadata(移除下划线)。PyCharm可能因缓存或插件加载逻辑差异暂时兼容旧写法,但VSCode严格遵循新版本API规范,因此触发错误。

解决方法

修改testCases/conftest.py第49行代码:
将旧写法:

config._metadata['Project Name'] = 'Palo Alto'

替换为:

config.metadata['Project Name'] = 'Palo Alto'

或者采用更规范的方式,使用pytest_metadata钩子添加元数据(推荐):
在conftest.py中新增如下函数:

def pytest_metadata(metadata):
    metadata['Project Name'] = 'Palo Alto'

修改后重新在VSCode中运行pytest即可正常执行。

内容的提问来源于stack exchange,提问作者A-Makeyev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 20:30:38