Pytest也提供了类似Unittest setup、teardown的方法, 有十种:

    1. - **模块级别:**setup_moduleteardown_module
    2. - **函数级别:**setup_functionteardown_function,不在类中的方法
    3. - **类级别:**setup_classteardown_class
    4. - **方法级别:**setup_methodteardown_method
    5. - **方法细化级别:**setupteardown

    例子 10-1

    代码:

    # -*- coding:utf-8 -*-
    # Author:tang_ren_li
    # 2021-1-27 22:45
    
    import pytest
    
    def setup_module():
        print("=====整个.py模块开始前只执行一次=====")
    
    def teardown_module():
        print("=====整个.py模块结束后只执行一次=====")
    
    def setup_function():
        print("===每个函数级别用例开始前都执行setup_function===")#非类的方法
    
    def teardown_function():
        print("===每个函数级别用例结束后都执行teardown_function====")#非类的方法
    
    
    def test_case_a():
        print("test case a run")
        assert 1
    
    def test_case_b():
        print("test case b run")
        assert 1
    
    
    class Test_D():
    
        def setup_class(self):
            print("====整个测试类开始前只执行一次setup_class====")
    
        def teardown_class(self):
            print("====整个测试类结束后只执行一次teardown_class====")
    
        def setup_method(self):
            print("==类里面每个用例执行前都会执行setup_method==")
    
        def teardown_method(self):
            print("==类里面每个用例结束后都会执行teardown_method==")
    
        def setup(self):
            print("=类里面每个用例执行前都会执行setup=")
    
        def teardown(self):
            print("=类里面每个用例结束后都会执行teardown=")
    
        def test_case_1(self):
            print("test case 1 run ")
            assert 1
    
        def test_case_2(self):
            print("test case 2 run ")
            assert 1
    

    运行结果:

    ============================= test session starts =============================
    collecting … collected 4 items

    Setup_TearDown.py::test_case_a

    =====整个.py模块开始前只执行一次=====

    ===每个函数级别用例开始前都执行setup_function===
    PASSED [ 25%]test case a run
    ===每个函数级别用例结束后都执行teardown_function====

    Setup_TearDown.py::test_case_b

    ===每个函数级别用例开始前都执行setup_function===
    PASSED [ 50%]test case b run
    ===每个函数级别用例结束后都执行teardown_function====

    Setup_TearDown.py::Test_D::test_case_1
    ====整个测试类开始前只执行一次setup_class====

    ==类里面每个用例执行前都会执行setup_method==
    =类里面每个用例执行前都会执行setup=
    PASSED [ 75%]test case 1 run
    =类里面每个用例结束后都会执行teardown=
    ==类里面每个用例结束后都会执行teardown_method==

    Setup_TearDown.py::Test_D::test_case_2 ==
    类里面每个用例执行前都会执行setup_method==
    =类里面每个用例执行前都会执行setup=
    PASSED [100%]test case 2 run
    =类里面每个用例结束后都会执行teardown=
    ==类里面每个用例结束后都会执行teardown_method==

    ====整个测试类结束后只执行一次teardown_class====

    =====整个.py模块结束后只执行一次=====

    说明:

    使用Setup 和 Tear down 有一个局限性, 最小层次是方法 或者函数级别, 但是都是针对模块内和
    类内部所有的函数或方法, 并不能精细化区分