xfail 函数文档如下:
def xfail(self,condition=None, reason=None, raises=None, run=True, strict=False): """mark the the test function as an expected failure if eval(self,condition) has a True value. # 将eval(self,condition)为真的测试函数标记为失败。 Optionally specify a reason for better reporting and run=False if you don't even want to execute the test function. # 不想执行某个测试功能,可以指定 run=False,可以自定义错误原因 reason=‘’ See http://doc.pytest.org/en/latest/skipping.html # 官方文档说明 """
参数:
condition 在特定条件下标记为xfail
reason 预期失败的原因
raises 具体原因,python标准错误类型
run=False 直接标记为xfail,且不执行,防止在xfail死循环
strict=True 会使产生了 xpass 的用例,标记为测试失败(默认False会标记通过)
xfail 作用:
1)xfail意味着你期望测试由于某种原因失败。常见的示例是对尚未实现的功能或尚未修复的错误进行测试。
2)当预期失败时(标记为pytest.mark.xfail
),但实际测试通过,标记为xpass,并将在测试摘要中报告
3)xfail 使用 pytest.mark.xfail 来标记预期会失败的用例,用 x 标记代替 F,且无错误信息输出
4)通过 -r 显示 xfail、skip 详细信息 pytest -r
5)忽略xfail(pytest.xfail 不生效):
pytest --runxfail
使用 xfail:
@pytest.mark.parametrize('a, b, c', [(4, 2, 2), (0, 2, 0), pytest.param(1, 0, 0, marks=pytest.mark.xfail), (6, 8, 0)], ids=['整除', '被除数为0', '除数为0', '非整除']) def test_1(a, b, c): res = division(a, b) assert res == c
执行结果(用 x 标记了 F):
E:\personal\python38\python.exe E:/personal/GitWorkSpace/pytest_basic/main.py test_demo_10.py::test_1[整除] test_demo_10.py::test_1[被除数为0] test_demo_10.py::test_1[除数为0] test_demo_10.py::test_1[非整除] ..x. 3 passed, 1 xfailed in 0.14s