Use o decorador @ pytest.fixture () para implementar as operações de inicialização e limpeza do ambiente de casos de teste sob a estrutura pytest
(1) Os padrões do aparelho são o nível de função, níveis disponíveis: função, classe, módulo, sessão
(2) Você pode escrever várias funções de inicialização e limpeza, a função de teste precisa ser usada, apenas o nome da função correspondente precisa ser passado
import pytest
# 默认函数级别
@pytest.fixture()
def start_func1(request):
# 初始化代码
print("------------初始化操作--------------")
def fin():
# 清除代码
print("--------------环境清除操作------------")
request.addfinalizer(fin)
1. Nível de função:
(1) Operações de inicialização e limpeza, desde que a função de teste seja passada, ela será executada
(2) A operação de inicialização é executada antes da execução do caso de teste, e a operação de limpeza é executada após a execução do caso de teste
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"])
resultado da operação:
2. Nível de classe:
(1) escopo = "classe"
(2) Na mesma classe de teste: A mesma inicialização e função de limpeza serão executadas apenas uma vez, e a operação de limpeza será executada depois que todos os casos de teste nesta classe forem executados.
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"])
resultado da operação:
3. Nível do módulo:
(1) pontuação = "módulo"
(2) Se houver funções de teste e classes de teste dentro de um módulo que precisam chamar a função de inicialização, o nível do decorador precisa ser ajustado para o módulo
(3) A operação de inicialização só será executada uma vez quando os parâmetros forem passados pela primeira vez, e a operação de limpeza será executada uma vez depois que todos os casos de teste forem executados.
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"])
resultado da operação:
4. Nível da sessão (nível do pacote):
(1) Necessidade de criar um pacote de pacote
(2) Crie um arquivo no pacote de pacote: conftest (o nome do arquivo não pode ser alterado) e escreva a inicialização do ambiente e a operação nele
import pytest
@pytest.fixture(scope="session", autouse=True)
def start_func1(request):
print("-----初始化操作------1")
def fin():
print("---------测试完成的环境清除操作--------------")
request.addfinalizer(fin)
(3) A operação de inicialização será executada antes da execução do módulo de teste no pacote, apenas uma vez
(4) A operação de limpeza será executada após a execução do módulo de teste sob o pacote ser concluída, e só será executada uma vez
(5) autouse = True, os módulos sob o pacote não precisam passar parâmetros manualmente