Parametrização e cobertura de testes
Execute testes com várias entradas usando @pytest.mark.parametrize.
Parametrização e cobertura de testes é uma aula grátis de Python Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Python Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Python Academy inclui 4 aulas no total.
@pytest.mark.parametrize
Execute o mesmo teste com várias entradas usando @pytest.mark.parametrize. Cada tupla é um caso de teste separado.
import pytest
@pytest.mark.parametrize("a,b,expected", [
(1, 2, 3),
(0, 0, 0),
(-1, 1, 0),
(10, -5, 5),
])
def test_add(a, b, expected):
assert a + b == expectedParâmetro único
Para um único argumento, passe diretamente uma lista de valores.
import pytest
@pytest.mark.parametrize("n", [1, 2, 3, 4, 5])
def test_positive(n):
assert n > 0IDs de teste nomeados
Forneça uma lista ids para rotular cada conjunto de parâmetros e tornar a saída mais clara.
import pytest
@pytest.mark.parametrize("value,result", [
(2, True),
(3, False),
], ids=["even", "odd"])
def test_is_even(value, result):
assert (value % 2 == 0) == resultEmpilhamento de decoradores parametrize
Empilhe dois decoradores parametrize para obter o produto cartesiano das entradas.
import pytest
@pytest.mark.parametrize("x", [1, 2])
@pytest.mark.parametrize("y", [10, 20])
def test_product(x, y):
assert x * y > 0 # 4 test cases: (1,10),(1,20),(2,10),(2,20)pytest-cov: instalação
Instale pytest-cov para medir quais linhas do seu código são exercitadas pelos testes.
# pip install pytest-cov
# Basic usage:
# pytest --cov=mypackage
# HTML report:
# pytest --cov=mypackage --cov-report=htmlLeitura da saída de cobertura
A cobertura mostra quais linhas, ramificações ou instruções não foram alcançadas durante os testes.
# Name Stmts Miss Cover
# ------- ----- ---- -----
# mypackage/utils.py 20 3 85%
#
# Missing: lines 45, 67, 88Cobertura de ramificações
Use --cov-branch para verificar se os dois ramos das estruturas condicionais são testados.
# pytest --cov=mypackage --cov-branch
def is_positive(n):
if n > 0: # branch 1: True
return True
return False # branch 2: FalseFalha com baixa cobertura
Use --cov-fail-under=N para fazer a compilação falhar se a cobertura ficar abaixo de N por cento.
# pytest --cov=mypackage --cov-fail-under=80
# FAIL Required test coverage of 80% not reached. Total: 72%Configuração do .coveragerc
Configure as exclusões de cobertura em .coveragerc para ignorar código repetitivo.
# .coveragerc
[run]
omit =
*/migrations/*
*/tests/*
setup.py
[report]
exclude_lines =
pragma: no cover
if TYPE_CHECKING:O que significa uma boa cobertura
Uma cobertura alta não garante testes corretos. Busque asserções significativas, não apenas a execução de linhas. De 80 a 90% é uma meta prática para a maioria dos projetos.
# A covered but useless test:
def test_nothing():
is_positive(5) # no assert — 100% coverage, zero confidence
# A meaningful test:
def test_positive():
assert is_positive(5) is True
assert is_positive(-1) is FalseCombinando parametrize e cobertura
Os testes parametrizados melhoram a cobertura naturalmente ao exercitar vários caminhos do código com uma única definição de teste.
import pytest
@pytest.mark.parametrize("n,expected", [
(5, True), (-1, False), (0, False)
])
def test_is_positive(n, expected):
assert is_positive(n) == expectedVerificação rápida
O que --cov-fail-under=90 faz durante uma execução do pytest?
Recapitulação
Use @pytest.mark.parametrize para testar várias entradas de forma organizada. Meça a cobertura do código com pytest-cov, acompanhe as ramificações com --cov-branch e imponha valores mínimos com --cov-fail-under.
Perguntas Frequentes
A aula “Parametrização e cobertura de testes” é grátis?
Sim — o texto completo de “Parametrização e cobertura de testes” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Python Academy, atualize para CoddyKit PRO. O curso de Python Academy inclui 4 aulas no total.
O que vou aprender em “Parametrização e cobertura de testes”?
Execute testes com várias entradas usando @pytest.mark.parametrize. Você pratica Python Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Python Academy?
Nenhuma experiência prévia é necessária. Python Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Parametrização e cobertura de testes”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Python Academy?
Sim. Cada aula de Python Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Escrevendo seus primeiros testes com pytest
- Fixtures e configuração/desmontagem
- Parametrização e cobertura de testes
- Simulação com unittest.mock