pytest标记测试用例为预期失败(@pytest.mark.xfail)
前言
①我们平时在写测试用例的过程中,有时会遇到【已知由于某些原因,某些场景是有问题的,或者是功能暂时没有实现】这种情况,那么测试用例执行的时候我们就知道这个测试用例会失败,也就是预期失败,这个时候我们就可以使用 @pytest.mark.xfail 装饰器来标记测试用例为预期失败函数。
②当某个bug,修复优先级比较低,暂时不用修复。此时,在自动化用例运行过程中,此用例的执行结果肯定是失败的,那么我们就可以用 @pytest.mark.xfail 装饰器来标记此用例,用例执行的结果会被标记为 xfailed ,而不是 failed 。
使用 xfail 标记希望的测试用例失败;会运行此测试用例,但是在测试报告中会将其列在【预期失败(XFAIL
)】或【意外成功(XPASS
)】部分。
如下实例:
import pytest @pytest.mark.xfail(reason="这个用例实际返回结果与预期不一致") def test_001(): assert 1 == 2 @pytest.mark.xfail(reason="这个用例实际返回结果与预期一致") def test_002(): assert 8 == 8 def test_003(): assert 6 == 6
运行结果:
当然还可以在测试用例中用 xfail 标记强制标识测试用例预期失败:【具体参考pytest之skip标记】
def test_function(): if not valid_config(): pytest.xfail("failing configuration (but should work)")
pytest.mark.xfail装饰器使用方法
标记测试函数为失败函数 方法: pytest.mark.xfail(condition=None, reason=None, raises=None, run=True, strict=False) 常用参数: 1、condition:预期失败的条件,必传参数,默认为None,表示只有满足条件时才标记用例;
2、reason:失败的原因,必传参数,默认为None,表示可以指定一个reason字符串,说明标记用例的原因;
3、strict关键字参数,默认值为False
当strict=False时,如果用例执行失败,结果标记为XFAIL,表示符合预期的失败;如果用例执行成功,结果标记为XPASS,表示不符合预期的成功;
当strict=True时,如果用例执行成功,结果将标记为FAILED;
4、raises关键字参数,默认值为None
可以指定为一个异常类或者多个异常类的元组,表示我们期望用例上报指定的异常;
如果用例的失败不是因为所期望的异常导致的,pytest将会把测试结果标记为FAILED;
5、run关键字参数,默认值为True:当run=False时,pytest不会再执行测试用例,直接将结果标记为XFAIL;
使用方法: ①函数装饰器用法:@pytest.mark.xfail(condition, reason="xx")
②函数体内用法:pytest.xfail(condition, reason="xx")
执行方法
pytest默认不显示执行结果为 xfail 的测试用例的详细信息,但是我们可以通过pytest命令行参数 -r 选项使其显示出来;
测试用例的执行结果通常一个字母代表一种类型,具体的规则如下:(f)ailed, (E)rror, (s)kipped, (x)failed, (X)passed, (p)assed, (P)assed with output, (a)ll except passed(p/P), or (A)ll
所以,使用pytest -rxX 方式执行,能够显示结果为XFAIL和XPASS用例的详细信息。
实例
#test_xfail.py import pytest class TestMyCode: @pytest.mark.xfail(reason="bug待修复【OPRAUPL-7166】") def test_xfail_001(self): assert 1 == 2
运行结果①:
当此bug被修复后,用例执行通过,但是因为我们打了 @pytest.mark.xfail 标记,所以执行的结果被统计为 xpassed 。
此时测试代码如下:
import pytest class TestMyCode: @pytest.mark.xfail(reason="bug已修复【OPRAUPL-7166】") def test_xfail_002(self): assert 1 == 1
运行结果②:
这样将显式地提醒我们:当业务逻辑有变化,或者有bug被修复时,我们的测试用例可能同样需要调整,需要引起注意。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!