Introdução

Concluído

O Pytest pode fazer mais do que descobrir testes e relatar resultados de declaração. À medida que um conjunto de testes Python aumenta, a lógica de teste repetida e o código de instalação compartilhado tornam os testes mais difíceis de ler, depurar e estender. Neste módulo, você aprenderá três recursos do pytest que ajudam a manter os testes em Python legíveis e sustentáveis: parametrização, fixtures e a fixture interna monkeypatch.

Este módulo pressupõe que você possa escrever scripts Python, executar comandos em um terminal e executar testes simples com pytest em um ambiente virtual com Python 3.10 ou posterior. Se precisar de ajuda para configurar seu ambiente de desenvolvimento Python no Windows, consulte Configurar seu ambiente de desenvolvimento Python no Windows. Para obter detalhes do ambiente virtual, consulte venv documentação do Python.

A parametrização com @pytest.mark.parametrize executa a mesma função de teste com vários conjuntos de argumentos, e cada invocação gerada é coletada pelo pytest como seu próprio item de teste. Recursos são funções registradas no pytest, geralmente com @pytest.fixture, que realizam testes ou fornecem outros recursos solicitados por nome. Elas podem retornar valores reutilizáveis e, quando necessário, executar uma limpeza após o término do escopo do teste ou do recurso. O recurso monkeypatch altera temporariamente atributos, itens do dicionário, variáveis de ambiente, sys.path, ou o diretório de trabalho atual e, em seguida, desfaz automaticamente essas alterações após a conclusão do teste ou do recurso solicitante.

Os exemplos neste módulo são testes de estilo de unidade, mas os mesmos recursos pytest se aplicam a pacotes de teste funcionais ou de integração maior. Os exemplos usam a instrução assert do Python; o pytest fornece introspecção de declaração para que os relatórios de falha incluam valores úteis da expressão.

Quando usar esses recursos

  • Utilize a parametrização quando precisar iterar sobre entradas em um teste ou copiar funções de teste quase idênticas para entradas ligeiramente diferentes. A parametrização expande uma definição de teste em muitos itens de teste, de modo que cada entrada obtém seu próprio relatório de aprovação/falha.
  • Use acessórios quando vários testes precisarem da mesma configuração (como dados de teste, um arquivo temporário ou uma conexão de banco de dados) ou precisarem de limpeza previsível após a execução.
  • Use monkeypatch quando um teste precisar isolar o código do estado externo, por exemplo, variáveis de ambiente, o diretório de trabalho atual ou uma função que chama um serviço remoto sem alterar permanentemente esse estado.

Você começará substituindo loops e testes quase duplicados por parametrização. Em seguida, você usará recursos para compartilhar a configuração e a limpeza, analisará recursos integrados, como tmp_path e monkeypatch, e praticará a refatoração de métodos de configuração e limpeza no estilo xUnit em um recurso.

Ao final deste módulo, você estará pronto para aplicar esses recursos pytest para reduzir a repetição, expandir a cobertura e melhorar o diagnóstico de falha em seus conjuntos de testes Python.

Para obter mais informações, consulte a documentação pytest para assertivas, parametrização de testes, fixtures e monkeypatch.