一、前言
Pytest也提供了对于环境准备的类似setup、teardown的方法有一下几个:
- 目录级别:conftest.py
- 模块级别:setup_module、teardown_module
- 类级别:setup_class、teardown_class
- 函数级别:setup_function、teardown_function,不在类中的方法
- 方法级别:setup_method、teardown_method
- 方法细化级别:setup、teardown
二、方法级别:setup_method、teardown_method
方法级别 的初始化、清除 分别 在类的 每个测试方法 执行前后执行,并且 `每个用例分别执行1次,`如下定义 setup_method 和 teardown_method 实例方法:在test_case包下创建test_case01.py代码如下
class Test_pass:
def setup_method(self):
print("********方法级别的初始化:setup_method********")
def teardown_method(self):
print("********方法级别的清除:teardown_method********")
def test_01(self):
print('********用例01********')
assert 1 == 1
def test_02(self):
print('********用例02********')
assert 2 == 2
def test_03(self):
print('********用例03********')
assert 3 == 2
执行命令:pytest -sv .\test_case\test_case05.py,结果如下:
可以发现,方法别的初始化、清除 在 整个模块所有用例 执行前后 分别 `执行一次`
三、类级别:setup_class、teardown_class
`类级别` 的初始化、清除 分别 在整个类的测试用例 执行前后执行,并且 `只会执行1次,`如下定义 setup_class 和 teardown_class 类方法:
import pytest
class Test_pass:
@classmethod
def setup_class(cls):
print("********类级别的初始化:setup_class********")
@classmethod
def teardown_class(cls):
print("********类级别的清除:teardown_class********")
def setup_method(self):
print("********方法级别的初始化:setup_method********")
def teardown_method(self):
print("********方法级别的清除:teardown_method********")
def test_01(self):
print('********用例01********')
assert 1 == 1
def test_02(self):
print('********用例02********')
assert 2 == 2
def test_03(self):
print('********用例03********')
assert 3 == 3
if __name__ == '__main__':
pytest.main(["-s", "test_case05.py::Test_pass::test_01"])
执行后如下图:
可以发现,类级别的初始化、清除 在 整个模块每一个类的用例 执行前后 分别 `执行1次` 。它主要是用来为该 `类` 中的所有测试用例做 `公共的` 初始化 和 清除
四、模块级别:setup_module、teardown_module
`模块级别` 的初始化、清除 分别 在整个模块的测试用例 执行前后执行,并且 `只会执行1次` 。如下定义 setup_module 和 teardown_module 全局函数,代码如下:
import pytest
def setup_module():
print("********模块级别的初始化:setup_module********")
def teardown_module():
print("********模块级别的清除:teardown_module********")
class Test_pass01:
@classmethod
def setup_class(cls):
print("********类级别的初始化:setup_class********")
@classmethod
def teardown_class(cls):
print("********类级别的清除:teardown_class********")
def setup_method(self):
print("********方法级别的初始化:setup_method********")
def teardown_method(self):
print("********方法级别的清除:teardown_method********")
def test_01(self):
print('********用例01********')
assert 1 == 1
def test_02(self):
print('********用例02********')
assert 2 == 2
def test_03(self):
print('********用例03********')
assert 3 == 3
class Test_pass02:
def test_04(self):
print('********用例04********')
assert 2 == 2
def test_05(self):
print('********用例05********')
assert 3 == 3
if __name__ == '__main__':
pytest.main(["-s", "test_case05.py"])
代码执行如下:
可以发现,模块级别的初始化、清除 在 整个模块所有用例 执行前后 分别 执行1次,
它主要是用来为该 模块
公共的
初始化清除
五、目录级别
目标级别的 初始化清除,就是针对整个目录执行的初始化、清除。需要初始化的目录下面创建 一个名为 conftest.py
的文件,里面内容如下所示
import pytest
@pytest.fixture(scope="package", autouse=True)
def emptyEnv():
print("********目录级别的初始化********")
yield
print("********目录级别的清除********")
代码执行后如下:
注意:这里清除环境的代码就是 yield 之后的代码。 这是一个生成器。我们可以在多个目录下面放置这样的文件,定义该目录的初始化清除。pytest 在执行测试时,会层层调用。
六、方法细化级别:setup、teardown
方法细化级别:setup、teardown,再会在类中每一条用例之前和之后分别执行一次,代码如下:
class Test_pass02:
def setup(self):
print("********方法细化级别的初始化:setup********")
def teardown(self):
print("********方法细化级别的清除:teardown********")
def test_04(self):
print('********用例04********')
assert 2 == 2
def test_05(self):
print('********用例05********')
assert 3 == 3
执行后结果如下:
七、函数级别:setup_function、teardown_function
函数级别:setup_function、teardown_function,不在类中的方法,会在用例之前和之后分别执行一次:
def setup_function():
print("********函数级别的初始化:setup_function********")
def teardown_function():
print("********函数级别的清除:teardown_function********")
# 用例
def test_07():
print('********用例02********')
assert 2 == 2
执行后结果如下: