python3 -m venv venv
source venv/bin/activate
- Veja que não temos o
coverage.py
instalado ainda. Vamos instalá-lo
pip install coverage
pip list
coverage --version
- Nesse exemplo usaremos unittest como biblioteca de testes
coverage run -m unittest discover
-
Veja que isso executa os testes usando o unittest normalmente, mas gera um arquivo
.coverage
no diretório. -
Veja como o coverage.py se integra de forma simples e rápida com o framework de testes.
- Veja que temos um arquivo
.coveragerc
no diretório raiz do projeto. Esse arquivo serve como umconfig
para ocoverage.py
. Dentro dele temos o seguinte conteúdo:
[run]
omit =
test_*.py
-
Isso ignora todos os arquivos que contém o padrão
test_*.py
da nossa análise de cobertura. Ou seja, estamos desconsiderando todos os nossos arquivos de teste da nossa análise de cobertura. -
Além disso poderíamos adicionar várias configurações que omitiremos aqui por questões de tempo.
- Agora vamos gerar nosso primeiro relatório através do próprio terminal.
coverage report
- Agora vamos gerar um relatório mais detalhado em html.
coverage html
- Para analisarmos a cobertura de branches precisamos adicionar uma flag
--branch
na hora de executarmos os testes.
coverage run --branch -m unittest discover
- Isso adicionará a análise de cobertura de branches no nosso relatório em HTML.
coverage html
- Veja que podemos utilizar o
coverage.py
para garantir uma cobertura mínima do nosso código
coverage report --fail-under=90
- Se tivéssemos um pipline de CICD integrado com o projeto, subir esse código pra produção falharia por não atingir a cobertura mínima de testes de 90%.
- Para uma porção de código que não quisermos considerar na cobertura, podemos utilizar o comentário
# pragma: no cover
para desconsiderá-lo nas nossas análises de cobertura.
- Aqui vamos simplesmente regerar os relatório para podermos compará-los com os relatórios que fazem exclusão de código:
coverage run -m unittest discover
coverage report
coverage html
- Aqui vamos adicionar o
# pragma: no cover
à linhaa = -a
do métodoabs_add()
.
coverage run -m unittest discover
coverage report
coverage html
- Veja que tanto a porcentagem de cobertura mudou quanto o detalhamento de número de linhas excluídas no relatório em HTML.
- Aqui vamos adicionar o
# pragma: no cover
ao blocoif a < 0:
do métodoabs_add()
.
coverage run -m unittest discover
coverage report
coverage html
-
Veja que isso não só excluiu a linha
if a < 0:
da análise de cobertura como todo o código do bloco definido pelo if. -
Veja que a porcentagem de cobertura diminuiu em relação ao último exemplo pois eliminamos agora uma linha que já estava coberta.
- Aqui vamos adicionar o
# pragma: no cover
ao métodoabs_add()
inteiro.
coverage run -m unittest discover
coverage report
coverage html
- Veja que a porcentagem de cobertura diminuiu em relação ao último exemplo pois eliminamos mais linhas que estavam cobertas do que linhas não cobertas.
Veja que o coverage.py
é uma ferramenta rápida e fácil de se usar, mas ao mesmo tempo consegue gerar relatórios detalhados. Além disso possui diversas funcionalidades como integração fácil com bibliotecas de teste e permitem uma fácil integração com pipelines de CICD.