Índice de contenidos
1. Introducción
Cuando desarrollamos nuestro api rest o tu aplicación necesita integrarse con otro de terceros, muchas veces nos preguntamos, ¿qué devuelve esto realmente? ¿Estoy haciendo las llamadas correctas? ¿Quién no ha hecho un curl o ha utilizado otras herramientas fuera de tu IDE? En este tutorial vamos a conocer cómo realizar estos tests con Intellij.
2. Entorno
El tutorial está escrito usando el siguiente entorno:
- Intellij Idea Ultimate 2019.3
3. El primer test
En nuestro proyecto, en cualquier directorio, creamos un fichero con extensión .http ,
Y el contenido, por ejemplo:
GET https://adictosaltrabajo.com Accept: */* Cache-Control: no-cache
Para ejecutar, sólo tendremos que darle al play como cualquier test en Intellij
Y mostrará la respuesta en la consola:
4. Entornos
Vale, está claro que sólo es un test de ejemplo. Pero cuando estamos desarrollando, a veces queremos probar en diferentes entornos. Por ejemplo en tu local y en el servidor de integración. Para ello, podemos crear un fichero definiendo los entornos y las variables:
Debe tener el nombre rest-client.env.json para que detecte los entornos.
{ "local": { "host": "localhost:8080" }, "pro": { "host": "adictosaltrabajo.com" } }
Y se referencia la variable en el test:
GET https://{{host}} Accept: */* Cache-Control: no-cache ###
Al ejecutar, nos permitirá elegir el entorno.
Eligiendo pro, muestra en la consola la llamada con el valor de pro.
5. Almacenar datos entre tests
En muchas ocasiones, para consultar nuestro api necesitamos un token válido que adjuntar o cualquier otro dato que enviar a otras llamadas.
En el fichero de entorno, incluimos una variable, por ejemplo token.
{ "local": { "host": "localhost:8080", "token": "" }, "pro": { "host": "adictosaltrabajo.com", "token": "" } }
Y se puede crear otro fichero http-client.private.env.json que almacene los datos sensibles, como por ejemplo el password del login. Este fichero se añadiría al .ignore del proyecto.
{ "local": { "password": "localPass" }, "pro": { "password": "proPass" } }
El body de la petición se incluye debajo de la llamada, y el siguiente bloque permite definir una función que en este caso recupera el token de la respuesta y lo asigna a la variable token.
POST http://{{host}}/api/auth/login Accept: */* Cache-Control: no-cache Content-Type: Application/Json {"username": "stoledano@adictosaltrabajo.com", "password": {{passwrod}} } > {% client.global.set("token", response.body.token); %} ### GET http://{{host}}/v1/documents?page=30 Accept: */* Cache-Control: no-cache Content-Type: Application/Json Authorization: Bearer {{token}} > {% client.test("Request executed successfully", function() { client.assert(response.status === 200, "Response status is not 200"); }); %}
De tal manera que si ejecutamos el segundo test «v1/documents» la variable token tiene el valor recuperado en la anterior petición. Al incluir la función de comprobación status se ve que no recibimos un 401 y que el token se está incluyendo correctamente.
Se puede reutilizar en otros test de este mismo fichero o en otros, pues lo almacena de manera global. Cuando el token caduque, basta con realizar sólo la llamada del token.
6. Conclusiones
Creo que la puesta en marcha de estos test es muy rápida y permite centralizar nuestro desarrollo en una sola herramienta e incluso la facilidad de almacenarlo con el proyecto, con las ventajas que ello supone.
7. Referencias
https://www.jetbrains.com/help/idea/http-client-in-product-code-editor.html