Pytest框架 —— Pytest预期失败

1138 篇文章 11 订阅
682 篇文章 3 订阅

Pytest预期失败需要使用@pytest.mark.xfail()标记。

(1)@pytest.mark.xfail()标记的作用:

期望测试用例是失败的,但是会运行此测试用例,并且也不会影响其他测试用例的的执行。(即xfail标记并不会影响用例的运行)

如果预期失败的测试用例执行失败的则结果是xfail(不会额外显示出错误信息)

如果测试用例执行成功的则结果是xpass

在报告中会将这些用例列在“预期失败XFAIL或意外传递XPASS部分。

(2)应用场景:

  1. 你期望测试由于某种原因失败。

    如:用例功能不完善,或者用例执行一直失败。

  2. 对尚未实现的功能进行测试时。

  3. 尚未修复的错误进行测试时。

(3)语法参数说明

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

  • condition: 如果满足条件则标记用例执行失败, 默认为True

    说明:condition表示预期结果,然后用例实际执行的结果,与预期结果对比,会出现4种测试结果状态。

    failed, passed, xfailed, xpassed

    提示:condition可以等于True或者False,也可以等于一个表达式,如:condition=1>2等。

  • reason:说明用例标记为预期失败的原因, 默认为None。(必填)

  • raises=None:在raises参数中指定单个异常或异常组,表明期望用例抛出这些异常。

    如果用例失败不是因为这些异常,那用例会被标记为failed

    如果测试用例失败的异常与raises参数标识的异常一致,则标记为xfailed

@pytest.mark.xfail(raises=AssertionError)
def test_03():
    assert 3 == 4

@pytest.mark.xfail(raises=ValueError)
def test_04():
    if isinstance('1234', int) is False:
        raise TypeError("传入参数非整数")
  • 一般很少这样用,会使用pytest.raises先抛出接口异常,再断言异常信息是否符合预期。

  • run:标识是否执行此用例, 若为True则执行,若为False则用例不执行用例,直接标记该用力为XFAIL,(防止在xfail死循环。)

    默认为True,执行此测试用例。

  • strictstrict默认为False。当strict=True时,如果测试用例被标识为xpass,则把该用例标识为失败fail

    我们也可以不修改strict属性值,在全局配置文件pytest.ini中添加一行配置:xfail_strict=true即可,作用是一样的。

(4)示例:

"""
1.学习目标
    了解预期失败方法
2.操作步骤
    2.1 xfail(condition,reason)
        condition:当condition条件为真,用例标记失败
        reason: 原因

3.使用xfail标识用例可能出现的情况:
    条件     用例执行结果   测试结果
    True     False          FAILED
    True     True           PASSED
    False    False          XFAIL
    False    True           XPASS

"""
# 1.导入pytest
import pytest


# 2.编写测试用例
# 预期失败,结果失败
@pytest.mark.xfail(True, reason="该功能尚未完成")
def test_case_1():
    print("预期失败,结果失败")
    pytest.xfail()
    assert False


# 预期失败,结果成功
@pytest.mark.xfail(True, reason="该功能尚未计划")
def test_case_2():
    print("预期失败,结果成功")
    assert True


# 预期成功,结果失败
@pytest.mark.xfail(False, reason="")
def test_case_3():
    print("预期成功,结果失败")
    assert False


# 预期成功,结果成功
@pytest.mark.xfail(False, reason="")
def test_case_4():
    print("预期成功,结果成功")
    assert True


if __name__ == '__main__':
    pytest.main()

"""
运行结果:
test_01.py::test_case_1 预期失败,结果失败
XFAIL
test_01.py::test_case_2 预期失败,结果成功
XPASS (该功能尚未计划)
test_01.py::test_case_3 预期成功,结果失败
FAILED
test_01.py::test_case_4 预期成功,结果成功
PASSED

============== 1 failed, 1 passed, 1 xfailed, 1 xpassed in 0.09s ==============


说明:
x(小写x)预期失败,结果失败   1 xfailed(预期失败)
X(大写X)预期失败,结果成功   1 xpassed(预期成功)
F预期成功,结果失败   1 failed
.预期成功,结果成功   1 passed
在测试执行过程中,会将xpassed状态的用例直接转成failed状态
"""

(5)忽略xfail标识

执行命令:pytest --runxfail,也就是--runxfail参数可以将全部@pytest.mark.xfail()标识忽略掉。

END绵薄之力

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

加入我的软件测试交流群:110685036免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

获取方式 :

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值