DÍA 13Pruebas y contrato HTTP · Python Backend y APIs para Datos

Prueba recursos ausentes, parámetros no válidos y métodos que la API no ofrece.

Día 13 19 minIntermedio

Comprobar errores y límites de la API

Objetivos

Vas a comprobar lo que recibe el cliente cuando pide un registro ausente, manda parámetros inválidos o intenta usar un método no publicado.

Concepto

Los códigos de estado forman parte del contrato HTTP. 404 comunica que un cliente no existe; 422 indica que un valor no pasó validación; 405 Method Not Allowed señala que la ruta existe pero no acepta ese método. Probar solo la respuesta feliz deja sin revisar esas condiciones.

Las rutas de este curso son de lectura. No basta con que la interfaz no muestre botones para escribir: la API tampoco debe registrar rutas POST, PUT, PATCH o DELETE para las tablas Sakila canónicas. La cuenta MySQL separada agrega otra barrera con su permiso SELECT.

Ejemplo

Agrega pruebas con el cliente y el fixture SQLite de la lección anterior:

def test_customer_not_found(client):
    response = client.get("/customers/999999")
    assert response.status_code == 404
    assert response.json() == {"detail": "Cliente no encontrado"}
 
 
def test_invalid_limit_is_rejected(client):
    response = client.get("/customers?limit=0")
    assert response.status_code == 422
 
 
def test_customer_write_route_is_not_registered(client):
    response = client.post("/customers", json={"first_name": "Nadie"})
    assert response.status_code == 405

La prueba de método comprueba la superficie HTTP, no reemplaza el grant de MySQL. Ejecuta py -m pytest -q; el número de solicitudes exitosas no debe ocultar una ruta que acepta escrituras.

Práctica guiada

  1. Envía un identificador que el fixture no creó.
  2. Solicita limit=51 y registra el estado HTTP.
  3. Intenta enviar POST /customers y comprueba que no se aceptó.

Reto

Agrega una prueba que confirme que GET /payments?min_amount=1000 devuelve 422 antes de ejecutar una consulta.

Intenta el reto antes de consultar las pistas.

Quiz

1. ¿Qué significa 405 Method Not Allowed en POST /customers?
2. ¿Qué condición representa normalmente 422 en estas pruebas?
3. ¿Qué revisa la prueba POST /customers?

Comprobación

Las rutas felices y sus límites ya tienen pruebas. El módulo final integra estas piezas en un paquete reproducible con Sakila local.

TU PROGRESO

Cargando estado…