0Pricing
Python Academy · Aula

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 == expected

Parâ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 > 0

IDs 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) == result

Empilhamento 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=html

Leitura 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, 88

Cobertura 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: False

Falha 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 False

Combinando 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) == expected

Verificaçã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

  1. Escrevendo seus primeiros testes com pytest
  2. Fixtures e configuração/desmontagem
  3. Parametrização e cobertura de testes
  4. Simulação com unittest.mock
← Voltar para Python Academy