Cobertura de código
Cobertura de código é uma métrica que define o quanto de seu código está sendo executado pelo seus testes. Quanto maior a cobertura, maior o número de arquivos estão sendo impactados pelos seus testes.
Temos um diretório atual com os seguintes arquivos:
.
├── __init__.py
└── soma.py
└── test_soma.py
1 directory, 3 files
No soma.py
temos o conteúdo:
# coding: utf-8
def soma(a, b):
if isinstance(a, basestring) or isinstance(b, basestring):
raise ValueError(u'Somente números são permitidos')
return a + b
E no test_soma.py
:
# coding: utf-8
import pytest
from soma import soma
class TestSoma(object):
def test_soma_numeros_positivos(self):
assert soma(1, 1) == 2
def test_soma_com_letras(self):
with pytest.raises(ValueError) as error:
soma('a', 'b')
assert error.msg == u'Somente números são permitidos'
`
Mudamos os testes para usar o formato do py.test
, vamos instalar o pytest-coverage
para analisar a cobertura que tem o nosso código.
>> pip install pytest-coverage
Agora vamos medir qual a porcentagem de cobertura tem o nosso arquivo soma.py
baseado nos testes que estão no test_soma.py
:
>> py.test --cov soma.py test_soma.py
platform darwin -- Python 2.7.11, pytest-2.9.2, py-1.4.31, pluggy-0.3.1
rootdir: /Users/lucasmagnum/labschool/testes-iniciantes, inifile:
plugins: cov-2.3.0
collected 2 items
test_soma.py ..
---------- coverage: platform darwin, python 2.7.11-final-0 ----------
Name Stmts Miss Cover
-----------------------------
soma.py 4 0 100%
================================================================= 2 passed in 0.07 seconds =================================================================
Como nosso arquivo só contém uma função e escrevemos testes que passam por toda a função, temos 100% de cobertura =)