1
resposta

Pytest no Django com virtual env

Tenho um projeto Django que estou tentando realizar os testes utilizando pytest, eu criei o arquivo pytest.ini na raiz do projeto para realizar algumas configurações na hora de executar os testes e o arquivo está assim:

[pytest]
DJANGO_SETTINGS_MODULE = base.settings
python_files = tests.py test_*.py *_tests.py
testpaths =
    usuario
    atendimento
    financeiro
    animal
    servico
addopts = --cov --cov-fail-under=90

O problema é que quando eu executo o comando pytest no terminal (VsCode) o pytest também aplica os testes nas libs do ambiente virtual, e eu quero executar os testes apenas das apps do meu projeto.

1 resposta

Olá, tudo bem com você?

Peço desculpas pela demora no retorno.

Para que os testes executados pelo Pytest não realize o mapeamento da pasta venv será necessário criar um arquivo de nome .coveragerc na pasta principal do projeto para receber uma configuração personalizada de execução dos testes e usaremos a opção omit para informar que a pasta venv deve ser ignorada. Basta seguir os passos abaixo.

Crie o arquivo .coveragerc e adicione as seguintes linhas.

[run]
omit = 
    venv/*

Salve o arquivo e execute os testes. Executando o comando abaixo no terminal aberto na pasta do projeto Django.

pytest -v

Podemos também limitar a varredura dos testes feitos pelo Pytest definindo que o teste deve ser realizado em um caminho específico. Para isso será necessário adicionar as opções adicionais (addopts) do arquivo pytest.ini, a seguinte sintaxe.

addopts = --cov=<caminho_que_sera_verificado> <caminho_para_os_testes>

Considerando o seguinte exemplo, temos um app de nome animais e queremos verificar apenas a cobertura dos testes no arquivo models.py, usando o arquivo de testes presentes no app, a sintaxe a opção addopts será a seguinte.

addopts = --cov=animais.models animais/tests

Note que a definição do caminho para o arquivo que será testado foi utilizado o ponto (.) e não foi fornecido o formato do arquivo (.py), já no caminho para os testes, é utilizado uma barra (/). Caso não seja respeitado essa sintaxe, será elevado erro de geração de reporte, arquivo não encontrado.

Caso queira definir os testes para múltiplos arquivos, basta fornecer novamente a opção --cov para o addopts contendo o caminho para o arquivo e o caminho para os testes.

Após adicionar as configurações propostas acima, basta salvar os arquivos e executar os testes usando o comando abaixo.

pytest -v

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!