Teste de automação de interface --- inicialização e limpeza do ambiente (fixação)

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

 

 

 

Acho que você gosta

Origin blog.csdn.net/qq_19982677/article/details/108524932
Recomendado
Clasificación