Python 3.10环境下使用pytest执行测试出现lineno缺失报错如何解决
问题根因
这个TypeError: required field "lineno" missing from alias报错是Python 3.10对typing模块的别名底层实现做了不兼容更新后,低版本pytest未做适配导致的兼容性问题,这也是同一份用例在Python3.9环境可以正常运行的核心原因。
解决方案
方案1:升级pytest到适配版本(最推荐)
直接将pytest升级到7.0及以上版本即可,该版本已经完成了Python3.10的兼容性适配,执行升级命令:pip install -U pytest>=7.0.0
如果项目有其他依赖固定版本的约束,可以先排查依赖冲突后再完成升级。方案2:临时兼容补丁(仅适用于无法升级pytest的场景)
如果因为项目依赖限制暂时不能升级pytest,可以在测试根目录的conftest.py文件最顶部添加如下补丁代码,绕过lineno字段校验:import typing from typing import _AliasType original_new = _AliasType.__new__ def patched_new(cls, *args, **kwargs): if 'lineno' not in kwargs: kwargs['lineno'] = 0 return original_new(cls, *args, **kwargs) _AliasType.__new__ = patched_new该方案仅做临时兼容使用,存在潜在的未知运行风险,条件允许优先选择升级pytest版本。
方案3:锁定Python运行版本
如果暂时不想改动项目依赖,也可以继续使用Python3.9作为测试运行环境,等待后续所有依赖完成Python3.10适配后再升级Python版本。
内容的提问来源于stack exchange,提问作者chydik
相关产品推荐
相关产品推荐

