• 『德不孤』Pytest框架 — 7、Pytest预期失败


    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()标识忽略掉。

  • 相关阅读:
    leetcode 55. 跳跃游戏
    Leetcode算法入门与数组丨1. 数据结构与算法简介
    Go语言errors的使用
    UE4 材质学习 (02-利用UV来调整纹理)
    单片机volatile关键字的作用?
    whisper 语音识别项目部署
    数字化广告运营,小迈科技的关键一步
    【Redis延迟队列】redis中的阻塞队列和延迟队列
    c++加C#实现android开发
    【已解决】uniapp使用vant-ui中的tab标签页的时候,发现底下红色的切换线不见了
  • 原文地址:https://www.cnblogs.com/liuyuelinfighting/p/15940105.html