setup和teardown的使用
  VxbKCNpUI3P6 2023年11月19日 49 0

一、前言

Pytest也提供了对于环境准备的类似setup、teardown的方法有一下几个:

  • 目录级别:conftest.py
  • 模块级别:setup_module、teardown_module
  • 类级别:setup_class、teardown_class
  • 函数级别:setup_function、teardown_function,不在类中的方法
  • 方法级别:setup_method、teardown_method
  • 方法细化级别:setup、teardown

二、方法级别:setup_method、teardown_method

方法级别 的初始化、清除 分别 在类的 每个测试方法 执行前后执行,并且 `每个用例分别执行1次,`如下定义 setup_method 和 teardown_method 实例方法:在test_case包下创建test_case01.py代码如下

class Test_pass:

    def setup_method(self):
        print("********方法级别的初始化:setup_method********")

    def teardown_method(self):
        print("********方法级别的清除:teardown_method********")

    def test_01(self):
        print('********用例01********')
        assert 1 == 1

    def test_02(self):
        print('********用例02********')
        assert 2 == 2

    def test_03(self):
        print('********用例03********')
        assert 3 == 2

执行命令:pytest -sv .\test_case\test_case05.py,结果如下:

setup和teardown的使用_用例

可以发现,方法别的初始化、清除 在 整个模块所有用例 执行前后 分别 `执行一次`

三、类级别:setup_class、teardown_class

`类级别` 的初始化、清除 分别 在整个类的测试用例 执行前后执行,并且 `只会执行1次,`如下定义 setup_class 和 teardown_class 类方法:

import pytest


class Test_pass:
    @classmethod
    def setup_class(cls):
        print("********类级别的初始化:setup_class********")

    @classmethod
    def teardown_class(cls):
        print("********类级别的清除:teardown_class********")

    def setup_method(self):
        print("********方法级别的初始化:setup_method********")

    def teardown_method(self):
        print("********方法级别的清除:teardown_method********")

    def test_01(self):
        print('********用例01********')
        assert 1 == 1

    def test_02(self):
        print('********用例02********')
        assert 2 == 2

    def test_03(self):
        print('********用例03********')
        assert 3 == 3


if __name__ == '__main__':
    pytest.main(["-s", "test_case05.py::Test_pass::test_01"])

执行后如下图:

setup和teardown的使用_用例_02

可以发现,类级别的初始化、清除 在 整个模块每一个类的用例 执行前后 分别 `执行1次` 。它主要是用来为该 `类` 中的所有测试用例做 `公共的` 初始化 和 清除

四、模块级别:setup_module、teardown_module

`模块级别` 的初始化、清除 分别 在整个模块的测试用例 执行前后执行,并且 `只会执行1次` 。如下定义 setup_module 和 teardown_module 全局函数,代码如下:

import pytest

def setup_module():
    print("********模块级别的初始化:setup_module********")

def teardown_module():
    print("********模块级别的清除:teardown_module********")

class Test_pass01:
    @classmethod
    def setup_class(cls):
        print("********类级别的初始化:setup_class********")

    @classmethod
    def teardown_class(cls):
        print("********类级别的清除:teardown_class********")

    def setup_method(self):
        print("********方法级别的初始化:setup_method********")

    def teardown_method(self):
        print("********方法级别的清除:teardown_method********")

    def test_01(self):
        print('********用例01********')
        assert 1 == 1

    def test_02(self):
        print('********用例02********')
        assert 2 == 2

    def test_03(self):
        print('********用例03********')
        assert 3 == 3

class Test_pass02:

    def test_04(self):
        print('********用例04********')
        assert 2 == 2

    def test_05(self):
        print('********用例05********')
        assert 3 == 3

if __name__ == '__main__':
    pytest.main(["-s", "test_case05.py"])

代码执行如下:

setup和teardown的使用_用例_03

可以发现,模块级别的初始化、清除 在 整个模块所有用例 执行前后 分别 执行1次,它主要是用来为该 模块公共的初始化清除

五、目录级别

目标级别的 初始化清除,就是针对整个目录执行的初始化、清除。需要初始化的目录下面创建 一个名为 conftest.py 的文件,里面内容如下所示

import pytest

@pytest.fixture(scope="package", autouse=True)
def emptyEnv():
    print("********目录级别的初始化********")
    yield
    print("********目录级别的清除********")

代码执行后如下:

setup和teardown的使用_Test_04

注意:这里清除环境的代码就是 yield 之后的代码。 这是一个生成器。我们可以在多个目录下面放置这样的文件,定义该目录的初始化清除。pytest 在执行测试时,会层层调用。

六、方法细化级别:setup、teardown

方法细化级别:setup、teardown,再会在类中每一条用例之前和之后分别执行一次,代码如下:

class Test_pass02:
    def setup(self):
        print("********方法细化级别的初始化:setup********")

    def teardown(self):
        print("********方法细化级别的清除:teardown********")

    def test_04(self):
        print('********用例04********')
        assert 2 == 2

    def test_05(self):
        print('********用例05********')
        assert 3 == 3

执行后结果如下:

setup和teardown的使用_用例_05

七、函数级别:setup_function、teardown_function

函数级别:setup_function、teardown_function,不在类中的方法,会在用例之前和之后分别执行一次:

def setup_function():
    print("********函数级别的初始化:setup_function********")


def teardown_function():
    print("********函数级别的清除:teardown_function********")


# 用例
def test_07():
    print('********用例02********')
    assert 2 == 2

执行后结果如下:

setup和teardown的使用_初始化_06



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: Pytest快速入门 下一篇: Pytest fixture的使用
  1. 分享:
最后一次编辑于 2023年11月19日 0

暂无评论

推荐阅读
VxbKCNpUI3P6