pytest / Habilidade de Teste
Geração de testes e melhoria de cobertura - uma Habilidade de Agente para Python 3.14 e pytest.
O Que Esta Habilidade Faz
Audita um módulo e adiciona testes: layout tests/, fixtures conftest.py, casos de borda parametrizados, integração/lentos pytest.mark, httpx.MockTransport ou pytest-httpx para HTTP, rollbacks de transação de banco de dados e pytest --cov de CI com threshold sensato.
Quando Invocar
- Novo serviço sem testes antes do primeiro deploy
- PR adicionando lógica de branch complexa sem cobertura
- Limpeza de testes instáveis após ruído de CI
- Convertendo suite unittest para os idiomas do pytest
Entradas
| Entrada | Por quê |
|---|---|
| Pacote alvo | Quais módulos cobrir primeiro |
| Deps externas | DB, Redis, HTTP para simular vs testcontainers |
| Meta de cobertura | Linha vs branch; percentual mínimo |
| Marcadores | slow, integration, no_ci |
| Código assíncrono | Modo pytest-asyncio automático |
Saídas
tests/conftest.pycom fixtures compartilhadas- Testes parametrizados para casos de borda da documentação Gotchas
pyproject.toml[tool.pytest.ini_options]- Padrões de omissão de
coverageparaif TYPE_CHECKING - Snippet de CI correspondendo ao comando local
uv run pytest
Barreiras de Proteção
- Teste o comportamento, não a implementação - afirme saídas e efeitos colaterais.
- Um conceito de asserção por teste - mensagens de falha claras.
- Congele o tempo com monkeypatch - não
sleepem testes. - Sem rede em testes unitários - mock ou cassetes VCR explícitos.
- Não persiga 100% de cobertura - foque em módulos com risco ponderado.
- Marque testes de integração - mantenha o
pytest -m "not integration"padrão rápido.
Receita
uv sync --extra dev
uv run pytest -q
uv run pytest --cov=app --cov-report=term-missing --cov-fail-under=80
uv run ruff check tests/Exemplo de Trabalho (parametrize)
import pytest
from app.pricing import discount
@pytest.mark.parametrize(
"amount,coupon,expected",
[
(100, "SAVE10", 90),
(100, "INVALID", 100),
(0, "SAVE10", 0),
],
)
def test_discount(amount, coupon, expected):
assert discount(amount, coupon) == expectedFAQs
pytest ou unittest?
pytest é o padrão para novo código - compatibilidade com unittest OK durante a migração.
Testcontainers para Postgres?
Use para testes com marcador de integração - testes unitários usam SQLite ou sessão mockada.
Relacionados
- Configuração do pytest - fundamentos
- Fixtures - padrões de fixtures
- Testando FastAPI - testes de API
- BDD & Gherkin - camada de aceitação
Versões de Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+, e uv 0.6+.