El testing de APIs REST es el proceso de verificar que los endpoints:
👉 Una API no probada puede parecer que funciona en casos simples, pero fallar en producción con datos reales.
Pruebas manuales
Usando herramientas como Postman o navegadores. Útiles en etapas iniciales, pero no escalables.
Pruebas automatizadas
Scripts que ejecutan peticiones y validan las respuestas automáticamente. Se integran en pipelines de CI/CD.
Pruebas unitarias
Verifican funciones pequeñas (ej. serialización de JSON).
Pruebas de integración
Verifican cómo interactúan varios módulos de la API.
Pruebas de contrato
Validan que la API cumpla con lo definido en la especificación (ej. OpenAPI).
Pruebas de carga
Simulan múltiples usuarios para ver si la API soporta tráfico intenso.
Postman es la herramienta más popular para probar APIs manualmente y también soporta tests automáticos.
Uso básico (manual)
Ejemplo de test automático en Postman (pestaña Tests, lenguaje JavaScript)
pm.test("El status debe ser 200", function () {
pm.response.to.have.status(200);
});
pm.test("La respuesta debe ser JSON", function () {
pm.response.to.have.header("Content-Type", "application/json; charset=utf-8");
});
pm.test("El campo 'nombre' debe existir", function () {
var jsonData = pm.response.json();
pm.expect(jsonData).to.have.property("nombre");
});
👉 Así, cada vez que se ejecute el request, Postman validará automáticamente las condiciones.
Para proyectos en Python, se suele usar pytest junto con requests o directamente con FastAPI TestClient.
Ejemplo usando requests + pytest
import requests
def test_obtener_usuario():
resp = requests.get("https://jsonplaceholder.typicode.com/users/1")
assert resp.status_code == 200
data = resp.json()
assert "name" in data
assert data["id"] == 1
👉 Este test verifica que:
/users/1
devuelve status 200.name
.Fuente de datos: JSONPlaceholder.
Ejemplo con FastAPI TestClient
from fastapi.testclient import TestClient
from main import app
client = TestClient(app)
def test_crear_producto():
resp = client.post("/productos", json={"nombre": "Tablet", "precio": 900})
assert resp.status_code == 201
data = resp.json()
assert data["nombre"] == "Tablet"
assert data["precio"] == 900
👉 Aquí no se necesita servidor externo, se prueba directamente la app en memoria.
Newman (CLI de Postman): permite ejecutar colecciones desde la terminal. Ideal para integrarlo en CI/CD (Jenkins, GitHub Actions).
newman run coleccion.json
Pytest + CI/CD: correr tests automáticamente en pipelines (por ejemplo, GitHub Actions ejecuta pytest en cada push).
Herramientas de carga (Load Testing): JMeter, k6, Locust simulan usuarios concurrentes para medir rendimiento.
Ejemplo con k6 (JavaScript)
import http from "k6/http";
import { check } from "k6";
export default function () {
let res = http.get("https://api.ejemplo.com/usuarios");
check(res, { "status 200": (r) => r.status === 200 });
}
/usuarios
devuelve lista (200, JSON válido); /usuarios/99
devuelve 404; /usuarios
con JSON mal formado devuelve 400.401
si no hay token.El testing de APIs REST asegura que los endpoints funcionen como se espera y se mantengan estables con el tiempo.
👉 En resumen: una API sin tests es una API insegura e incompleta.