pytest单元测试框架-fixture学习笔记(三)

Fixture,通常用来对测试方法、测试函数、测试类、测试文件 进行初始化 和还原测试环境

一、函数级 setup_function和teardown_function
这两个都是在普通方法前后执行,不作用于class里面的类方法

import pytest

# 功能函数
def multiply(a,b):
    return a * b

# 普通函数级的fixture
def setup_function():
    print('setup_function------>')

def teardown_function():
    print('teardown_function---->')

# 测试用例--普通方法
def test_multiply_1():
    print('test_1')
    assert multiply(3,4) == 12

def test_multiply_2():
    print('test_2')
    assert multiply('a',3) == 'aaa'

class Test_multiply:
    # 测试用例--类方法
    def test_multiply_3(self):
        print('test_3')
        assert multiply(1,2) == 2


if __name__ == '__main__':
    pytest.main()

运行结果如图所示:在两个普通测试方法运行前后 执行,在class内的测试方法前后 没有执行。


二、类级别 setup_class和teardown_class

#-*- coding: utf-8 -*-
import pytest

# 功能函数
def multiply(a,b):
    return a * b

class Test_multiply:

    def setup_class(self):
        print('类前运行')

    def teardown_class(self):
        print('类后运行')

    # 测试用例--类方法
    def test_multiply_3(self):
        print('test_3')
        assert multiply(1,2) == 2

    def test_multiply_4(self):
        print('test_4')
        assert multiply(6,7) == 42


if __name__ == '__main__':
    pytest.main()

运行结果如图:这两个方法在类中使用,并且在类运行前 和 类运行后 执行


三、类中运行的setup_method 和 teardown_method
这两个方法是作用于类中的函数,不在类中的函数 是不能使用的。

#-*- coding: utf-8 -*-
import pytest

# 功能函数
def multiply(a,b):
    return a * b

class Test_multiply:

    def setup_class(self):
        print('类前运行')

    def teardown_class(self):
        print('类后运行')

    def setup_method(self):
        print('类方法前运行')

    def teardown_method(self):
        print('类方法后运行')

    # 测试用例--类方法
    def test_multiply_3(self):
        print('test_3')
        assert multiply(1,2) == 2

    def test_multiply_4(self):
        print('test_4')
        assert multiply(6,7) == 42


if __name__ == '__main__':
    pytest.main()

运行结果如图所示:这两个方法分别在每个类方法 执行前后运行

四、模块级 setup_module和teardown_module
这两个方法是全局方法,在整个文件的前后 各运行一次

#-*- coding: utf-8 -*-
import pytest

# 功能函数
def multiply(a,b):
    return a * b

def setup_module():
    print('模块执行前')

def teardown_module():
    print('模块执行后')

class Test_multiply:

    def setup_class(self):
        print('类前运行')

    def teardown_class(self):
        print('类后运行')

    def setup_method(self):
        print('类方法前运行')

    def teardown_method(self):
        print('类方法后运行')

    # 测试用例--类方法
    def test_multiply_3(self):
        print('test_3')
        assert multiply(1,2) == 2

    def test_multiply_4(self):
        print('test_4')
        assert multiply(6,7) == 42


if __name__ == '__main__':
    pytest.main()

运行结果如图所示:

五、优先级顺序总结
setup_module / teardown_module的优先级是最大的

类中:setup_class --》setup_method ---》 setup ---》用例--》teardown --》teardown_method --》teardown_class
ps:其中针对类方法而言,setup_method 和 setup的作用是一样的,一般二选一就可以了

类 和 普通函数混合:
setup_class/teardown_class 和 setup_function/teardown_function 的运行 是互不干涉的,看代码的先后顺序,谁在前先执行谁。

posted @ 2020-12-06 16:13  打不死的强强强强  阅读(60)  评论(0)    收藏  举报