Blog

Herramienta para pruebas de API: Reseña de Insomnia

En este post hablaremos de Insomnia, sus principales características, similitudes y diferencias con otras herramientas para pruebas de API.

¿Qué es Insomnia?

Insomnia es una aplicación de escritorio multiplataforma gratuita que simplifica la interacción y el diseño de API basadas en HTTP. Insomnia combina una interfaz fácil de usar con funciones avanzadas como asistentes de autenticación, generación de código y variables de entorno.

Comparativa de herramientas: Insomnia, Postman y SoapUI

En la siguiente tabla, se comparan las principales características de Insomnia con Postman y SoapUI para ver similitudes y diferencias.

Primer acercamiento a Insomnia

Mis primeras pruebas con la herramienta fueron para este review, y el objetivo de las mismas era entender con qué características cuenta Insomnia así como también conocer de primera mano cómo maneja tanto APIs REST como SOAP, por lo tanto, dichas pruebas fueron realizadas contra las APIs GoREST y CountryInfoService.

Anteriormente, vimos cómo funciona Hoppscotch, ecosistema de desarrollo de API de código abierto, ahora queremos entender cómo se comporta Insomnia probando una API Rest en comparación con Postman y una API Soap en comparación con SoapUI.

A continuación, comparto algunas capturas de pantalla tomadas durante las pruebas para mostrar cómo luce la herramienta. Luego de descargarla e instalarla, su uso es realmente intuitivo, ya que presenta una interfaz muy similar a Postman.

Prueba de concepto con GoREST

GoRest es una API Rest que está disponible en línea para pruebas y prototipado. Permite el registro de usuarios los que pueden publicar post y comentarios. Como se trata de una API para pruebas solo contiene datos falsos.

Para comenzar con las pruebas sobre GoREST, cree un proyecto en el dashboard de Insomnia:

Lo primero que hice fue configurar el ambiente de trabajo. Para ello vamos al menú de ambientes y seleccionamos la opción Manage Environments Ctrl+E:

En el gestor de ambientes desplegamos las opciones en Sub Environments y seleccionamos Environment:

Con el nuevo ambiente creado, podemos hacer clic sobre el nombre para editarlo y comenzar a escribir los parámetros en formato JSON:

Una vez creado el ambiente, debemos seleccionarlo de la lista desplegable:

Dentro del ambiente, creamos las colecciones para organizar y almacenar las distintas peticiones:

A diferencia de Postman o SoapUI, las colecciones o folders no se exportan directamente desde el menú contextual, sin embargo, en Settings se puede mover o copiar hacia otro Workspace.

Para importar o exportar cualquier documento o colección del workspace vamos al menú que se despliega en su nombre y seleccionamos Import/Export:

Como en herramientas similares, en las peticiones se pueden usar parámetros mediante las variables de entorno, definidas en formato JSON.

Para invocar cualquier parámetro presionamos Ctrl+Espacio donde se desea insertar el mismo y se despliega una lista con todas las variables disponibles.

También es posible indicar el parámetro directamente en la sección Query del pedido:

En el caso de enviar una petición de tipo POST, como en otras herramientas, se puede seleccionar el tipo de Body (JSON, XML, YAML, EDN, Plain, Binary File, No Body):

En el caso de la API que estamos probando, es necesario enviar un token de autorización que se puede agregar en la sección Auth seleccionando el tipo de autorización requerida:

Insomnia permite realizar peticiones a partir de cURL. Para ello copiamos una de las cURL que ofrece la API GoRest como ejemplo y la pegamos en la URL de la petición:

Al pegar la cURL se visualiza automáticamente la URL:

Asimismo, es posible enviar archivos adjuntos si seleccionamos Binary File en el Body:

Luego de seleccionar el archivo, la petición lucirá así:

El resultado se puede ver en la parte derecha de la pantalla de la siguiente manera:

Otra característica compartida con otras herramientas es el historial de respuestas sobre la derecha para poder tener trazabilidad de nuestro trabajo:

Prueba de Concepto con CountryInfoService

Es un servicio web que muestra información del país a partir de un código ISO de dos letras, por ejemplo UY. Ofrece funciones para recuperar la moneda utilizada, el idioma, la ciudad capital, el continente y el código de teléfono.

Para comenzar, creé otro proyecto en el dashboard de Insomnia. También configuré el ambiente y las colecciones del nuevo proyecto:

Para los pedidos del tipo SOAP, lo que hacemos es seleccionar XML como tipo de Body y darle el formato correspondiente (XML):

Un dato que me pareció importante: debemos seleccionar el método POST ya que si bien es posible usar GET en los web services Soap, típicamente dado que dicho protocolo utiliza payloads verbosos se suele utilizar POST. Además, es necesario también configurar los headers:

Y obtenemos la respuesta:

Si preferimos pasar datos como parámetros en el pedido, también podemos hacerlo:

Encadenamiento de pedidos y respuestas

Insomnia permite extraer valores de las respuestas para ser usados en otros pedidos. Por ejemplo, usar el ID de la respuesta de un método POST en un pedido del tipo GET. Se puede ver esta Documentación para mayor información.

Existen tres tipos de opciones para las respuestas:

  • Response — Body Attribute: para trabajar con respuesta JSON o XML, extrayendo atributos del body.
  • Response — Raw Body: Hace referencia a todo el contenido del cuerpo de una solicitud.
  • Response — Header: Extrae valores de encabezado específicos de una respuesta.

Para especificar el dato que se desea obtener de una respuesta, en la barra de URL vacía por ejemplo, ingresamos ‘/response’ y se despliegan las opciones.

Seleccionamos la deseada, en mi caso seleccioné Body Attribute. Luego hacemos click en el tag que está en rojo y configuramos el resto de las opciones.

En Request debemos especificar a qué pedido hacemos referencia, lo seleccionamos de la lista desplegable. En Filter, que puede ser un JSONPath o XPath, ingresamos el dato que queremos obtener de la respuesta, que se visualizará en el recuadro Live Preview.

En el siguiente ejemplo en el proyecto de GoRest, usamos el id obtenido de la respuesta del método POST NewUser para enviar un pedido del tipo GET UserById. El dato lo pasamos como query del pedido:

Y configuramos el tag de la siguiente manera:

En el siguiente ejemplo en el proyecto de CountryInfoService, tomamos el ISO Code de la respuesta del pedido CountryByName y se lo pasamos al pedido FullCountryInfoByISOCode de la siguiente manera:

Como en el caso anterior, seleccionamos la respuesta que contiene el dato y en Filter ingresamos el XPath correspondiente:

De esta manera podemos ver que es diferente a cómo se manejan los datos entre pedidos en Postman por ejemplo, aunque Insomnia también permite hacerlo mediante variables de entorno.

Testing en Insomnia

A diferencia de Postman o SoapUI, Insomnia ofrece una pestaña aparte para las pruebas. Anteriormente estábamos trabajando en la pestaña DEBUG con las peticiones y respuestas. Las pruebas unitarias se basan en el framework Mocha Chai para las assertions, con JavaScript, según la documentación.

Las pruebas unitarias se pueden organizar en Suites. Se pueden correr individualmente o correr la Suite completa.

La imagen 1 muestra la organización de las pruebas unitarias en Suites en el panel de la izquierda.

La imagen 2 muestra las pruebas unitarias dentro de la Suite, relacionadas con la petición correspondiente, en el panel central.

Y la imagen 3 muestra los resultados de las pruebas con el tiempo consumido, en el panel situado a la derecha del workspace.

En el caso del proyecto con SOAP es el mismo procedimiento:

Inso CLI

Inso CLI (interfaz de línea de comandos) para Insomnia se basa en Node.js y en las librerías principales de Insomnia. Permite utilizar la funcionalidad de Insomnia en la terminal y entornos de CI/CD para la automatización. En este momento, Inso CLI solo funciona con documentos de diseño y no con colecciones de solicitudes.

Existen dos formas de instalar Inso CLI:

  • Desde un ejecutable que se descarga de GitHub,
  • A través de NPM insomnia-inso (actualmente solo es compatible con Node.js 16.x LTS)

Inso Run Test

En mi caso lo instalé mediante la primera opción. Luego de instalado probé con los comandos como se explica en la documentación, y este fue el resultado de correr las suites de pruebas del proyecto GoREST:

Al correr el comando inso run test sin especificar un documento, se nos pide que seleccionemos uno de la lista. Luego de seleccionar el documento o la suite a probar, se nos pide que seleccionemos el ambiente, como se aprecia en la captura.

Lo mismo hice para el proyecto de CountryInfoService:

Si no se especifica un tipo de reporte (dot, list, spec, min y progress), por defecto usa spec.

Inso Export Spec

Este comando extrae y exporta la especificación OpenAPI sin procesar. La especificación OpenAPI es el estándar para documentar API, y OpenAPI 3.0 es la versión más reciente de la especificación OpenAPI. OpenAPI 3.0 ofrece diferentes mejoras, como una estructura más sencilla para definir API y componentes más reutilizables para reducir la duplicación.

Con la opción — output <path> se guarda la especificación en un archivo.

Exporta la especificación cargada en la pestaña ‘DESIGN’.

Un documento de OpenAPI describe la interfaz pública de la API REST y define información como nombre y descripción, los extremos (rutas) individuales, cómo se autentican los emisores. Uno de los beneficios principales del uso de OpenAPI es para la documentación; una vez que se tiene un documento de OpenAPI que describe la API, es fácil generar la documentación de referencia para la misma.

Inso Generate Config

Este comando genera una configuración a partir de la especificación de API declarada en DESIGN mediante openapi-2-kong. El comando funciona de manera similar a generar un archivo de configuración declarativo o un manifiesto de Kubernetes desde Insomnia. Puede verse un ejemplo aquí.

Insomnia permite crear un archivo preformateado decK cuando se agregan endpoints al documento o puede tomar un documento y generar un manifiesto de Kubernetes.

Ambas opciones están disponibles también en la interfaz de usuario de Insomnia.

Integración Continua

Inso CLI se ha diseñado para ejecutarse en un entorno de integración continua (CI), quita la necesidad interactuar con la herramienta mediante prompts y proporciona códigos de salida para aprobar o fallar el flujo de trabajo de CI. Puede verse un ejemplo aquí.

Colaboración

Para trabajar en equipo y poder sincronizar los proyectos, es necesario registrarse en el dashboard web de Insomnia. En la documentación se explica cómo trabajar en equipo y sincronizar los proyectos.

Una vez ingresados en el dashboard podemos gestionar el equipo y agregar miembros a través del correo electrónico.

Una vez sincronizado el trabajo, todos los miembros del equipo pueden visualizar en Insomnia desktop los proyectos del dashboard compartido.

Mi dashboard:

El dashboard de un colaborador:

Pros de la herramienta Insomnia

  • Su versión de pago es la más económica comparada con Postman o SoapUI (ver precios).
  • Algo adicional, permite manejar las Cookies de las respuestas y enviarlas en las peticiones automáticamente cuando sea necesario.
  • Permite la integración con GitHub de una manera sencilla.
  • Permite el manejo de variables y datos de una manera más simple que las herramientas alternativas.
  • Permite generar code snippets para más de 12 lenguajes diferentes a partir de las peticiones.
  • También permite importar un swagger de la API en la pestaña DESIGN a partir de un archivo tipo yaml o ingresando manualmente el formato adecuado.

Contras de la herramienta Insomnia

  • Las variables de entorno sólo pueden configurarse en formato JSON.
  • Los scripts de prueba deben ser ingresados manualmente ya que no presenta snippets como Postman por ejemplo.
  • La colaboración y el trabajo en equipo sólo están disponibles en la versión de pago.
  • Poca documentación sobre las peticiones para SOAP.
  • Inso CLI no trabaja con colecciones.
  • Sólo está disponible para Desktop en Inglés.
  • Si bien presenta un dashboard en la web para la gestión del trabajo en equipo, las peticiones y respuestas sólo pueden ser manejadas desde la versión desktop.

Pricing

En la siguiente tabla se comparan las distintas versiones de Insomnia, Postman y SoapUI.

*Los precios están expresados en dólares americanos.

Insomnia presenta una versión de prueba por 14 días permitiendo la colaboración en equipos de hasta 5 integrantes.

En el caso de SoapUI/ReadyAPI lo que se compra es la licencia para distintos módulos como API Test o API Performance.

Reflexiones finales

Si bien Insomnia presenta una interfaz muy similar a la de Postman, al estar dividida el área de trabajo en 3 ‘pestañas’ donde se tratan distintos temas (DESIGN/DEBUG/TEST), la hace una herramienta más organizada para trabajar.

El dashboard que presenta con los distintos proyectos del workspace y otras acciones como crear la documentación, también resultan amigables para el usuario y ayudan a mantener organizados nuestros proyectos.

En mi opinión, tiene características muy similares a Postman, no así con SoapUI. En comparación con Postman, me pareció una herramienta muy versátil a la hora de trabajar con datos y variables. En la sección de pruebas, le faltaría agregar algunos snippets como ayuda.

Inso CLI permite un acercamiento a la automatización de pruebas permitiendo correr las suites, aunque para mi gusto le faltaría poder correr las colecciones.

Finalmente, la integración con GitHub me parece un plus a destacar, ya que hoy en día es fundamental el trabajo colaborativo en la red.

Si esta herramienta para pruebas de API te parece interesante, te invito a usarla y dejar tus comentarios al respecto.

¡Síguenos en LinkedInXFacebookInstagram y YouTube para ser parte de nuestra comunidad y acceder a nuevas herramientas de pruebas de API.

162 / 208