Unittest subTest与Pytest兼容问题:为何未显示失败子测试参数?
解决pytest不显示unittest subTest参数的问题
你遇到的问题核心在于pytest 5.0.1版本对unittest的subTest()支持不完善,默认的错误回溯格式不会把subTest里的参数(比如你的i值)展示在失败报告中。下面给你两个实用的解决方案:
方案1:升级pytest到新版
pytest在6.0及以上的版本中,专门优化了对unittest subTest的兼容支持,升级后无需额外配置就能在失败报告里直接看到subTest的参数信息。执行以下命令完成升级:
pip install --upgrade pytest
升级后重新运行测试,失败报告里就会明确标出导致测试失败的i值了。
方案2:使用unittest原生回溯格式
如果暂时不想升级pytest,可以在运行测试时添加--tb=native参数,让pytest切换为unittest的原生错误回溯格式,这样就能显示subTest的详情:
pytest --tb=native foo.py
运行后你会看到类似这样的失败输出,其中包含了关键的i=29信息:
AssertionError: 28 not greater than or equal to 29 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "foo.py", line 135, in test_foo self.assertGreaterEqual(28, n) AssertionError: 28 not greater than or equal to 29 During subTest(msg='seed', i=29)
要是你希望每次运行测试都自动启用这个参数,可以在项目根目录创建pytest.ini文件,添加以下内容:
[pytest] addopts = --tb=native
补充说明:你的代码逻辑和subTest的用法完全正确,只是旧版本pytest的默认输出格式没有把subTest的参数信息展示出来而已。
内容的提问来源于stack exchange,提问作者Snusifer
相关产品推荐
相关产品推荐

