pytest 初始化清除
初始化清除
初始化清除对自动化测试框架来说,初始化清除功能至关重要
如果清除功能没做好 经常会出现一部分测试用例 单独跑可能没问题
但是和其他测试用例一起跑 就会出现问题 或者和另外一批测试用例就会出错
而且初始化清除做好对于简化自动化测试用例也非常重要
如 系统中实现了两个功能的自动化 一个登录一个用户管理 添加了一个用户
我们要列出添加是否成功,如果初始化清除没做好 出现了两个张三 有可能是登录的时候 张三没有清除掉
模块级别 (类级别,方法级别。目录级别)
初始化清除它不是 pytest里的 而是继承unittest 里的
模块级别的初始化,清除 分别 在整个模块的测试用例执行前后,并且只会执行一次
如下定义 setup_module 和 teardown_module 全局函数
示例(执行pytest -s):
def setup_module(): print('\n *** 初始化-模块 ***') def teardown_module(): print('\n *** 清除-模块 ***') class Test_错误密码:def test_C001001(self): print('\n用例C001001') assert1 == 1def test_C001002(self): print('\n用例C001002') assert2 == 2def test_C001003(self): print('\n用例C001003') assert3 == 2class Test_错误密码2:def test_C001021(self): print('\n用例C001021') assert1 == 1def test_C001022(self): print('\n用例C001022') assert2 == 2
类级别:
类级别的初始化,清除 分别在整个类的测试用例执行前后执行,并且只会执行一次
如定义下 setup_class 和 teardpwn 类方法
实例代码 pytest -s:
def setup_module(): print('\n *** 初始化-模块 ***') def teardown_module(): print('\n *** 清除-模块 ***') class Test_错误密码:def setup_class(cls): print('\n === 初始化-类 ===') def teardown_class(cls): print('\n === 清除 - 类 ===') def test_C001001(self): print('\n用例C001001') assert1 == 1def test_C001002(self): print('\n用例C001002') assert2 == 2def test_C001003(self): print('\n用例C001003') assert3 == 2class Test_错误密码2:def test_C001021(self): print('\n用例C001021') assert1 == 1def test_C001022(self): print('\n用例C001022') assert2 == 2
可以发现,类级别的初始化、清除 在 整个模块所有用例 执行前后 分别 执行1次
。
它主要是用来为该 类
中的所有测试用例做 公共的
初始化 和 清除
方法级别
方法级别的初始化,清除分别在类的每给测试方法执行前后执行,并且每个用例分别执行一次
如下定义 setup_class 和 teardown 类方法
也就是 对于每个测试用例的方法 每个方法初始化 每个前后执行前后都要执行一次
实例代码:
def setup_module(): print('\n *** 初始化-模块 ***') def teardown_module(): print('\n *** 清除-模块 ***') class Test_错误密码:def setup_class(cls): print('\n === 初始化-类 ===') def teardown_class(cls): print('\n === 清除 - 类 ===') def setup_method(self): print('\n --- 初始化-方法 ---') def teardown_method(self): print('\n --- 清除 -方法 ---') def test_C001001(self): print('\n用例C001001') assert1 == 1def test_C001002(self): print('\n用例C001002') assert2 == 2def test_C001003(self): print('\n用例C001003') assert3 == 2class Test_错误密码2:def test_C001021(self): print('\n用例C001021') assert1 == 1def test_C001022(self): print('\n用例C001022') assert2 == 2
目录级别
目录级别的初始化清除,就是针对整个目录执行的初始化,清除
在需要初始化的目录下面创建应该名为 conftest.py 的文件,里面的内容如下
实例 pytest -sv:
import pytest
# fixture: 装置初始化清除环境
# package: 对应整个目录
# autouse: 声明使用初始
def st_emptyEnv(): print(f'\n#### 初始化-目录甲') yield print(f'\n#### 清除-目录甲')
但是pytest 一个重要的bug : 清除操作并不一定在该目录最后一个测试用例执行完调用
多个目录都有初始化清除就会出现bug 待修复 没有修复前不建议使用目录初始化清除
d ef setup_module(): print('\n *** 初始化-模块 ***') def teardown_module(): print('\n *** 清除-模块 ***') class Test_错误密码:def setup_class(cls): print('\n === 初始化-类 ===') def teardown_class(cls): print('\n === 清除 - 类 ===') def test_C001001(self): print('\n用例C001001') assert1 == 1def test_C001002(self): print('\n用例C001002') assert2 == 2def test_C001003(self): print('\n用例C001003') assert3 == 2class Test_错误密码2:def test_C001021(self): print('\n用例C001021') assert1 == 1def test_C001022(self): print('\n用例C001022') assert2 == 2