运行pytest测试代码遇报错及DeprecationWarning警告求助
pytest运行问题排查与解决方案
测试用例相关问题
问题原因
- 代码存在语法缩进错误:
test_login函数下的print语句没有缩进至函数体内部,直接运行会触发语法报错。 - 测试用例嵌套错误:
test_logout函数被定义在test_checkout的函数体内部,pytest默认仅收集模块顶层命名符合test_*规则的函数/方法作为测试用例,嵌套的内部函数不会被识别执行。
修复后正确代码
def test_login(): print("Login to application") def test_checkout(): print("Checkout") def test_logout(): print("Logout From application")
DeprecationWarning 警告问题
问题原因
该警告和编写的测试代码无关,是本地Anaconda环境中安装的旧版本pyreadline库存在Python版本兼容问题:该库代码中从collections模块导入ABC抽象基类,而Python 3.3及以上版本要求这类抽象基类必须从collections.abc路径导入,旧导入路径在Python 3.10及以上版本会直接运行报错。
解决方案
按优先级选择以下任意一种方案处理即可:
- 升级pyreadline至兼容版本,执行对应命令:
用pip管理包时运行:pip install --upgrade pyreadline
用conda管理包时运行:conda update pyreadline - 若升级后警告仍存在,可配置pytest过滤第三方库的无关警告:在项目根目录新建
pytest.ini文件,写入以下配置:
[pytest] filterwarnings = ignore::DeprecationWarning:pyreadline.*
- 若日常开发不需要用到pyreadline(该库仅用于Windows环境下提供命令行行编辑支持,多数测试场景不会实际调用),可直接卸载该库消除警告,执行命令:
pip uninstall pyreadline
内容的提问来源于stack exchange,提问作者Gregg m
相关产品推荐
相关产品推荐

