pytest简易教程(21):标记为预期失败 - xfail
pytest简易教程汇总,详见:https://www.cnblogs.com/uncleyong/p/17982846
应用场景
功能未开发完成,但是用例写了;
环境限制,已经知道会失败,也可以预期失败。
源码
class _XfailMarkDecorator(MarkDecorator):
@overload # type: ignore[override,misc,no-overload-impl]
def __call__(self, arg: Markable) -> Markable:
...
@overload
def __call__(
self,
condition: Union[str, bool] = ...,
*conditions: Union[str, bool],
reason: str = ...,
run: bool = ...,
raises: Union[Type[BaseException], Tuple[Type[BaseException], ...]] = ...,
strict: bool = ...,
) -> MarkDecorator:
...
方法:xfail(condition=None, reason=None, raises=None, run=True, strict=False)
常用参数:
- condition:预期失败的条件
- reason:失败的原因
- run:布尔值,是否运行
- raises:抛出某类型异常,和用例中raise的异常类型一样,结果就是FAILED,否则结果是XFAIL
- strict,默认是False,strict=False,断言成功结果是XPASS,断言失败结果是XFAIL;strict=True,断言成功结果是FAILED,断言失败结果是XFAIL
使用方法:
@pytest.mark.xfail(condition, reason="xxx" )
函数/方法级预期失败
示例一:assert成功
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
import pytest
@pytest.mark.xfail
def test_case1():
print("代码开发中")
assert 1==1
结果:X表示预期失败


示例二:assert失败
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
import pytest
@pytest.mark.xfail
def test_case2():
print("代码开发中")
assert 1==2
结果:

示例三:condition为true
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
import pytest
@pytest.mark.xfail(1==1, reason="代码开发中")
def test_case3():
print("---xfail")
assert 1==1
结果:


示例四:condition为false
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
import pytest
@pytest.mark.xfail(1==2, reason="代码开发中")
def test_case3():
print("---xfail")
assert 1==1
结果:

函数/方法执行过程中预期失败
示例:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
import pytest
def test_case4():
pytest.xfail("代码开发中")
print("---xfail")
assert 1 == 1
结果:pytest.xfail后面代码没执行

类级预期失败
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
import pytest
@pytest.mark.xfail(reason="当前环境没法测试")
class Test01:
def test_b(self):
print("---test_b")
assert 1==1
def test_a(self):
print("---test_a")
assert 1==2
结果:

模块级预期失败
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
import pytest
pytestmark = pytest.mark.xfail(reason="当前环境没法测试")
class Test01:
def test_b(self):
print("---test_b")
assert 1==1
def test_a(self):
print("---test_a")
assert 1==2
结果:

xfail方法run参数
默认是True
run=False不会执行方法
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
import pytest
@pytest.mark.xfail()
def test_c():
print("---test_c")
assert 1==1
@pytest.mark.xfail(run=True)
def test_b():
print("---test_b")
assert 1==1
@pytest.mark.xfail(run=False)
def test_a():
print("---test_a")
raise Exception("异常")
结果:

xfail方法raises参数
raises:抛出某类型异常,和用例中raise的异常类型一样,结果就是FAILED,否则结果是XFAIL
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
import pytest
@pytest.mark.xfail
def test_d():
print("---test_d")
raise Exception("异常")
@pytest.mark.xfail(reason="异常了")
def test_c():
print("---test_c")
raise Exception("异常")
@pytest.mark.xfail(raises=RuntimeError)
def test_b():
print("---test_b")
raise RuntimeError("运行时异常")
@pytest.mark.xfail(raises=RuntimeError)
def test_a():
print("---test_a")
raise Exception("异常")
结果:

xfail方法strict参数
strict默认是False,strict=False,断言成功结果是XPASS,断言失败结果是XFAIL;strict=True,断言成功结果是FAILED,断言失败结果是XFAIL
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : 韧
# @wx :ren168632201
# @Blog :https://www.cnblogs.com/uncleyong/
import pytest
@pytest.mark.xfail
def test_f():
print("---test_f")
assert 1==1
@pytest.mark.xfail
def test_e():
print("---test_e")
assert 1==2
@pytest.mark.xfail(strict=False)
def test_d():
print("---test_d")
assert 1==1
@pytest.mark.xfail(strict=False)
def test_c():
print("---test_c")
assert 1==2
@pytest.mark.xfail(strict=True)
def test_b():
print("---test_b")
assert 1==1
@pytest.mark.xfail(strict=True)
def test_a():
print("---test_a")
assert 1==2
结果:

__EOF__
本文作者:持之以恒(韧)
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!

浙公网安备 33010602011771号