No pytest, a gestão de configurações e lipmezas antes e depois dos testes é crucial, especialmente em cenários como automação web, onde é necessário inicializar recursos como navegadores. Este artigo explora métodos avançados para implementar essas operações.
Métodos de Configuração e Limpeza Padrão
O pytest suporta métodos como configurar_classe e limpar_classe, que executam uma vez por classse de teste, e configurar e limpar, que executam antes e depois de cada caso de teste.
class TesteAutomacaoWeb:
def configurar_classe(self):
print('Configuração única: criar objetos de log, conexão de banco de dados.')
def configurar(self):
print('\nConfiguração antes do teste: abrir navegador.')
def teste_01_acesso(self):
print('\nTeste de login.')
def teste_02_navegacao(self):
print('\nTeste de navegação.')
def limpar(self):
print('\nLimpeza após o teste: fechar navegador.')
def limpar_classe(self):
print('Limpeza única: destruir recursos da classe.')
Esses métodos são aplicados a todos os casos de teste ou classes, mas podem ser insuficientes quando apenas alguns testes precisam de configuração específica.
Uso do Decorador pytest.fixture para Configuração Seletiva
O decorador pytest.fixture permite definir fixtures com diferentes escopos, como function, class, module ou session. Parâmetros como params, autouse, ids e name oferecem flexibilidade adicional.
import pytest
@pytest.fixture(escopo='function', parametros=['usuario1', 'usuario2'])
def fixture_login(requisicao):
print('Configuração de login.')
yield requisicao.parametro
print('Limpeza de login.')
class TesteFuncional:
def teste_01_perfil(self, fixture_login):
print('\nTeste de perfil para:', fixture_login)
def teste_02_configuracoes(self):
print('\nTeste de configurações.')
Ao definir parametros como uma lista, o fixture é executado para cada valor, permitindo testes parametrizados. O parâmetro autouse=True aplica o fixture automaticamante a todos os testes no escopo definido.
Integração com conftest.py para Fixtures Globais
O arquivo conftest.py permite definir fixtures que podem ser compartilhadas entre múltiplos arquivos de teste, sem necessidade de importação explícita. Ele deve ser colocado no mesmo diretório dos testes ou em diretórios pai.
# conftest.py
import pytest
@pytest.fixture(escopo='session', auto_usar=True)
def fixture_sessao():
print('Configuração global da sessão.')
yield
print('Limpeza global da sessão.')
Fixtures com escopo session executam uma vez por sessão de teste, enquanto outras como module ou function têm execuções mais granulares.
Assertions em pytest
O pytest utiliza a instrução assert para validações, simplificando a verificação de condições nos testes.
Geração de Relatórios com Allure
Integrar o pytest com o allura-pytest permite gerar relatórios detalhados. Siga estas etapas para configuração:
- Baixe e extraia o Allure, adicionando o diretório bin ao PATH do sistema.
- Execute testes com o sinalizador --alluredir para criar relatórios temporários em formato JSON.
- Use o comando allura generate para produzir o relatório final.
import pytest
import os
if __name__ == '__main__':
pytest.main(['-vs', './casos_teste/teste_01.py'])
os.system('allura generate ./temporario -o ./relatorio --clean')
Este comando compila os dados JSON em um relatório HTML interativo, facilitando a análise dos resultados.