pytest测试框架(五)—使用xfail将用例标记为失败

当因为一个确切的原因,我们知道这个用例会执行失败,比如用例所覆盖的功能还未实现,或者这个功能存在阻塞性的已知Bug时,就可以使用xfail将其标记起来。

1、@pytest.mark.xfail装饰器

可以使用@pytest.mark.xfail标记用例,表示期望这个用例执行失败。标记后的用例会正常执行,只是失败时不再显示堆栈信息,最终的结果有两个:用例执行失败时(XFAIL:符合预期的失败)、用例执行成功时(XPASS:不符合预期的成功)

pytest.mark.xfail(condition=None, *, reason=None, raises=None, run=True, strict=False)

  • condition位置参数,默认值为None,表示只有满足条件时才标记用例;
  • reason关键字参数,默认值为None,表示可以指定一个reason字符串,说明标记用例的原因;
  • strict关键字参数,默认值为False

当strict=False时,如果用例执行失败,结果标记为XFAIL,表示符合预期的失败;如果用例执行成功,结果标记为XPASS,表示不符合预期的成功;

当strict=True时,如果用例执行成功,结果将标记为FAILED;

  • raises关键字参数,默认值为None

可以指定为一个异常类或者多个异常类的元组,表示我们期望用例上报指定的异常;

如果用例的失败不是因为所期望的异常导致的,pytest将会把测试结果标记为FAILED;

  • run关键字参数,默认值为True:

当run=False时,pytest不会再执行测试用例,直接将结果标记为XFAIL;

2、pytest.xfail方法

我们也可以通过pytest.xfail方法在用例执行过程中直接标记用例结果为XFAIL,并跳过剩余的部分:

def test_aaa():

    if not meet():

        pytest.xfail("failing configuration (but should work)")

3、结合@pytest.mark.parametrize装饰器使用

​import pytest

import sys

@pytest.mark.parametrize(('n', 'expected'),

                         [(2, 1),

                         pytest.param(2, 1, marks=pytest.mark.xfail(), id='XPASS'),

                         pytest.param(0, 1, marks=pytest.mark.xfail(raises=ZeroDivisionError), id='XFAIL'),

                         pytest.param(1, 2, marks=pytest.mark.skip(reason='无效的参数,跳过执行')),

                         pytest.param(1, 2, marks=pytest.mark.skipif(sys.version_info

pytest默认不显示xfail用例的详细信息,我们可以通过-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用例的详细信息。

Original: https://blog.csdn.net/wxt_hillwill/article/details/114734729
Author: wxt_hillwill
Title: pytest测试框架(五)—使用xfail将用例标记为失败

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/775226/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球