PTENES
Saltar al contenido
MÓDULO 5.4

🧪 Testing automatizado

pytest, fixtures, mocks, coverage y TDD con Claude Code. Las pruebas son la red de seguridad que permite iterar rápido sin miedo a romper algo.

6
Temas
~45
Minutos
5.3
Requisito previo
Práctico
Tipo
Progreso:0%0 de 6
1

✅ Conceptos básicos de pytest

pytest es el framework de pruebas estándar del ecosistema Python. Un archivo test_*.py, funciones que comienzan con test_, e assert para verificar. Así de simple. Pídele a Claude Code: "escreve testes pytest para este modulo" y genera pruebas para cada función.

test_calculator.py
from calculator import add, divide

def test_add():
    assert add(2, 3) == 5
    assert add(-1, 1) == 0

def test_divide():
    assert divide(10, 2) == 5.0

def test_divide_by_zero():
    import pytest
    with pytest.raises(ZeroDivisionError):
        divide(1, 0)

# Rodar: pytest -v

En 1 frase: pytest -v = comentarios instantáneos sobre lo que funciona y lo que se rompió.

2

🔩 Fixtures y conftest

Fixtures preparan el estado que necesitan tus pruebas: una base de datos temporal, un cliente HTTP, datos de ejemplo. El archivo conftest.py comparte fixtures entre todos los archivos de prueba del directorio. Usa @pytest.fixture es el parámetro scope para controlar el ciclo de vida.

conftest.py
import pytest
from fastapi.testclient import TestClient
from main import app

@pytest.fixture
def client():
    return TestClient(app)

@pytest.fixture
def sample_item():
    return {"name": "Widget", "price": 9.99, "tags": ["new"]}

En 1 frase: fixtures = configuración reutilizable; conftest.py = fixtures compartidas.

3

🎭 Mocks y parches

Los mocks simulan dependencias externas. Si tu función llama a una API, la prueba no debe depender de que esa API esté disponible. Usa unittest.mock.patch para sustituir la llamada real por una respuesta controlada. Claude Code genera mocks precisos cuando indicas qué quieres aislar.

En 1 frase: mock.patch = probar tu código sin depender del mundo externo.

4

📊 Informe de cobertura

La cobertura mide qué líneas de tu código ejecutan las pruebas. Con pytest-cov, ejecuta pytest --cov=src --cov-report=html y mira exactamente qué rutas no están cubiertas. No busques el 100 %; busca cubrir las rutas críticas.

terminal
# Instalar
pip install pytest-cov

# Rodar com coverage
pytest --cov=src --cov-report=term-missing

# Gerar relatorio HTML
pytest --cov=src --cov-report=html
# Abrir htmlcov/index.html no browser

En 1 frase: coverage muestra lo que NO probaste; enfócate en las rutas críticas.

5

🔴 TDD con Claude

TDD con IA es un superpoder: tú escribes la prueba (el «qué»), Claude Code genera la implementación (el «cómo»). Ciclo: Rojo (la prueba falla) -> Verde (Claude implementa hasta que pase) -> Refactorización (Claude limpia el código). Tú controlas la especificación; la IA hace el trabajo pesado.

Flujo de trabajo TDD + Claude Code

1. Escribe la prueba para el comportamiento deseado

2. Ejecuta pytest (rojo: la prueba falla)

3. Pídele a Claude: "implementa para que pase esta prueba"

4. Ejecuta pytest (en verde: la prueba pasa)

5. Pídele a Claude: "refactoriza manteniendo las pruebas en verde"

En 1 frase: TDD + IA = tú defines QUÉ, Claude hace CÓMO.

6

🔗 Integración de CI

Las pruebas locales son buenas; las pruebas en CI son obligatorias. GitHub Actions ejecuta pytest en cada push/PR automáticamente. Si alguna prueba falla, se bloquea el merge. Claude Code genera el workflow YAML completo: "cria um GitHub Actions que roda pytest com coverage".

.github/workflows/test.yml
name: Tests
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-python@v5
        with:
          python-version: "3.12"
      - run: pip install -r requirements.txt
      - run: pytest --cov=src -v

En 1 frase: CI = las pruebas se ejecutan automáticamente en cada push; nadie rompe lo que funciona.

🧾 Resumen del módulo

✓
pytest es el estándar para las pruebas de Python.
✓
Fixtures preparan el estado; conftest comparte.
✓
Mocks aíslan las dependencias externas.
✓
Cobertura muestra lo que no está probado.
✓
TDD + Claude = tú defines, la IA implementa.
✓
CI ejecuta pruebas automáticamente en cada push.

Siguiente módulo:

5.5 — Deploy e infraestructura: Docker, cloud y monitoring.