一、前言
我们现在要学的pytest.xfail()和pytest.skip()有些相似,只不过他的含义是:将该用例标记成xfail失败,并且该用例中的后续代码不会执行。
二、学习目标
1.@pytest.mark.xfail()
使用例执行失败
2.pytest.xfail()
用例执行过程中使用例执行失败
3.运行时忽略xfail标记
三、知识点
注:用例执行失败时(XFAIL
:符合预期的失败)、用例执行成功时(XPASS
:不符合预期的成功)
1.【@pytest.mark.xfail()
】
-
语法:
@pytest.mark.xfail(condition=None, reason=None, raises=None, run=True, strict=False)
-
参数:
-
reason
关键字参数,默认值为None
可以指定一个字符串,表明标记用例的原因;
-
strict关键字参数,默认值为False
当strict=False时,如果用例执行失败,结果标记为XFAIL,表示符合预期的失败;如果用例执行成功,结果标记为XPASS,表示不符合预期的成功;
当strict=True时,如果用例执行成功,结果将标记为FAILED,而不再是XPASS了;
我们也可以在
pytest.ini
文件中配置:[pytest] xfail_strict=true
-
raises
关键字参数,默认值为None
可以指定为一个异常类或者多个异常类的元组,表明我们期望用例上报指定的异常;
如果用例的失败不是因为所期望的异常导致的,
pytest
将会把测试结果标记为FAILED
; -
run
关键字参数,默认值为True
:当
run=False
时,pytest
不会再执行测试用例,直接将结果标记为XFAIL
;
-
-
代码示例:
import pytest def test_01(): print("---用例1执行---") class TestCase(): @pytest.mark.xfail(2>1, reason="这是失败原因!") def test_02(self): print("---用例2执行---") def test_03(self): print("---用例3执行---")
-
运行效果
test-demo7.py::test_01 PASSED [ 33%]---用例1执行--- test-demo7.py::TestCase::test_02 XPASS [ 66%]---用例2执行--- test-demo7.py::TestCase::test_03 PASSED [100%]---用例3执行--- ======================== 2 passed, 1 xpassed in 0.02s =========================
2.【pytest.xfail()
】
-
语法:
#用例函数内使用 pytest.xfail(reason="")
-
代码示例:
import pytest def test_01(): print("---用例1执行---") class TestCase(): def test_02(self): pytest.xfail(reason="这是失败原因!") print("---用例2执行---") def test_03(self): print("---用例3执行---")
-
运行效果
test-demo7.py::test_01 PASSED [ 33%]---用例1执行--- test-demo7.py::TestCase::test_02 XFAIL [ 66%] self = <test-demo7.TestCase object at 0x000001B1203804E0> def test_02(self): > pytest.xfail(reason="这是失败原因!") E _pytest.outcomes.XFailed: 这是失败原因! #抛出了自定义原因 test-demo7.py:11: XFailed test-demo7.py::TestCase::test_03 PASSED [100%]---用例3执行--- ======================== 2 passed, 1 xfailed in 0.03s =========================
3.【运行时忽略xfail标记】
我们可以通过命令行选项pytest --runxfail
来去使能xfail
标记,使这些用例变成正常执行的用例,仿佛没有被标记过一样:
同样,pytest.xfail()
方法也将会失效;