9. Pytest标记预计失败的用例:xfail

一、前言

我们现在要学的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()方法也将会失效;

posted @ 2023-01-17 10:28  测开星辰  阅读(317)  评论(0编辑  收藏  举报