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

Python3.12下执行pytest报AttributeError: collections无Mapping属性求助

问题

本地调试代码正常,但终端执行pytest命令时触发以下错误:

环境信息

  • Python版本:3.12
  • Allure pytest版本:2.13.5
  • Selenium版本:4.22
  • Pytest版本:8.2.2

错误日志

Traceback (most recent call last):
  File "E:\python\lib\runpy.py", line 196, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "E:\python\lib\runpy.py", line 86, in _run_code
    exec(code, run_globals)
  File "E:\python\Scripts\pytest.exe\__main__.py", line 7, in <module>
    sys.exit(console_main())
  File "E:\python\lib\site-packages\_pytest\config\__init__.py", line 206, in console_main
    code = main()
  File "E:\python\lib\site-packages\_pytest\config\__init__.py", line 159, in main
    config = _prepareconfig(args, plugins)
  File "E:\python\lib\site-packages\_pytest\config\__init__.py", line 346, in _prepareconfig
    config = pluginmanager.hook.pytest_cmdline_parse(
  File "E:\python\lib\site-packages\pluggy\_hooks.py", line 513, in __call__
    return self._hookexec(self.name, self._hookimpls.copy(), kwargs, firstresult)
  File "E:\python\lib\site-packages\pluggy\_manager.py", line 120, in _hookexec
    return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
  File "E:\python\lib\site-packages\pluggy\_callers.py", line 139, in _multicall
    raise exception.with_traceback(exception.__traceback__)
  File "E:\python\lib\site-packages\pluggy\_callers.py", line 122, in _multicall
    teardown.throw(exception)  # type: ignore[union-attr]
  File "E:\python\lib\site-packages\_pytest\helpconfig.py", line 106, in pytest_cmdline_parse
    config = yield
  File "E:\python\lib\site-packages\pluggy\_callers.py", line 103, in _multicall
    res = hook_impl.function(*args)
  File "E:\python\lib\site-packages\_pytest\config\__init__.py", line 1152, in pytest_cmdline_parse
    self.parse(args)
  File "E:\python\lib\site-packages\_pytest\config\__init__.py", line 1501, in parse
    self._preparse(args, addopts=addopts)
  File "E:\python\lib\site-packages\_pytest\config\__init__.py", line 1388, in _preparse
    self.pluginmanager.load_setuptools_entrypoints("pytest11")
  File "E:\python\lib\site-packages\pluggy\_manager.py", line 421, in load_setuptools_entrypoints
    plugin = ep.load()
  File "E:\python\lib\importlib\metadata\__init__.py", line 171, in load
    module = import_module(match.group('module'))
  File "E:\python\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "E:\python\lib\site-packages\_pytest\assertion\rewrite.py", line 178, in exec_module
    exec(co, module.__dict__)
  File "E:\python\lib\site-packages\allure_pytest\plugin.py", line 3, in <module>
    import allure
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "E:\python\lib\site-packages\_pytest\assertion\rewrite.py", line 178, in exec_module
    exec(co, module.__dict__)
  File "E:\python\lib\site-packages\allure\__init__.py", line 1, in <module>
    from allure.pytest_plugin import MASTER_HELPER
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "E:\python\lib\site-packages\_pytest\assertion\rewrite.py", line 178, in exec_module
    exec(co, module.__dict__)
  File "E:\python\lib\site-packages\allure\pytest_plugin.py", line 9, in <module>
    from allure.common import AllureImpl, StepContext
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "E:\python\lib\site-packages\_pytest\assertion\rewrite.py", line 178, in exec_module
    exec(co, module.__dict__)
  File "E:\python\lib\site-packages\allure\common.py", line 19, in <module>
    from allure.structure import Attach, TestStep, TestCase, TestSuite, Failure, Environment, EnvParameter
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "E:\python\lib\site-packages\_pytest\assertion\rewrite.py", line 178, in exec_module
    exec(co, module.__dict__)
  File "E:\python\lib\site-packages\allure\structure.py", line 14, in <module>
    class Attach(xmlfied('attachment',
  File "E:\python\lib\site-packages\allure\rules.py", line 116, in xmlfied
    class MyImpl(namedlist('XMLFied', [(item[0], None) for item in items])):
  File "E:\python\lib\site-packages\namedlist.py", line 398, in namedlist
    fields, defaults = _fields_and_defaults(typename, field_names, default, rename)
  File "E:\python\lib\site-packages\namedlist.py", line 252, in _fields_and_defaults
    if isinstance(field_names, _collections.Mapping):
AttributeError: module 'collections' has no attribute 'Mapping'

解决方案

这个错误是因为Python 3.10+中collections.Mapping被移到了collections.abc.Mapping,而当前安装的namedlist库版本不兼容Python 3.12,可通过以下方式解决:

方法1:升级namedlist库

执行终端命令更新到兼容版本:

pip install --upgrade namedlist

方法2:手动修改namedlist源码

如果升级后仍有问题,找到Python安装目录下的namedlist.py(路径类似E:\python\lib\site-packages\namedlist.py),打开后找到第252行:

if isinstance(field_names, _collections.Mapping):

将其修改为:

import collections.abc
if isinstance(field_names, collections.abc.Mapping):

或者检查文件顶部的导入语句,确保导入了collections.abc而非仅collections。

方法3:升级allure-pytest

旧版本allure-pytest可能依赖过时的namedlist,尝试升级到最新版:

pip install --upgrade allure-pytest

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 05:28:11