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
相关产品推荐
相关产品推荐

