pytest 初始化清除

Posted sunzzc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pytest 初始化清除相关的知识,希望对你有一定的参考价值。

初始化清除

初始化清除对自动化测试框架来说,初始化清除功能至关重要

如果清除功能没做好 经常会出现一部分测试用例 单独跑可能没问题 

但是和其他测试用例一起跑 就会出现问题 或者和另外一批测试用例就会出错

而且初始化清除做好对于简化自动化测试用例也非常重要

如 系统中实现了两个功能的自动化 一个登录一个用户管理 添加了一个用户  

我们要列出添加是否成功,如果初始化清除没做好 出现了两个张三 有可能是登录的时候 张三没有清除掉

模块级别 (类级别,方法级别。目录级别)

初始化清除它不是 pytest里的 而是继承unittest 里的

模块级别的初始化,清除 分别 在整个模块的测试用例执行前后,并且只会执行一次

如下定义 setup_module 和 teardown_module 全局函数

示例(执行pytest -s):

def setup_module(): print(‘ *** 初始化-模块 ***‘) def teardown_module(): print(‘ *** 清除-模块 ***‘) class Test_错误密码:def test_C001001(self): print(‘ 用例C001001‘) assert1 == 1def test_C001002(self): print(‘ 用例C001002‘) assert2 == 2def test_C001003(self): print(‘ 用例C001003‘) assert3 == 2class Test_错误密码2:def test_C001021(self): print(‘ 用例C001021‘) assert1 == 1def test_C001022(self): print(‘ 用例C001022‘) assert2 == 2

类级别:

类级别的初始化,清除 分别在整个类的测试用例执行前后执行,并且只会执行一次

如定义下 setup_class 和 teardpwn 类方法

实例代码 pytest -s:

def setup_module(): print(‘ *** 初始化-模块 ***‘) def teardown_module(): print(‘ *** 清除-模块 ***‘) class Test_错误密码: @classmethoddef setup_class(cls): print(‘ === 初始化-类 ===‘) @classmethoddef teardown_class(cls): print(‘ === 清除 - 类 ===‘) def test_C001001(self): print(‘ 用例C001001‘) assert1 == 1def test_C001002(self): print(‘ 用例C001002‘) assert2 == 2def test_C001003(self): print(‘ 用例C001003‘) assert3 == 2class Test_错误密码2:def test_C001021(self): print(‘ 用例C001021‘) assert1 == 1def test_C001022(self): print(‘ 用例C001022‘) assert2 == 2

可以发现,类级别的初始化、清除 在 整个模块所有用例 执行前后 分别 执行1次 。

它主要是用来为该  中的所有测试用例做 公共的 初始化 和 清除

 

方法级别

方法级别的初始化,清除分别在类的每给测试方法执行前后执行,并且每个用例分别执行一次

如下定义 setup_class 和 teardown 类方法

也就是 对于每个测试用例的方法 每个方法初始化   每个前后执行前后都要执行一次

实例代码:

def setup_module(): print(‘ *** 初始化-模块 ***‘) def teardown_module(): print(‘ *** 清除-模块 ***‘) class Test_错误密码: @classmethoddef setup_class(cls): print(‘ === 初始化-类 ===‘) @classmethoddef teardown_class(cls): print(‘ === 清除 - 类 ===‘) def setup_method(self): print(‘ --- 初始化-方法 ---‘) def teardown_method(self): print(‘ --- 清除 -方法 ---‘) def test_C001001(self): print(‘ 用例C001001‘) assert1 == 1def test_C001002(self): print(‘ 用例C001002‘) assert2 == 2def test_C001003(self): print(‘ 用例C001003‘) assert3 == 2class Test_错误密码2:def test_C001021(self): print(‘ 用例C001021‘) assert1 == 1def test_C001022(self): print(‘ 用例C001022‘) assert2 == 2

目录级别

目录级别的初始化清除,就是针对整个目录执行的初始化,清除

在需要初始化的目录下面创建应该名为 conftest.py 的文件,里面的内容如下

实例 pytest -sv:

import pytest

 

# fixture: 装置初始化清除环境

# package: 对应整个目录

# autouse: 声明使用初始

@pytest.fixture(scope=‘package‘,autouse=True)def st_emptyEnv(): print(f‘ #### 初始化-目录甲‘) yield print(f‘ #### 清除-目录甲‘)

但是pytest 一个重要的bug : 清除操作并不一定在该目录最后一个测试用例执行完调用

多个目录都有初始化清除就会出现bug 待修复 没有修复前不建议使用目录初始化清除

 

d ef setup_module(): print(‘ *** 初始化-模块 ***‘) def teardown_module(): print(‘ *** 清除-模块 ***‘) class Test_错误密码: @classmethoddef setup_class(cls): print(‘ === 初始化-类 ===‘) @classmethoddef teardown_class(cls): print(‘ === 清除 - 类 ===‘) def test_C001001(self): print(‘ 用例C001001‘) assert1 == 1def test_C001002(self): print(‘ 用例C001002‘) assert2 == 2def test_C001003(self): print(‘ 用例C001003‘) assert3 == 2class Test_错误密码2:def test_C001021(self): print(‘ 用例C001021‘) assert1 == 1def test_C001022(self): print(‘ 用例C001022‘) assert2 == 2

以上是关于pytest 初始化清除的主要内容,如果未能解决你的问题,请参考以下文章

python pytest片段

《带你装B,带你飞》pytest修仙之路5 - yield操作

如何从片段外部清除/重置地图?

Python测试框架pytest(16)运行上次失败用例查看与清除缓存cache自定义标记mark

pytest+python下的UI自动化基础框架

pytest文档19-doctest测试框架