Рубрики
Без рубрики

[PT-BR] Утилизандо приспособления PATEST PARA MELHORAR SEUS TESSES

QUANDO DESENVOVEMOS TESTES, É COMUM PRECISARMOS DE PREPERAR ALGUM CENARIO ANTES DE FAZERMOS O ASSERT … Помечено с Python, тестированием, кодовыми, бразильскимидавами.

QUANDO DESENVOLVEMOS TESTES, É COMUM PRECISARMOS DE PREPERAR ALGUM CENARIO ARTES DE FAZERMOS O утверждать . ISSO PORE SER FEITO DUVESTAS MANEIRAS, E AS Светильники сделать pteest SãO UMA DAS MELHORS SOLUçõES PARA ESCELA. PARA DESPIDAR COMO UTILIZAR E QUAIS Vantagens в качестве приспособлений NOS Proporcionam, é Geatee deforiar, как eTapas dum dest:

  • Подготовка ( Настройка ) : Nesta Etapa, Криамас Тодас как PRE Condições Para Executarmos Nosso Teste. Как приспособления делают Pteest Auxiliam Aqui. Nos Tradicionais Рамки de teste da mamília Ксунит (Включить Unittest ) Isso é geralmente feito no método Настройка () Отказ
  • ação ( act ) : Execução de Um Método Ou Função que queremos Testar.
  • Verificação ( Assert ) : Aqui é, de Fato, Onde O Teste Ocorre. VERICTAMOS SE O BUSTORDADO DA AHãAO É O QUE QUERIAMOS.
  • Финализамас ( очистка ou Обзор Несомненно : QUANDO PRECISAMOS CRAR ALGUM RECURSO PARA Execução de Teste (Criação de Uma Tabela de Banco de Dados, Por Exemplo), Também Precisamos Garantir Que que uso Seja desfeama Para que não Interfira nos próximos. Как приспособления Também Auxiliam Aqui. Нет Неизвестный Isso é feito no método Обзор () Отказ

Препарасс

PARA DESPIDAR O USO DAS Светильники, Vamos NoS APROFUNDAR EM UM EMSEPLO que Обучение Da Etapa de Proadação. Vamos Apecir Um Cenário Onde Temos UMA Função busca_pessoa que получают гм Номер E Busca UM Registro de Pessoa Em Banco de Dados. Um Vishível Teste Para Essa Função Ficaria Assim:

def test_busca_pessoa():
    # Para buscarmos uma pessoa, é necessário termos um
    # registro de pessoa no banco.
    # Essa é a etapa de preparação.

    # Primeiro, precisamos criar a tabela de pessoas.
    # Vamos assumir que temos uma função para isso.
    # O conteúdo dessa função não é importante para o nosso
    # teste.
    cria_tabela()

    # Também precisamos de uma session do banco.
    session = Session()

    # E criamos a pessoa, utilizando a session.
    pessoa = Pessoa(nome="Maria")
    session.add(pessoa)
    session.commit()

    # Finalizada a preparação, executamos nossa ação e
    # guardamos o resultado em uma variável.
    pessoa_db = busca_pessoa(nome="Maria")

    # E verificamos se o resultado é o esperado.
    assert pessoa_db, "Pessoa não encontrada"
    assert pessoa_db.nome == "Maria"

    # Por último, precisamos fechar a session e desfazer a
    # criação da tabela.
    session.close()

    # Assim como a função cria_tabela, o conteúdo da função
    # destroi_tabela não é relevante para o teste.
    destroi_tabela()

Esse Emt Teste Bem Smples SharpaDo AOS Testes Que Precisamos No Dia Dia, MAS, Repare Que As etapas de ação e Verifeação (AS MAIS GANYS), SãO APENAS TRêS LINHAS, Enquanto As Artras etapas ocupam ums Espaço Mais Continativo No Teste. NãO Queremos Ter que Repetir Toda A AROPEATACHãAO E FALLIZAçAO TODA VEZ Que Precisarmos Crar Um Teste Parecido. Подемос Simplififierar Tudo Isso Com.

import pytest

# Uma fixture é apenas uma função normal, marcada com o
# decorator @pytest.fixture.
@pytest.fixture
def session():
    # preparação
    cria_tabela()
    session = Session()

    return session

# Declaramos um parâmetro session, que receberá o retorno da
# fixture session.
def test_busca_pessoa(session):
    # preparação
    pessoa = Pessoa(nome="Maria")
    session.add(pessoa)
    session.commit()

    # ação
    pessoa_db = busca_pessoa(nome="Maria")

    # verificação
    assert pessoa_db, "Pessoa não encontrada"
    assert pessoa_db.nome == "Maria"

    # finalização
    session.close()
    destroi_tabela()

COM ISSO, Reduzimos o Trecho de Proadeação Doctro Do Nosso Teste E Podemos Reutilizar A сессия EM Outros Testes, Mas Ainda Estamos Fechando Session E Desfazendo A Tabela Destro Do Teste. Подемос Mover Esse Código Para Dentro Da Baskture, Utilizando A ключевое слово урожай :

@pytest.fixture
def session():
    # preparação
    cria_tabela()
    session = Session()

    # Agora trasformamos a fixture em um generator.
    # Com isso, o pytest passa o valor de session para o
    # nosso teste e continua para a etapa de finalização
    # após o teste ser concluído.
    yield session

    # finalização
    session.close()
    destroi_tabela()

def test_busca_pessoa(session):
    # preparação
    pessoa = Pessoa(nome="Maria")
    session.add(pessoa)
    session.commit()

    # ação
    pessoa_db = busca_pessoa(nome="Maria")

    # verificação
    assert pessoa_db, "Pessoa não encontrada"
    assert pessoa_db.nome == "Maria"

Утилизизçãо де Генераторы É. UMA Excelente Forma de Finalizar Recursos Criados Doctro Da Baskture. Porém, Ainda PodeMos Ter Flanceas Caso Средство крепежного ланса Ума Exceção E, EM Algumas Situações, É Assível Que Recursos Não Sejam Finalizados. Para Que Isso Não Ocorra, é Рекомендовать Limitar A kantidade de ações que podem lançar exceções centro de Uma. Na Função сессия , TemoS Duas Repainbabiladades: Кребер, как Tabelas E Instanciar Sessão. PodeMos Sealar Essas Duas RepainabiDades Da Seguinte Forma:

@pytest.fixture
def tabela():
    cria_tabela()

    # Como não produzimos nenhum valor aqui, a palavra yield
    # serve apenas para pausar a função e passar o controle
    # para a função session.
    yield

    destroi_tabela()

# Declaramos a dependência da fixture tabela.
@pytest.fixture
def session(tabela):
    session = Session()
    yield session
    session.close()

 def test_busca_pessoa(session):
    ...

Vimos Que UMA Приспособления Pove Depter de Outra. PodeMos Reduzir Ainda Mais ATAPA DE PORTYACHãO DENRO DO TESTE, КРИАНДО УММА TERCEIRA:

# Aqui, a fixture maria utiliza a fixture session.
@pytest.fixture
def maria(session):
    # preparação
    pessoa = Pessoa(nome="Maria")
    session.add(pessoa)
    session.commit()

    return pessoa

# Agora nosso teste só precisa utilizar a fixture maria.
# Note que, como não precisamos do retorno, a fixture é
# declarada mas o parâmetro maria não é utilizado.
def test_busca_pessoa(maria):
    # ação
    pessoa_db = busca_pessoa(nome="Maria")

    # verificação
    assert pessoa_db, "Pessoa não encontrada"
    assert pessoa_db.nome == "Maria"

NOSSO TEXE AGORA JAESTA BEM MENOR E PodeMOS REAGROVEITAR AS TESTURES EM OUTROS TESTES. UMA OUTRA MELHORIA Que Podemos Fazer Seria Transfericar Прибор Мария , Утилизандо О Падрао Фабрики COMO Светильники Отказ Dessa Forma, PodeMos ReavroveItar O Código Para Crar Novos Objetos Com Parâmetros Diferentes.

# ...

@pytest.fixture
def cria_pessoa(session):
    # Dentro da fixture, criamos uma função factory, que
    # recebe os parâmetros desejados e cria o objeto.
    def _cria_pessoa(nome):
        pessoa = Pessoa(nome=nome)
        session.add(pessoa)
        session.commit()

        return pessoa

    # A fixture retorna a função factory.
    return _cria_pessoa


def test_busca_pessoa(cria_pessoa):
    # preparação
    cria_pessoa("Maria")

    # ação
    pessoa_db = busca_pessoa(nome="Maria")

    # verificação
    assert pessoa_db, "Pessoa não encontrada"
    assert pessoa_db.nome == "Maria"

Agora Nosso Teste Ficou Muito Melhor! O Grande Trabalho de Proadeação Foi Abrabaído Para Assastures, Ficando Como Repainabilidade Do Teste Apenas Unitedar OS Parâmetros Para Criação Do Objeto Pessoa, Realizar UMA Ação E Veriveristar O Rutovalado.

COM ISSO, Sequência de Ededências DAS NOSSAS FICA DA SEGUINTE FORMA:

test_busca_pessoaa () -> cria_pessoa () -> сеанс () -> tabela ()

COM CRIAçãO DEFERENETESS Светильники, CADA UMA COM SUA REASSALIDADE, FICA FACICHER REAPOREITATITA-LAS EM OUTROS TESTES:

def test_busca_todas_as_pessoas(cria_pessoa):
    # preparação
    cria_pessoa("Maria")
    cria_pessoa("Gabriel")

    # ação
    pessoas = busca_pessoas()

    # verificação
    assert len(pessoas) == 2

Вывод

NãO E Segredo Para Ningum Que Testes São Uma Excelente Ferramenta Para Garantir A Calidade Do Nosso Código. Para Isso, é Essencial que, NãO Apenas Eles Esceuctam E Estejam Funcionando, Mas Também Que Eles Sejam Legíveis e Que Seja Fácil Crar Novos Testes. Afinal de Contas, OS Testes Também Fazem Parte Da Base de Código De Em Projeeto E Merecem Total Atenção. Как приветители делают Pteest São Uma ótima Maneira de Simplifififiather As Etapas de Prepapeação e Finalização Dos Testes E, следствие, в качестве CoDigo.

Essa é Apenas UMA Parte Do Que É Assível Fazer Utilizando. O Pteest oferece UMA Série de Formitures POR Padrão, Que Podem Ser Muito úteis Para diversass Situações. PARA SABER MAIS, RECOMENDO UMA BOA LEITURA DA Documentação do Pteest Отказ

Оригинал: “https://dev.to/mvtenorio/pt-br-utilizando-fixtures-do-pytest-para-melhorar-seus-testes-4fp”