使用@pytest.fixture() 装饰器,实现pytest框架下测试用例的环境初始化与清除操作
(1)fixture默认是函数级别,可用级别:function,class,module,session
(2)可以写多个初始化与清除函数,测试函数需要使用只需要传入对应函数名即可
import pytest
# 默认函数级别
@pytest.fixture()
def start_func1(request):
# 初始化代码
print("------------初始化操作--------------")
def fin():
# 清除代码
print("--------------环境清除操作------------")
request.addfinalizer(fin)
1.函数级别:
(1)初始化与清除操作,只要传入测试函数,就会被执行
(2)初始化操作在测试用例执行之前执行,清除操作在用例执行之后执行
import pytest
@pytest.fixture()
def start_func1(request):
# 初始化代码
print("------------初始化操作--------------")
def fin():
# 清除代码
print("--------------环境清除操作------------")
request.addfinalizer(fin)
def test_01():
print("-----test01-----")
def test_02(start_func1):
print("-----test02-----")
def test_03(start_func1):
print("-----test03-----")
if __name__ == '__main__':
pytest.main(["func-fixture.py", "-s"])
运行结果:
2.class级别:
(1)scope=”class”
(2)同一个测试类内:同一个初始化和清除函数只会执行一次,清除操作会在这个类内所有测试用例执行完之后才执行
import pytest
"""
@pytest.fixture(scope="class")
1.class级别
2.初始化方法是写在类外面的
3.可以作用于多个类,多个方法
4.一个方法可以传入多个初始化函数
5.跟函数级别的区别是:函数传入就会执行,类内只会执行一次
"""
@pytest.fixture(scope="class")
def start_func1(request):
print("----初始化操作1------")
def fin():
print("-----环境清除操作1------")
request.addfinalizer(fin)
@pytest.fixture(scope="class")
def start_func2(request):
print("----初始化操作2------")
def fin():
print("-----环境清除操作2------")
request.addfinalizer(fin)
class TestClass1:
def test_01(self, start_func1):
print("-----test01----")
def test_02(self):
print("-----test02-----")
class TestClass2:
def test_03(self, start_func1, start_func2):
print("-----test03----")
def test_04(self, start_func1):
print("-----test04-----")
if __name__ == '__main__':
pytest.main(["class-fixture.py", "-s"])
运行结果:
3.module级别:
(1)score=”module”
(2)如果一个模块内部同时有测试函数和测试类需要调用初始化函数,装饰器级别需要调整为module
(3)初始化操作只会在第一次传参的时候执行一次,清除操作会在所有测试用例执行完之后,执行一次
import pytest
"""
@pytest.fixture(scope="module")
1.module级别
2.初始化方法是写在类外面的
3.初始化方法可作用在测试函数和测试类上
4.只会执行一次
"""
@pytest.fixture(scope="module")
def start_func1(request):
print("----初始化操作1----")
def fin():
print("------环境清除操作-------")
request.addfinalizer(fin)
class TestClass1:
def test_01(self):
print("-----test01----")
def test_02(self, start_func1):
print("-----test02-----")
def test_func(start_func1):
print("----我是一个函数--------")
if __name__ == '__main__':
pytest.main(["module-fixture.py", "-s"])
运行结果:
4.session级别(package级别):
(1)需要创建package包
(2)package包下面创建一个文件:conftest(文件名称不可以改),里面写环境初始化与操作
import pytest
@pytest.fixture(scope="session", autouse=True)
def start_func1(request):
print("-----初始化操作------1")
def fin():
print("---------测试完成的环境清除操作--------------")
request.addfinalizer(fin)
(3)初始化操作会在package下面的测试模块执行之前执行,只执行一次
(4)清除操作会在package下面的测试模块执行完成后执行,只执行一次
(5)autouse=True,package下面的模块不需要再手动传参