如何排查pytest运行unittest测试用例时被跳过的原因?
如何让pytest显示unittest测试被跳过的原因
当你遇到unittest测试被pytest跳过但没有显示原因的情况,有几个实用方法可以帮你获取跳过的具体信息:
1. 使用pytest的-rs参数显示跳过原因
pytest提供了专门的报告参数来展示测试跳过的细节,-rs是最直接的选择:
r代表"report",s代表"skip",这个参数会让pytest在测试结束后,额外输出所有跳过测试的原因说明。- 如果你还想同时查看失败测试的原因,可以用
-rfs(f对应fail);或者用-ra来显示所有类型的测试结果原因(包括跳过、失败、预期失败等)。
把这个参数加到你的执行命令里,修改后的命令如下:
pytest -p vscode_pytest -vv --rootdir=/Users/roysmith/dev/pywikibot /Users/roysmith/dev/pywikibot/core/tests/site_tests.py::TestGetParsedPage::test_get_with_default_parser -rs
执行后,你会看到类似这样的输出,其中会明确标注跳过原因:
============================= test session starts ============================== platform darwin -- Python 3.11.8, pytest-9.0.3, pluggy-1.6.0 -- /Users/roysmith/dev/pywikibot/venv/bin/python cachedir: .pytest_cache rootdir: /Users/roysmith/dev/pywikibot configfile: core/tox.ini collecting ... collected 1 item core/tests/site_tests.py::TestGetParsedPage::test_get_with_default_parser SKIPPED [100%] ============================== short test summary info ============================== SKIPPED [1] core/tests/site_tests.py::TestGetParsedPage::test_get_with_default_parser: 这里会显示具体的跳过原因 ============================== 1 skipped in 0.94s ==============================
2. 检查unittest.SkipTest是否传递了原因信息
如果加上-rs后依然没有显示原因,大概率是代码中抛出SkipTest异常时没有传入原因参数。比如:
- 错误写法:
raise unittest.SkipTest()(未传递任何消息) - 正确写法:
raise unittest.SkipTest("缺少必要的API权限,跳过测试")
你可以通过以下方式排查:
- 搜索代码库中所有
raise unittest.SkipTest的位置,检查是否都传递了原因字符串; - 临时在你的测试方法开头或相关跳过逻辑中添加打印语句,确认触发跳过的分支;
- 使用pytest的调试模式,比如添加
--trace参数,在测试执行到跳过逻辑时暂停,查看上下文变量和执行流程。
3. 检查pytest配置文件是否影响了输出
查看项目中的core/tox.ini(或者pytest.ini、setup.cfg),确认是否有配置项抑制了跳过原因的显示:
- 检查
addopts中是否包含--no-summary或其他影响测试报告的参数; - 确认是否设置了
pytest.mark.skip的默认行为,导致原因被隐藏。
如果找到相关配置,可以临时注释后再测试,看是否能正常显示跳过原因。
内容的提问来源于stack exchange,提问作者Roy Smith
相关产品推荐
相关产品推荐

