Testing de APIs REST (Postman, pytest, herramientas automatizadas)

1 Introducción

El testing de APIs REST es el proceso de verificar que los endpoints:

  • Devuelven las respuestas correctas.
  • Manejan errores de forma adecuada.
  • Respetan las reglas de negocio.
  • Se mantienen estables a medida que cambia el código.

👉 Una API no probada puede parecer que funciona en casos simples, pero fallar en producción con datos reales.

2 Tipos de pruebas en APIs REST

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.

3 Testing con Postman

Postman es la herramienta más popular para probar APIs manualmente y también soporta tests automáticos.

Uso básico (manual)

  • Crear una colección con los endpoints de la API.
  • Configurar el método (GET, POST, etc.), la URL, headers y body.
  • Ejecutar la petición y ver la respuesta.

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.

4 Testing con pytest (Python)

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:

  • El endpoint /users/1 devuelve status 200.
  • La respuesta incluye un campo name.
  • El id del usuario sea 1.

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.

5 Herramientas automatizadas adicionales

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 });
}

6 Ejemplo de flujo completo de testing

  1. Definir casos de prueba: /usuarios devuelve lista (200, JSON válido); /usuarios/99 devuelve 404; /usuarios con JSON mal formado devuelve 400.
  2. Probar manualmente en Postman para confirmar los endpoints.
  3. Automatizar con Postman + Newman para ejecutar las colecciones en cada build.
  4. Agregar pytest (o equivalente) para pruebas unitarias e integración.
  5. Ejecutar pruebas de carga para verificar que la API soporte la cantidad esperada de usuarios.

7 Buenas prácticas en testing de APIs REST

  • Probar tanto casos de éxito como de error (por ejemplo, crear un producto con precio negativo debe devolver 400).
  • Usar datos realistas en las pruebas; evitar ejemplos triviales.
  • Automatizar siempre que sea posible: los tests manuales ayudan al inicio, pero los automatizados garantizan estabilidad a largo plazo.
  • Incluir pruebas de seguridad: endpoints protegidos deben devolver 401 si no hay token.
  • Integrar tests en CI/CD para correrlos en cada despliegue.

8 Conclusión del capítulo

El testing de APIs REST asegura que los endpoints funcionen como se espera y se mantengan estables con el tiempo.

  • Herramientas como Postman sirven tanto para pruebas manuales como automatizadas.
  • pytest (Python) y librerías equivalentes en otros lenguajes permiten pruebas más integradas.
  • Newman, JMeter, k6 y Locust son útiles para pruebas automáticas y de rendimiento.

👉 En resumen: una API sin tests es una API insegura e incompleta.