Introducción
Contenido
Probar una aplicación significa más que simplemente hacer clic hasta que algo se rompe o probar diferentes entradas hasta que algo no funciona correctamente.
Si bien esta es una buena manera de encontrar cualquier cosa que pueda fallar en el lado de la aplicación que mira hacia el usuario, debido al mal uso, lo que se está descuidando es el hecho de que las API que procesan sus solicitudes no se están probando 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 generales, permite que dos piezas de software interactúen entre sí para acceder a los datos o una parte de la funcionalidad de otros programas.
Le 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 las aplicaciones interactúan 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 optar por hacer esto utilizando una API, que simplemente «recupera» 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ó el pago con éxito (o sin éxito).
¿Por qué utilizar Postman?
Si bien hay otras herramientas disponibles (SoapUI, Katalon, Tricentis), Cartero se destaca como una de las herramientas más fáciles de usar para principiantes que puede usar para comenzar a probar su API.
Uno de los motivos más importantes para esto es que no es necesario que aprenda 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. volver a probar.
Algunas de las otras razones son:
- Puede realizar recopilaciones de pruebas automatizadas con relativa facilidad y rapidez
- También puede realizar 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, aplicaciones de Chrome y Linux
- Es muy fácil compartir sus colecciones de prueba, incluso cuando están en progreso
- La interfaz permite importar puntos finales desde Pavonearse o RAML archivos, como punto de partida para las pruebas, lo que acorta el tiempo necesario para realizar 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 combinado con el punto anterior.
- Permite almacenar variables de respuestas para uso futuro
- Permite utilizar 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 las pruebas
- Gratis (con funciones premium)
- Guarda datos (en la 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 una. 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á al implementar una prueba.
Te puede interesar:Ordenar matrices en JavaScriptAdemás, si bien es un profesional que es gratis, sus características premium bloquean el monitoreo y las llamadas automatizadas sin ningún programa externo detrás de una tarifa. Esto se puede contrarrestar con un sistema interno o una tubería, como se mencionó con newman.
Usando cartero
Instalación de Postman
Instalar Postman es tan simple como ir a su sitio web, descargándolo y ejecutando el .exe
archivo. Asegúrese de descargar la versión correcta, pero generalmente ya selecciona la que se basa en su sistema:
Cartero inicial
Una vez que lo haya instalado, simplemente inicie Postman y se encontrará con la siguiente interfaz de usuario:
Aquí puede crear una cuenta. No es necesario, pero se recomienda crear uno, 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 desee profundizar 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:
Envío de solicitudes
Lo primero es lo primero, debes tomar una decisión crucial: ¿modo oscuro o modo claro? Prefiero el modo oscuro, que es el que usaré durante el resto de este artículo:
Una vez que lo haya decidido, al seleccionar a) o b) se creará una nueva pestaña:
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 con algo que haya comenzado localmente.
Para simplificar, usaremos algo que esté disponible públicamente. Este sitio web te permite filtrar anime según tu término de búsqueda:
Te puede interesar:JavaScript: compruebe si la cadena contiene una subcadenaLo 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, pueden devolver 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 utilizar 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:
La sección Params se llena automáticamente con los parámetros que se encuentran en la URL proporcionada. Esto significa que la URL se construye con dos valores que afectarán lo que obtendrá como resultado de enviar esta solicitud.
Ahora, enviemos la solicitud:
La respuesta está en formato JSON, que es bastante estándar para la mayoría de las API de hoy en día. Si mira hacia atrás en el sitio web, obtiene una lista de elementos que coinciden con su término de búsqueda, y esta es de hecho la misma lista, con los mismos elementos.
Puede ver que hay varias claves que tienen el mismo nombre y que 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:
{
"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.
Te puede interesar:NPM: instalar una versión específica de un paqueteAhora, podrías preguntarte:
¿Por qué molestarse con esto, cuando puede simplemente … ir al sitio web y realizar una búsqueda allí?
Bueno, en el proceso de desarrollo, a veces tendrás un equipo de desarrolladores donde una parte del equipo está desarrollando el back-end (API) mientras todavía no hay un front-end (GUI) para ser visto. En esta etapa, es muy útil probar la API tan pronto como se desarrolle, incluso antes de que se integre en cualquier otra cosa, y devolver comentarios en caso de que no esté a la altura de la documentación o haya algún tipo de error.
Otra cosa que puede notar es que hay muchos 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 otros lugares y / o no es necesario verlos en la interfaz de usuario.
Es posible que desee guardar esta solicitud en caso de que desee usarla más adelante, y la forma en que lo hace es simplemente haciendo clic en Ctrl+S
en su teclado, o haciendo clic en el botón Guardar junto al botón Enviar:
Seleccione el botón + Crear colección, porque necesita uno para guardar la solicitud en:
Y guarde la solicitud:
Puede acceder a sus colecciones y solicitudes a través de la pestaña Colecciones:
Al hacer clic en la solicitud, se abrirá en la nueva pestaña.
Crear afirmaciones
En la pestaña «Pruebas», aparecerá un editor para su código:
Te puede interesar:Uso de AWS RDS con Node.js y Express.jsAhora, ingresemos una prueba realmente simple que afirma que recibiremos un código de estado de 200
:
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 un código realmente común todo el tiempo.
Al hacer clic en Enviar nuevamente, ahora tendrá una prueba adjunta a su solicitud. Éste 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, recibimos un caso de prueba aprobado:
Ahora intentemos verificar si ambos títulos contienen la palabra «siete» en ellos:
// 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");
});
Ya que .to.include()
distingue entre mayúsculas y minúsculas, utilizamos la .toLowerCase()
funcionan en la cadena, de lo contrario la prueba probablemente fallaría falsamente.
Ejecutar este fragmento de código nos devolverá:
Ahora, imagine tener una lista de más de 10 elementos que desea verificar … sería una locura copiar y pegar el código 10 veces y, a veces, de manera realista puede obtener más de cientos de resultados, así que introduzcamos un simple for-each
lazo.
Pero primero, cambiemos el q
param a algo más convencional como Naruto
y el limit
param a 10
:
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 function(result, i)
cada uno de los elementos se asigna automáticamente a result
en cada pasada, y i
es el último parámetro, por lo que JavaScript lo asigna automáticamente como contador interno. Por eso usamos ${i + 1}
para contar qué artículo estamos probando. Si no agregamos un contador al nombre de la prueba, Postman lo representaría con una prueba. Intente quitarlo para verlo usted mismo.
Como puede ver, ¡mucho menos código y muchas más pruebas!
Como ejercicio, intente agregar otro parámetro llamado como type
y establezca su valor en TV
, luego afirme que cada elemento tiene su key
ajustado a TV
. Recuerde que puede devolver un término que coincida vagamente con el término, en caso de que vea que una prueba falla.
Introduciendo Variables
Para una mayor capacidad de Postman, introduzcamos variables en la mezcla. No entraré en variables globales, las variables de entorno son más útiles para empezar:
Agreguemos una variable de entorno como naruto-10
con el q
y limit
ajustado a naruto
y 10
respectivamente:
Cambie su URL para que los parámetros no estén codificados, sino que se puedan configurar en cualquier variable que definamos después:
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. la {{}}
con algo intermedio es cómo Postman sabe que está buscando una variable. Notará que será rojo, y esto se debe a que no hemos seleccionado un entorno, por lo que Postman nos dice que no puede encontrar la variable:
Y ahora, podemos cambiar nuestro código para usar las variables de entorno llamando al environment
objeto:
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:
Conclusión
Cartero se destaca como una de las herramientas más fáciles de usar 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.
Te puede interesar:Autenticación y autorización con JWT en Express.jsSi desea probarse a sí mismo y actualmente está en un proyecto, intente averiguar si hay alguna API a la que pueda acceder y, potencialmente, llame desde Postman. Si no, hay muchos API públicas similar al utilizado en este artículo.