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

运行结果:

image

当然还可以在测试用例中用 xfail 标记强制标识测试用例预期失败:【具体参考pytest之skip标记】

def test_function():
    if not valid_config():
        pytest.xfail("failing configuration (but should work)")

pytest.mark.xfail装饰器使用方法

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

运行结果①:

image

当此bug被修复后,用例执行通过,但是因为我们打了 @pytest.mark.xfail 标记,所以执行的结果被统计为 xpassed

此时测试代码如下:

import pytest

class TestMyCode:

    @pytest.mark.xfail(reason="bug已修复【OPRAUPL-7166】")
    def test_xfail_002(self):
        assert 1 == 1

运行结果②:

image

这样将显式地提醒我们:当业务逻辑有变化,或者有bug被修复时,我们的测试用例可能同样需要调整,需要引起注意。

posted @ 2022-08-05 15:41  观棋不雨  阅读(208)  评论(0编辑  收藏  举报