Guía Completa de Tests y Scripts Automatizados en Postman

1. ¿Qué son los Scripts de Postman?

Postman permite ejecutar código JavaScript antes de que una petición se envíe o después de recibir la respuesta. Esto abre un mundo de posibilidades para la automatización y la creación de flujos de trabajo dinámicos. Los scripts se dividen en dos tipos:

  • Pre-request Scripts: Se ejecutan antes de enviar la petición. Son útiles para preparar datos, como generar un timestamp, crear una firma de seguridad, o establecer variables dinámicas que se usarán en la petición.
  • Tests Scripts: Se ejecutan después de recibir la respuesta. Su propósito principal es validar que la API se comporta como se espera (testing), pero también se usan para extraer datos de la respuesta y encadenar peticiones.

Ambos tipos de scripts utilizan el objeto global pm, que proporciona acceso a la información de la petición/respuesta y a las variables.

2. Escribir tu Primer Test: Validar el Código de Estado

El test más fundamental es comprobar que la petición fue exitosa. Un código de estado 200 OK es el indicador más común.

  1. Crea una petición GET a https://jsonplaceholder.typicode.com/posts/1.
  2. Ve a la pestaña Scripts.
  3. Pestaña de Scripts en Postman
  4. A la derecha, verás un panel de Snippets (fragmentos de código). Haz clic en "Status code: Code is 200". Postman insertará el código por ti.
  5. Usar snippets para generar tests en Postman
  6. El código insertado será:
pm.test("Status code is 200", function () {
    pm.response.to.have.status(200);
});
  1. Envía la petición. Después de recibir la respuesta, ve a la pestaña Test Results en la sección de respuesta. Verás que tu test ha pasado (PASS).
  2. Resultados de los tests en Postman

3. Validar el Cuerpo de la Respuesta (JSON)

Además del código de estado, es crucial verificar que el cuerpo de la respuesta contenga los datos correctos y con la estructura adecuada.

  1. Usa la misma petición anterior. En la pestaña Scripts, añade un nuevo test para verificar el userId.
  2. Primero, necesitas convertir el cuerpo de la respuesta (que es texto) a un objeto JSON.
  3. Luego, puedes usar la API de pm.expect para realizar aserciones sobre el contenido.
pm.test("El userId debe ser 1", function () {
    // 1. Parsear el cuerpo de la respuesta a JSON
    const responseData = pm.response.json();

    // 2. Realizar la aserción
    pm.expect(responseData.userId).to.eql(1);
});

pm.test("El título no debe estar vacío y debe ser un string", function () {
    const responseData = pm.response.json();
    pm.expect(responseData.title).to.be.a('string').and.to.not.be.empty;
});

La sintaxis pm.expect(valor).to.be.a('string') es parte de la librería de aserciones Chai.js, que hace que los tests sean muy legibles.

4. Encadenar Peticiones: El Poder de las Variables

Una de las funcionalidades más potentes es la capacidad de tomar un dato de una respuesta y usarlo en la siguiente petición. Crearemos un flujo para obtener un post y luego leer sus comentarios.

  1. Petición 1: Obtener un post aleatorio.
    • Crea una petición GET a https://jsonplaceholder.typicode.com/posts/10.
    • En la pestaña Scripts de esta petición, extrae el id del post y guárdalo en una variable de colección.
// Script en la Petición 1 (Scripts)
pm.test("Guardar el ID del post", function () {
    const responseData = pm.response.json();
    pm.expect(responseData.id).to.exist; // Asegurarse de que el id existe
    
    // Guardar el id en una variable de colección
    pm.collectionVariables.set("postId", responseData.id);
    console.log("ID del post guardado:", responseData.id);
});
  1. Petición 2: Obtener los comentarios de ese post.
    • Crea una segunda petición GET.
    • En la URL, usa la variable que guardaste en el paso anterior: https://jsonplaceholder.typicode.com/posts/{{postId}}/comments.
    • Usar una variable de colección para encadenar peticiones
    • Al ejecutar esta segunda petición, Postman reemplazará {{postId}} con el valor guardado (en este caso, 10), y obtendrás los comentarios específicos de ese post.

Este patrón es fundamental para probar flujos completos, como crear un recurso, luego actualizarlo y finalmente eliminarlo, usando siempre el ID devuelto por la primera petición.

5. Scripts de Pre-request: Peticiones Dinámicas

Los scripts de pre-request te permiten modificar la petición justo antes de que se envíe.

Ejemplo: Añadir un timestamp a la URL para evitar el caché del navegador o del servidor.

  1. Crea una petición GET a https://api.example.com/data?cache_buster={{timestamp}}.
  2. Ve a la pestaña Pre-request Script.
  3. Añade el siguiente código para generar un timestamp y guardarlo en una variable local.
// Script en la pestaña Pre-request Script
const now = new Date();
pm.variables.set("timestamp", now.getTime());

Cada vez que envíes la petición, el script se ejecutará, generando un nuevo timestamp y asegurando que la URL sea única.

6. Buenas Prácticas para Escribir Scripts Sostenibles

  1. Nombres de Test Descriptivos: El nombre del test (el primer argumento de pm.test()) debe explicar claramente qué se está validando. "El email del usuario debe ser un formato válido" es mejor que "Test 1".
  2. Un Test, Una Responsabilidad: Intenta que cada bloque pm.test() valide una única cosa. Es más fácil depurar 5 tests pequeños que fallan que un test grande con 5 aserciones.
  3. Usa la Consola: La console.log() es tu mejor amiga para depurar. Úsala para imprimir el contenido de las variables o el cuerpo de la respuesta y entender qué está pasando en tus scripts.
  4. Organiza con Carpetas: Si tienes un flujo de peticiones encadenadas, agrúpalas en una carpeta dentro de tu colección. Puedes definir scripts a nivel de carpeta que se ejecutarán para cada petición dentro de ella.