对自动化测试框架来说,setup
和teardown
至关重要。
模块级别
的初始化、清除分别在整个模块的测试用例执行前后执行,并且 只会执行1次
。
创建test_03.py
,定义 setup_module
和teardown_module
全局函数
# filename:test_03.py
def setup_module():
print('\n====初始化模块====')
def teardown_module():
print('\n====清除模块====')
class TestDemo01():
def test_101(self):
print("\n测试用例test_101执行")
assert 1==1
def test_102(self):
print("\n测试用例test_102执行")
assert 1==1
def test_103(self):
print("\n测试用例test_103执行")
assert 1==1
执行命令 pytest test_03.py
,运行结果如下
============================= test session starts =============================
....
test_03.py
====初始化模块====
测试用例test_101执行
.
测试用例test_102执行
.
测试用例test_103执行
.
====清除模块====
============================== 6 passed in 0.06s ==============================
类级别
的初始化、清除 分别在整个类的测试用例 执行前后执行,并且 只会执行1次
修改test_03.py
文件,定义 setup_class
和teardown_class
类方法
....
class TestDemo01():
def setup_class(self):
print('\n====初始化类====')
def teardown_module(self):
print('\n====清除类====')
def test_101(self):
print("\n测试用例test_101执行")
assert 1 == 1
def test_102(self):
print("\n测试用例test_102执行")
assert 1 == 1
def test_103(self):
print("\n测试用例test_103执行")
assert 1 == 1
执行命令 pytest test_03.py
,运行结果如下
============================= test session starts =============================
....
test_03.py
====初始化模块====
====初始化类====
测试用例test_101执行
.
测试用例test_102执行
.
测试用例test_103执行
.
====清除类====
====清除模块====
============================== 6 passed in 0.06s ==============================
方法级别
的初始化、清除 分别 在类的每个测试方法执行前后执行,并且 每个用例分别执行1次
修改test_03.py
文件,定义 setup_method 和 teardown_method 类方法
....
class TestDemo01():
def setup_class(self):
print('\n====初始化类====')
def teardown_class(self):
print('\n====清除类====')
def setup_method(self):
print('\n====初始化方法====')
def teardown_method(self):
print('\n====清除方法====')
def test_101(self):
print("\n测试用例test_101执行")
assert 1 == 1
def test_102(self):
print("\n测试用例test_102执行")
assert 1 == 1
def test_103(self):
print("\n测试用例test_103执行")
assert 1 == 1
执行命令 pytest test_03.py
,运行结果如下
============================= test session starts =============================
....
test_03.py
====初始化模块====
====初始化类====
====初始化方法====
测试用例test_101执行
.
====清除方法====
====初始化方法====
测试用例test_102执行
.
====清除方法====
====初始化方法====
测试用例test_103执行
.
====清除方法====
====清除类====
====清除模块====
============================== 6 passed in 0.07s ==============================
目标级别
的 初始化清除,就是针对整个目录执行的初始化、清除。
在需要初始化的目录下面创建 一个名为 conf.py
的文件,里面内容如下所示
import pytest
@pytest.fixture(scope='package',autouse=True)
def st_emptyEnv():
print('\n#### 初始化-目录')
yield
print('\n#### 清除-目录')
执行命令 pytest test_03.py
,运行结果如下
============================= test session starts =============================
....
#### 初始化-目录
====初始化模块====
====初始化类====
====初始化方法====
测试用例test_101执行
.
====清除方法====
====初始化方法====
测试用例test_102执行
.
====清除方法====
====初始化方法====
测试用例test_103执行
.
====清除方法====
====清除类====
====清除模块====
#### 清除-目录
============================== 6 passed in 0.02s ==============================
但是我发现了 pytest 一个重要的 bug: 清除操作并不一定会在该目录最后一个测试用例执行完进行调用。
所以在这个问题解决前,推荐大家先不要使用这种 目录级别
的初始化清除。