Primeros pasos con el cartero

Entre muchas herramientas, Postman se destaca como una de las herramientas más amigables para principiantes. Hace que las pruebas automatizadas sean fáciles y rápidas para aquellos que recién comienzan y ofrece una experiencia sin problemas, lo que lo alienta a probar correctamente sus aplicaciones.

Introducción

Probar una aplicación significa más que simplemente hacer clic hasta que algo se rompa o probar diferentes entradas hasta que algo no funcione correctamente.

Si bien esta es una buena manera de encontrar cualquier cosa que pueda fallar en el lado de la aplicación que mira al usuario, debido a un mal uso, lo que se está descuidando es el hecho de que las API que procesan sus solicitudes no se prueban adecuadamente de esta manera.

¿Qué es una API?

En primer lugar, para saber cómo probar una API, debe saber qué es una API. En términos muy amplios, permite que dos piezas de software interactúen entre sí para acceder a los datos o a una parte de la funcionalidad de otros programas.

Te permite enviar una Solicitud HTTP para obtener una Respuesta HTTP, en términos más técnicos. Esta es prácticamente la columna vertebral de Internet y cómo interactuamos con las aplicaciones/cómo interactúan las aplicaciones entre sí.

Un ejemplo más específico sería: su aplicación tiene una GUI donde puede ingresar el título de una película y devuelve resultados (respuesta), según lo que escribió (solicitud). Puede elegir hacer esto usando una API, que simplemente 'obtiene' estos datos del servidor.

Otro ejemplo sería: desea realizar un pago a alguien (solicitud) y los datos de los receptores se envían al servidor en función de su entrada, nuevamente a través de una API. Esta vez, la respuesta sería que completó con éxito (o sin éxito) el pago.

¿Por qué usar el cartero? {#por qué usar cartero}

Si bien hay otras herramientas disponibles (SoapUI, Katalon, [Tricentis](https://www.tricentis .com/)), Cartero se destaca como una de las herramientas más amigables para principiantes que puede usar para comenzar a probar su API.

Uno de los motivos más importantes para esto es que no tiene que aprender un nuevo idioma y solo necesitará JavaScript, independientemente del idioma en el que esté escrita la API. Le permite enviar solicitudes muy rápidamente a la API que necesita. Estoy probando.

Algunas de las otras razones son:

  • Puede realizar recopilaciones de pruebas automatizadas con relativa facilidad y rapidez
  • También puedes hacer pruebas reutilizables sin necesidad de ejecutarlas automáticamente, o integrarlas con nada
  • Las colecciones de prueba se pueden exportar y ejecutar a través de la línea de comandos con su paquete Node.js, hombre nuevo, que a su vez se puede integrar con un sistema CI/CD
  • Se puede ejecutar en Mac, Windows, Chrome Apps y Linux
  • Muy fácil de compartir sus colecciones de prueba, incluso cuando están en progreso
  • La interfaz permite importar puntos finales desde archivos Pavonearse o RAML, como punto de partida para las pruebas, lo que reduce el tiempo necesario para hacer una solicitud
  • Los desarrolladores pueden usarlo como una forma rápida de probar el punto final mientras aún es un trabajo en progreso, especialmente en combinación con el punto anterior.
  • Permite almacenar variables de respuestas para uso futuro
  • Permite usar diferentes conjuntos de variables para probar diferentes configuraciones y respuestas dinámicas
  • Permite el uso de archivos para Pruebas basadas en datos
  • Tiene una consola que se basa en la que tiene Google Chrome, lo que le permite depurar fácilmente mientras implementa pruebas
  • Gratis (con características premium)
  • Guarda datos (a cuenta) en todos los dispositivos

Contras del cartero

Si bien puede usar archivos para pruebas basadas en datos, debe hacer un esfuerzo adicional para diseñar sus pruebas para que funcionen sin el uso de uno. Postman devolverá errores cuando no pueda leer un archivo, lo que no puede hacer cuando ejecuta manualmente una solicitud, que es principalmente lo que hará cuando implemente una prueba.

Además, si bien es un profesional que es gratis, sus características premium bloquean el monitoreo y las llamadas automáticas sin ningún programa externo detrás de una tarifa. Esto se puede contrarrestar con un sistema interno o canalización, como se mencionó con newman.

Uso del cartero {#uso del cartero}

Instalación de Postman {#instalación de Postman}

Instalar Postman es tan simple como ir a su sitio web, descargarlo y ejecutar el archivo .exe. Asegúrese de descargar la versión correcta, pero generalmente ya selecciona la que se basa en su sistema:

obtener cartero para windows

Cartero inicial {#cartero inicial}

Una vez que lo haya instalado, simplemente inicie Postman y se encontrará con la siguiente interfaz de usuario:

starting postman

Aquí, puede crear una cuenta. No es necesario, pero se recomienda crear una, ya que la cuenta le permite guardar sus datos en todos los dispositivos simplemente trabajando en la aplicación.

Si alguna vez crea una cuenta, es probable que elimine todo en lo que trabajó hasta ese momento. En caso de que solo quiera entrar en el meollo de la cuestión lo más rápido posible, haga clic en Omitir inicio de sesión y lléveme directamente a la aplicación.

Después de crear una cuenta (o no), será recibido con la página principal:

main postman page

Envío de solicitudes

Lo primero es lo primero, tienes que tomar una decisión crucial: ¿modo oscuro o modo claro? Prefiero el modo oscuro, que es lo que usaré durante el resto de este artículo:

creating a request

Una vez que haya decidido, al seleccionar a) o b) se creará una nueva pestaña:

request tab

Ahora, la forma en que interactúa con una API es llamando a su URL o, en otros términos, invocando el punto final. Esto significa que se pondrá en contacto con algo que está expuesto públicamente o algo que haya iniciado localmente.

Para mantenerlo simple, usaremos algo que esté disponible públicamente. Este sitio web te permite filtrar anime según tu término de búsqueda:

aggretsuko results

Lo hace invocando el punto final (enviando su solicitud) y devolviendo una página web con los resultados (mostrando la respuesta).

Nota: Según el algoritmo de búsqueda que utilicen los sitios web, es posible que devuelvan términos que coincidan vagamente con el término de búsqueda. Esto podría afectar sus resultados más adelante en el artículo.

Puede usar su propio término de búsqueda o simplemente copiar uno creado en la imagen de ejemplo: https://api.jikan.moe/v3/search/anime?q=aggretsuko&limit=16

Navegando de regreso a Postman, podemos ingresar la URL en el campo designado:

request field breakdown

La sección Params se completa automáticamente con los parámetros que se encuentran en la URL proporcionada. Esto significa que la URL está construida con dos valores que afectarán lo que obtienes como resultado de enviar esta solicitud.

Ahora, enviemos la solicitud:

request results

La respuesta está en el formato JSON, que es bastante estándar para la mayoría de las API hoy en día. Si mira hacia atrás en el sitio web, obtuvo una lista de elementos que coincidían con su término de búsqueda y, de hecho, esta es la misma lista, con los mismos elementos.

Puede ver que hay múltiples claves que tienen el mismo nombre, y cada clave tiene un valor, que es diferente (pero no tiene por qué serlo) que el elemento anterior.

Echemos un vistazo a esta parte del JSON:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
    "mal_id": 12391,
    "url": "https://myanimelist.net/anime/12391/Mouretsu_Atarou_1990",
    "image_url": "https://cdn.myanimelist.net/images/anime/12/34815.jpg?s=18636fcc6bfe9368cbd3e021d6aca915",
    "title": "Mouretsu Atarou (1990)",
    "airing": false,
    "synopsis": "Batsugoro was the owner of a grocery store, Yaobatsu. When he tried to take a balloon hanged caught on the branch for a little child, he fell on to the ground to die. His son, Ataro, succeeded to the...",
    "type": "TV",
    "episodes": 34,
    "score": 0,
    "start_date": "1990-04-21T00:00:00+00:00",
    "end_date": "1990-12-22T00:00:00+00:00",
    "members": 231,
    "rated": "G"
},
{
    "mal_id": 34016,
    "url": "https://myanimelist.net/anime/34016/Hatsukoi_Monster__Mou_Chotto_dake_Tsuzukunja",
    "image_url": "https://cdn.myanimelist.net/images/anime/2/81905.jpg?s=b2c7e247db555c7477f319ace2d927c8",
    "title": "Hatsukoi Monster: Mou Chotto dake Tsuzukunja",
    "airing": false,
    "synopsis": "Unaired episode bundled with the eight manga volume.",
    "type": "OVA",
    "episodes": 1,
    "score": 6.27,
    "start_date": "2017-02-07T00:00:00+00:00",
    "end_date": "2017-02-07T00:00:00+00:00",
    "members": 5594,
    "rated": "PG-13"
}

Toda la información devuelta por la API está presente aquí, incluidos los enlaces a las imágenes utilizadas.

Ahora bien, podrías preguntarte:

¿Por qué molestarse con esto, cuando simplemente puede... ir al sitio web y realizar una búsqueda allí?

Bueno, en el proceso de desarrollo, a veces tendrá un equipo de desarrolladores en el que una parte del equipo está desarrollando el back-end (API) mientras que todavía no se ve el front-end (GUI). En esta etapa, es muy útil probar la API tan pronto como se desarrolla, incluso antes de que se integre en cualquier otra cosa, y enviar comentarios en caso de que no esté a la altura de la documentación, o si hay algún tipo de error.

Otra cosa que puede notar es que hay una gran cantidad de datos que no se utilizan en el sitio web. El razonamiento aquí es: el desarrollador de este sitio web probablemente no necesitaba esta información, pero la API que está usando la ofrece, porque es necesaria para el desarrollador de esta API. A veces, incluso hay datos que simplemente se requieren en otro lugar y/o no es necesario que se vean en la interfaz de usuario.

Es posible que desee guardar esta solicitud en caso de que quiera usarla más tarde, y la forma de hacerlo es simplemente haciendo clic en Ctrl+S en su teclado, o haciendo clic en el botón Guardar al lado del botón Enviar :

saving requests

Seleccione el botón + Crear colección, porque necesita uno para guardar la solicitud en:

save a request

Y guarda la solicitud:

request collections

Puede acceder a sus colecciones y solicitudes a través de la pestaña Colecciones:

collections tab

Al hacer clic en la solicitud se abrirá en la nueva pestaña.

Creación de afirmaciones

En la pestaña "Pruebas", será recibido con un editor para su código:

creando aserciones

Ahora, ingresemos una prueba realmente simple que afirma que recibiremos un código de estado de 200:

1
2
3
pm.test("Status code is 200", function() {
    pm.response.to.have.status(200);
});

Como puede ver a la derecha, hay algunos fragmentos, que pueden ser muy útiles mientras se familiariza con ellos. Estos se pueden usar como macros para evitar escribir código realmente común todo el tiempo.

Al hacer clic en Enviar nuevamente, ahora tendrá una prueba adjunta a su solicitud. Este en particular afirma que el código de estado es 200 OK.

Esto se usa para verificar si completó con éxito la acción solicitada (en este caso, obtener algunos datos). En caso de que algo saliera mal, obtendría uno de los códigos de error, como 404 not found, 400 bad request, etc.

Al enviar la solicitud, somos recibidos con un caso de prueba aprobado:

test results 1/1

Ahora intentemos verificar si ambos títulos contienen la palabra "siete" en ellos:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
// Get the response
let responseBody = pm.response.json();

// Get the title of the first few elements
let firstTitle = responseBody.results[].title;
let secondTitle = responseBody.results[].title;

pm.test("Title of the first item in response contains 'seven'", function() {
    pm.expect(firstTitle.toLowerCase()).to.include("seven");
});

pm.test("Title of the second item in response contains 'seven'", function() {
    pm.expect(secondTitle.toLowerCase()).to.include("seven");
});

Dado que .to.include() distingue entre mayúsculas y minúsculas, usamos la función .toLowerCase() en la cadena; de lo contrario, es probable que la prueba falle falsamente.

Ejecutar este fragmento de código nos devolverá:

test results 3/3

Ahora, imagina tener una lista de más de 10 elementos que deseas verificar... sería una locura copiar y pegar el código 10 veces y, a veces, puedes obtener de manera realista más de cientos de resultados, así que presentemos un bucle for-each simple.

Sin embargo, primero, cambiemos el parámetro q a algo más convencional como Naruto y el parámetro limit a 10:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
pm.test("Status code is 200", function() {
    pm.response.to.have.status(200);
});

let responseBody = pm.response.json();
let results = responseBody.results;

results.forEach(function(result, i) {
    pm.test(`Title of item number ${i + 1} in response contains 'naruto'`, function() {
        pm.expect(result.title.toLowerCase()).to.include("naruto");
    });
});

En función (resultado, i) cada uno de los elementos se asigna automáticamente a resultado en cada paso, y i es el último parámetro, por lo que JavaScript lo asigna automáticamente como un contador interno. Es por eso que usamos ${i + 1} para contar qué elemento estamos probando. Si no agregáramos un contador al nombre de la prueba, Postman lo representaría con una sola prueba. Prueba a quitarlo para comprobarlo por ti mismo.

Como puede ver, ¡mucho menos código y muchas más pruebas!

por cada bucle para pruebas

Como ejercicio, intente agregar otro parámetro llamado tipo y establezca su valor en TV, luego afirme que cada elemento tiene su clave establecida en TV. Recuerde que podría devolver un término que coincida vagamente con el término, en caso de que vea fallar una prueba.

Introducción de variables

Para una mayor capacidad de Postman, introduzcamos variables en la mezcla. No entraré en variables globales, variables de entorno son más útiles para empezar:

postman environments

managing environments

Agreguemos una variable de entorno como naruto-10 con q y limit establecidos en naruto y 10 respectivamente:

assigning variables

Cambie su URL para que los parámetros no estén codificados, sino que se puedan configurar en cualquier variable que definamos después:

1
https://api.jikan.moe/v3/search/anime?q={{q}}&limit={{limit}}

Como puede ver, agregamos q={{q}}&limit={{limit}} en lugar de un valor fijo. el {{}} con algo intermedio es cómo Postman sabe que está buscando una variable. Notará que estará en rojo, y esto se debe a que no hemos seleccionado un entorno, por lo que Postman nos dice que no puede encontrar la variable:

choosing environments

Y ahora, podemos cambiar nuestro código para usar las variables de entorno llamando al objeto entorno:

1
2
3
4
5
6
7
8
let responseBody = pm.response.json();
let results = responseBody.results;

results.forEach(function(result, i) {
    pm.test(`Title of item number ${i + 1} in response contains ${environment.q}`, function() {
        pm.expect(result.title.toLowerCase()).to.include(environment.q);
    });
});

Enviar la solicitud en este estado también debería devolvernos varias pruebas aprobadas:

sending final request

Conclusión

Cartero se destaca como una de las herramientas más amigables para principiantes que puede usar para comenzar a probar sus API. Uno de los motivos más importantes para esto es que no tiene que aprender un nuevo idioma y solo necesitará JavaScript, independientemente del idioma en el que esté escrita la API.

Si desea probarse a sí mismo y actualmente está en un proyecto, intente averiguar si hay alguna API a la que pueda acceder y posiblemente llamar desde Postman. Si no, hay muchas API públicas similares a la utilizada en este artículo. .