Pytest的测试类中,setup和teardown为什么不会执行

在测试类中,为什么setup和tear down不会执行?求帮忙解释一下🤔

img

  • 这篇博客也许可以解决你的问题👉 :Python测试框架pytest(03)setup和teardown
  • 除此之外, 这篇博客: Python Pytest自动化测试 获取测试用例执行结果中的 2、setup和teardown 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 给用例写个fixture增加用例的前置和后置操作,conftest.py如下:

    
    import pytest
    
    @pytest.hookimpl(hookwrapper=True, tryfirst=True)
    def pytest_runtest_makereport(item, call):
        print('------------------------------------')
    
        # 获取钩子方法的调用结果
        out = yield
        print('用例执行结果', out)
    
        # 3\. 从钩子方法的调用结果中获取测试报告
        report = out.get_result()
    
        print('测试报告:%s' % report)
        print('步骤:%s' % report.when)
        print('nodeid:%s' % report.nodeid)
        print('description:%s' % str(item.function.__doc__))
        print(('运行结果: %s' % report.outcome))
    
    @pytest.fixture(scope="session", autouse=True)
    def fix_a():
        print("setup 前置操作")
        yield 
        print("teardown 后置操作")
    
    

    运行结果:

     

    setup执行失败了,setup执行结果的failed,后面的call用例和teardown都不会执行。

     

    此时用例的状态是error,也就是用例call还没开始执行就异常了。

    如果setup正常执行,但测试用例call失败了。

    @pytest.fixture(scope="session", autouse=True)
    def fix_a():
        print("setup 前置操作")
        yield
        print("teardown 后置操作")
    
    

    test_a.py用例:

    def test_a():
        '''用例描述:test_a'''
        print("123")
        assert 1==0
    
    

     

    那么此时运行结果就是failed

    如果setup正常执行,测试用例call正常执行,teardown失败了:

    @pytest.fixture(scope="session", autouse=True)
    def fix_a():
        print("setup 前置操作")
        yield
        print("teardown 后置操作")
        raise Exception("teardown 失败了")
    
    

    teat_a.py用例:

    def test_a():
        '''用例描述:test_a'''
        print("123")
    
    

     

    最终结果:1 passed, 1 error in 0.16 seconds 。

setup和teardown 是执行类里面的用例函数.

    def setup(self):
        print("===== 类里面每个用例执行前都会执行 setup =====")
 
    def teardown(self):
        print("===== 类里面每个用例结束后都会执行 teardown =====")

整体全部的顺序:
setup_module->setup_function->test_one->teardown_function->setup_function->test_two->teardown_function->setup_class->setup_method->setup->test_three->teardown->teardown_method->setup_method->setup->test_four->teardown->teardown_method->teardown_class->teardown_module