一、前言

在自动化测试过程中,我们执行完用例之后,需要验证脚本执行的结果和预期的结果是否一致,来达到断言测试用例是否执行成功。一般情况下我们常用的断言方式是assert + 布尔型/表达式形式,但是这种形式的断言不通过则用例会直接停止,该条用例直接结束,哪怕后面还有代码也不会执行。

那么,怎么才能让用例完整的执行完再判断成功与否呢?pytest-assume帮我们解决了这一问题。我们也可以给一条用例设置多个断言,哪怕第一个断言失败,后面的断言依然执行判断。

二、学习目标

1.pytest-assume安装

2.pytest-assume应用

三、知识点

1.pytest-assume安装

插件安装:

pip install pytest-assume

2.pytest-assume应用

  • 语法:

    pytest.assume(布尔型/表达式)
    
  • 原生的assert和pytest-assume断言对比

    代码示例:

    import pytest
    
    class TestCase():
    
        def test_01(self):
            print("---用例1执行---")
            assert False,"用例1-第一次断言"
            assert False,"用例1-第二次断言"
    
    
        def test_02(self):
            print("---用例2执行---")
            pytest.assume(False,"用例2-第一次断言")
            pytest.assume(False,"用例2-第二次断言")
    

    运行结果:

    ================================== FAILURES ===================================
    ______________________________ TestCase.test_01 _______________________________
    
    self = <test_demo.TestCase object at 0x000001FB31A95780>
    
        def test_01(self):
            print("---用例1执行---")
    >       assert False,"用例1-第一次断言"
    E       AssertionError: 用例1-第一次断言   
    E       assert False
    
    test_demo.py:7: AssertionError
    ---------------------------- Captured stdout call -----------------------------
    ---用例1执行---
    ______________________________ TestCase.test_02 _______________________________
    
    tp = <class 'pytest_assume.plugin.FailedAssumption'>, value = None, tb = None
    
        def reraise(tp, value, tb=None):
            try:
                if value is None:
                    value = tp()
                if value.__traceback__ is not tb:
    >               raise value.with_traceback(tb)
    E               pytest_assume.plugin.FailedAssumption: 
    E               2 Failed Assumptions:
    E               
    E               test_demo.py:13: AssumptionFailure
    E               >>	pytest.assume(False,"用例2-第一次断言")
    E               AssertionError: 用例2-第一次断言
    E               assert False
    E               
    E               test_demo.py:14: AssumptionFailure
    E               >>	pytest.assume(False,"用例2-第二次断言")
    E               AssertionError: 用例2-第二次断言
    E               assert False
    
    D:\Python36\lib\site-packages\six.py:718: FailedAssumption
    ---------------------------- Captured stdout call -----------------------------
    ---用例2执行---
    =========================== short test summary info ===========================
    FAILED test_demo.py::TestCase::test_01 - AssertionError: 用例1-第一次断言
    FAILED test_demo.py::TestCase::test_02 - pytest_assume.plugin.FailedAssumption: 
    ============================== 2 failed in 0.06s ==============================
    

    用例1由于第一次断言失败了所以没有运行,用例2哪怕第一次断言失败了,也进行了第二次断言。