Postman nos permite enviar requests facilmente para probar APIs que estemos desarrollando, pero también nos da la posibilidad de testear sus respuestas. En este posteo vamos a ver como crear estos tests y además como automatizarlos usando Newman.

Creando un test

Los tests son escritos en JavaScript y se corren luego de completar la request, aunque de ser necesario correr algún código antes de enviarla se lo puede escribir en la pestaña pre-request scripts. Para poder acceder a los resultados del request o definir un test usamos el objeto pm.

 

Objeto pm

El objeto pm nos provee de una serie de funciones y variables que nos permiten comunicarnos con Postman en si, es el que usamos cuando definimos un test, queremos acceder a una request o response, o cuando queremos ver o modificar alguna variable de entorno o global

 

Función test

Con esta función definimos un test, como parámetro recibe el nombre de dicho test y la función que sera la que contenga toda la lógica que se ejecutara

pm.test("Nombre del test", function () {
    // Lógica del test
});

 

Función expect

Es el equivalente al assert de JUnit, esta función recibe un valor que se verifica usando funciones de la librería Chai. En este caso estamos verificando que el mensaje devuelto en el response sea el correcto.

pm.test('Nombre del test', function() {
    pm.expect(pm.response.json().userMessage).to.equal("Mensaje esperado");
});

 

Objetos globals y environment

Este es el objeto que contiene todas las variables globales que hayamos declarado, se obtienen mediante la función pm.globals.get("nombreVar") y se setean con pm.globals.set("nombreVar", valor).

pm.environment funciona de la misma forma pero nos da las variables de entorno en vez de las globales.

En este caso testeamos un endpoint que debe devolver un array de objetos 'caso', primero verificamos que el response contenga un array y luego lo recorremos validando cada objeto con el schema que tenemos almacenado en la variable global 'casoSchema'.

pm.test("Devuelve casos con el formato correcto", function(){
    var listaCasos = pm.response.json();
    pm.expect(listaCasos).to.be.an("array");
    listaCasos.forEach(c => {
        pm.expect(tv4.validate(c, pm.globals.get("casoSchema"))).to.be.true;
    });
});

Este tipo de variable también puede usarse de la siguiente forma

En este ejemplo estamos usando la variable de entorno 'url', en la cual tenemos almacenada la base de la url final, y la variable global 'idCaso' en la cual almacenamos el id del objeto que vamos a usar en nuestros tests.

 

Automatización

Postman también nos permite automatizar la ejecución de tests, de forma tal que no tengamos que tener el programa abierto para hacerlo. Estas son las dos formas en las que se puede lograr:

 

Monitores

Un monitor es un recurso que nos provee postman y nos permite correr una colección de tests automáticamente cada cierta cantidad de tiempo, para crearlo debemos hacer click derecho en la colección que queremos monitorear e ir a monitor collections, nos pedirá elegir una colección de variables de entorno (si las hubiese) y que tan seguido queremos que se ejecuten los tests.

Esta opción corre con la ventaja de que, en el caso de fallar uno de los tests, Postman nos notifica por mail automáticamente, sin embargo la versión gratuita tiene algunas restricciones: tenemos un límite de mil ejecuciones por mes, por lo que nos conviene configurarlo para que se ejecuten solo cada una hora, y también nos da lugar solo para 25 requests.

 

Newman

Newman es una herramienta que nos permite correr una colección de tests desde la línea de comandos, no es tan fácil de configurar como un monitor pero tampoco tiene sus limitaciones.

Para correrlo usamos el comando 'npm newman run' mas el path o url a la colección de tests.

npm newman run https://www.getpostman.com/collections/647b1a53e55859187ecb

En el caso de usar variables de entorno o globales debemos exportarlas en formato JSON desde Postman e importarlas agregando -e para el entorno, y --globals para las globales. En caso de que alguno de nuestros request envíe un archivo se debe agregar --working-dir, este path servirá como raíz para que Newman encuentre los archivos.

-e ./resources/variables/env_DESA.json  --working-dir ./resources/test-files --globals ./resources/variables/globales.json

Con Newman podemos usar reporters, una herramienta que crea un reporte HTML sobre los resultados de los tests ejecutados, para lograr esto debemos instalar un reporter, como por ejemplo htmlextra, y agregar al comando de ejecución de Newman la sentencia -r htmlextra --reporter-htmlextra-export "nombre del reporte.html".

-r htmlextra --reporter-htmlextra-export "Reporte.html" 

Usando todo esto nos quedará la siguiente sentencia: 

npm newman run https://www.getpostman.com/collections/647b1a53e55859187ecb -e ./resources/variables/env_DESA.json  --working-dir ./resources/test-files --globals ./resources/variables/globales.json -r htmlextra --reporter-htmlextra-export "Reporte.html" 

Al correr esto ejecutará nuestra collección de tests y creará un archivo HTML con un reporte de los resultados.

Con todo esto podremos asegurarnos que al avanzar con el desarrollo de nuestra API las respuestas de sus endpoints sigan siendo correctas y hasta automatizar la ejecución de los tests para que nos sea mas fácil enterarnos de un posible bug.

¡Hasta la próxima!

 

Mandanos tus sugerencias

Ayudanos con ideas para los artículos de este blog a contacto@somospnt.com

¡Seguínos en nuestras redes sociales para enterarte de los últimos posts!