python-pytest测试框架中的setup和teardown


一、写在前面

同unittest 测试框架一样 ,pytest 也提供了 类似 setup 和 teardown 的初始化方法和结束后的方法,且pytest 提供了更为细致的 方法

  1. setup_module / teardown_module  模块级别 
  2. setup_function / teardown_function 函数级别  (包含测试类中的静态方法)
  3. setup_class / teardown_class     类级别的
  4. setup_method / teardown_method  类方法级别的  (执行优先级高于 setup / teardown,两种方法一般取其中一种即可)
  5. setup / teardown  类方法级别的 

二、代码

import pytest


def setup_module():
    print('#'*10+'整个模块级别的初始化方法'+'#'*10)


def teardown_module():
    print('#'*10+'整个模块级别的结束方法'+'#'*10)

def setup_function():
    print('整个函数级别的初始化方法'+'+'*10)

def teardown_function():
    print('整个函数级别的结束方法'+'-'*10)


class Test_Module1:

    def setup_class(self):
        print('整个类级别的初始化方法' + '#' * 10)

    def teardown_class(self):
        print('整个类级别的结束方法' + '#' * 10)


    def setup_method(self):
        print('方法级别的初始化方法setup_method' + '~' * 10)

    def teardown_method(self):
        print('方法级别的结束方法teardown_method' + '~' * 10)

    def setup(self):
        print('方法级别的初始化方法setup' + '@' * 10)

    def teardown(self):
        print('方法级别的结束方法teardown' + '@' * 10)

    def test_1(self):
        print('第一个类的测试方法1')

    def test_2(self):
        print('第一个类的测试方法2')



class Test_Module2:

    def setup_class(self):
        print('整个类级别的初始化方法' + '#' * 10)

    def teardown_class(self):
        print('整个类级别的结束方法' + '#' * 10)

    def setup_method(self):
        print('方法级别的初始化方法setup_method' + '~' * 10)


    def teardown_method(self):
        print('方法级别的结束方法teardown_method' + '~' * 10)

    def setup(self):
        print('方法级别的初始化方法' + '@' * 10)

    def teardown(self):
        print('方法级别的结束方法' + '@' * 10)

    def test_11(self):
        print('第二个类的测试方法1')

    def test_22(self):
        print('第二个类的测试方法1')
    # 类中的静态方法也是 函数,
    @staticmethod
    def test_static():
        print('这个是第二个类中的静态方法')
    # 类方法不会作为测试方法执行
    @classmethod
    def test_cls(cls):
        print('这个是第二个类中的类方法22222222222222')


def test_function():
    print('这个是函数1')


def test_function2():
    print('这个是函数2')


if __name__ == '__main__':
    pytest.main(['-v','./setup_module.py'])

运行结果:

test_setup.py::Test_Module1::test_1 ##########整个模块级别的初始化方法##########
整个类级别的初始化方法##########
方法级别的初始化方法setup_method~~~~~~~~~~
方法级别的初始化方法setup@@@@@@@@@@
PASSED                               [ 14%]第一个类的测试方法1
方法级别的结束方法teardown@@@@@@@@@@
方法级别的结束方法teardown_method~~~~~~~~~~

test_setup.py::Test_Module1::test_2 方法级别的初始化方法setup_method~~~~~~~~~~
方法级别的初始化方法setup@@@@@@@@@@
PASSED                               [ 28%]第一个类的测试方法2
方法级别的结束方法teardown@@@@@@@@@@
方法级别的结束方法teardown_method~~~~~~~~~~
整个类级别的结束方法##########

test_setup.py::Test_Module2::test_11 整个类级别的初始化方法##########
方法级别的初始化方法setup_method~~~~~~~~~~
方法级别的初始化方法@@@@@@@@@@
PASSED                              [ 42%]第二个类的测试方法1
方法级别的结束方法@@@@@@@@@@
方法级别的结束方法teardown_method~~~~~~~~~~

test_setup.py::Test_Module2::test_22 方法级别的初始化方法setup_method~~~~~~~~~~
方法级别的初始化方法@@@@@@@@@@
PASSED                              [ 57%]第二个类的测试方法1
方法级别的结束方法@@@@@@@@@@
方法级别的结束方法teardown_method~~~~~~~~~~

test_setup.py::Test_Module2::test_static 整个函数级别的初始化方法++++++++++
方法级别的初始化方法setup_method~~~~~~~~~~
方法级别的初始化方法@@@@@@@@@@
PASSED                          [ 71%]这个是第二个类中的静态方法
方法级别的结束方法@@@@@@@@@@
方法级别的结束方法teardown_method~~~~~~~~~~
整个函数级别的结束方法----------
整个类级别的结束方法##########

test_setup.py::test_function 整个函数级别的初始化方法++++++++++
PASSED                                      [ 85%]这个是函数1
整个函数级别的结束方法----------

test_setup.py::test_function2 整个函数级别的初始化方法++++++++++
PASSED                                     [100%]这个是函数2
整个函数级别的结束方法----------
##########整个模块级别的结束方法##########