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 的运行 是互不干涉的,看代码的先后顺序,谁在前先执行谁。
不要当自己回首过去,除了蹉跎岁月,一无所有。

浙公网安备 33010602011771号