3.pytest初始化和清除
对自动化测试框架来说,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: 清除操作并不一定会在该目录最后一个测试用例执行完进行调用。
所以在这个问题解决前,推荐大家先不要使用这种 目录级别
的初始化清除。