Pytest中@pytest.mark.skip与@pytest.mark.xfail的区别解析
pytest里
@pytest.mark.skip和@pytest.mark.xfail的核心区别 1. 执行逻辑完全不同
@pytest.mark.skip:被这个标记的测试用例直接跳过,根本不会运行。不管你的断言是对是错,结果只会显示skipped,不会产生任何执行后的通过/失败状态。@pytest.mark.xfail:被这个标记的测试用例会正常跑完,只是提前告诉pytest“我预期这个测试会失败”。跑完之后根据断言结果出不同状态:- 断言是True(实际跑通了):结果显示
xpassed(属于意外通过,得留意是不是bug修好了) - 断言是False(实际跑失败了):结果显示
xfailed(符合预期,不用慌)
- 断言是True(实际跑通了):结果显示
2. 适用场景不一样
- 用
skip的情况:- 测试依赖的东西还没弄好(比如要测的API还没开发完)
- 这个测试对应的功能已经废弃了,没必要再跑
- 某些平台下根本跑不了这个测试(比如Windows专属测试在Linux机器上直接跳过)
- 用
xfail的情况:- 已经知道这个功能有bug,暂时修不了,但得留着测试跟踪bug状态
- 测试的功能还在开发中,现在跑肯定失败,但以后修复后要能正常通过
- 验证已知问题是否还存在(失败说明问题没解决,通过说明bug修好了)
3. 对测试统计的影响不同
skip的测试只是“没执行”,不会影响测试套件的通过率统计——毕竟没跑,不算过也不算错。xfail的xfailed会被当成“预期内的失败”,一般不影响整体通过率;但xpassed会被标记为意外通过,通常需要检查是不是bug已经修复,该把xfail标记去掉了。
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

