python-pytest测试框架中的setup和teardown
一、写在前面
同unittest 测试框架一样 ,pytest 也提供了 类似 setup 和 teardown 的初始化方法和结束后的方法,且pytest 提供了更为细致的 方法
- setup_module / teardown_module 模块级别
- setup_function / teardown_function 函数级别 (包含测试类中的静态方法)
- setup_class / teardown_class 类级别的
- setup_method / teardown_method 类方法级别的 (执行优先级高于 setup / teardown,两种方法一般取其中一种即可)
- 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 整个函数级别的结束方法---------- ##########整个模块级别的结束方法##########