Python 3.pytest 初始化和清除

Maple · 2020年12月26日 · 1117 次阅读

对自动化测试框架来说,setupteardown至关重要。

模块级别

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

创建test_03.py,定义 setup_moduleteardown_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_classteardown_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: 清除操作并不一定会在该目录最后一个测试用例执行完进行调用。

所以在这个问题解决前,推荐大家先不要使用这种 目录级别 的初始化清除。

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
暂无回复。
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册