TestMace — una potente IDE para trabajar con API

¡Hola a todos! Hoy queremos presentar al público de TI nuestro producto: un IDE para trabajar con APIs. TestMaceEs posible que algunos de ustedes ya nos conozcan a través de artículos anteriores.Sin embargo, no había un análisis exhaustivo de la herramienta, así que estamos corrigiendo esta molesta omisión.

TestMace — una potente IDE para trabajar con API

Motivación

Nos gustaría comenzar explicando cómo llegamos a esta decisión y decidimos crear nuestra propia herramienta para trabajar de manera avanzada con APIs. Comencemos con una lista de las funcionalidades que, en nuestra opinión, debe tener un producto que se pueda considerar como un 'IDE para trabajar con APIs':

  • Creación y ejecución de solicitudes y secuencias de comandos (secuencias de solicitudes).
  • Escritura de diversos tipos de pruebas.
  • Generación de pruebas.
  • Trabajo con la descripción de la API, incluyendo la importación de formatos como Swagger, OpenAPI, WADL, etc.
  • Simulación de solicitudes.
  • Buena compatibilidad con uno o varios lenguajes de programación para escribir scripts, incluyendo integración con bibliotecas populares.
  • etc.

Esta lista se puede ampliar según se desee. Además, es importante crear no solo el IDE en sí, sino también una infraestructura adecuada, como la sincronización en la nube, herramientas de línea de comandos, servicios de monitoreo en línea, etc. Después de todo, las tendencias de los últimos años nos dictan no solo un potente funcionalidad de la aplicación, sino también su interfaz amigable.

¿Para quién es útil esta herramienta? Obviamente, para todos aquellos que están relacionados con el desarrollo y prueba de APIs: desarrolladores y testers =). Y aunque para los primeros a menudo es suficiente realizar solicitudes individuales y escenarios simples, para los testers esta es una de las herramientas principales, que además debe incluir un potente mecanismo para escribir pruebas con la capacidad de ejecutarlas en CI.

Así que, siguiendo estas pautas, comenzamos a crear nuestro producto. Veamos qué hemos logrado hasta ahora.

Inicio rápido

Comencemos con el primer encuentro con la aplicación. Puedes descargarla en nuestro sitio web. Actualmente, se admiten las 3 principales plataformas: Windows, Linux, MacOS. Descárgala, instálala y ejecútala. Al iniciar por primera vez, verás la siguiente ventana:

TestMace — una potente IDE para trabajar con API

Haz clic en el símbolo de más en la parte superior del área de contenido para crear tu primera solicitud. La pestaña de la solicitud se verá de la siguiente manera:

TestMace — una potente IDE para trabajar con API

Hablemos de esto más en detalle. La interfaz de solicitud se asemeja mucho a la interfaz de populares clientes REST, lo que facilita la migración desde herramientas similares. Realicemos la primera solicitud en la url https://next.json-generator.com/api/json/get/NJv-NT-U8

TestMace — una potente IDE para trabajar con API

A primera vista, el panel de respuesta tampoco presenta ninguna sorpresa inesperada. Sin embargo, quiero llamar su atención sobre algunos puntos:

  1. El cuerpo de la respuesta tiene una representación en forma de árbol, lo que, en primer lugar, añade información y, en segundo lugar, permite agregar algunas funciones interesantes que se describen a continuación
  2. Hay una pestaña de Assertions, donde se muestra una lista de pruebas para esta solicitud

Como se puede notar, nuestra herramienta se puede utilizar como un cómodo cliente REST. Sin embargo, no estaríamos aquí si sus capacidades se limitaran solo al envío de solicitudes. A continuación, describiré los conceptos principales y las funcionalidades de TestMace.

Conceptos y funcionalidades principales

nodo

La funcionalidad de TestMace se divide en diferentes tipos de nodos. En el ejemplo anterior, demostramos el funcionamiento del nodo RequestStep. Sin embargo, en la aplicación también están disponibles los siguientes tipos de nodos:

  • RequestStep. Es el nodo a través del cual se puede crear una solicitud. Como elemento hijo, solo puede tener un nodo Assertion.
  • Assertion. Este nodo se utiliza para escribir pruebas. Puede ser un nodo hijo solo del nodo RequestStep.
  • Folder. Permite agrupar nodos Folder y RequestStep dentro de él.
  • Project. Este es el nodo raíz, creado automáticamente al crear un proyecto. En otros aspectos, repite las funcionalidades del nodo Folder.
  • Link. Un enlace a un nodo Folder o RequestStep. Permite reutilizar solicitudes y guiones.
  • etc.

Los nodos se encuentran en scratches (panel en la parte inferior izquierda, que sirve para crear rápidamente solicitudes 'desechables') y en project (panel en la parte superior izquierda), donde nos detendremos más en detalle.

Proyecto

Al iniciar la aplicación, pudo haber notado una única línea Project en la esquina superior izquierda. Esta es la raíz del árbol del proyecto. Al iniciar el proyecto, se crea un proyecto temporal, cuya ruta depende de su sistema operativo. En cualquier momento, puede mover el proyecto a un lugar conveniente para usted.

El propósito principal del proyecto es la posibilidad de guardar los desarrollos en el sistema de archivos y sincronizarlos posteriormente a través de sistemas de control de versiones, ejecutar guiones en CI, revisar cambios, etc.

Variables

Las variables son uno de los mecanismos clave de la aplicación. Aquellos de ustedes que trabajan con herramientas como TestMace, quizás ya hayan comprendido de qué se trata. Así que, las variables son una forma de almacenar datos comunes y de comunicarse entre nodos. Un análogo, por ejemplo, son las variables de entorno en Postman o Insomnia. Sin embargo, hemos ido más allá y hemos desarrollado el tema. En TestMace, las variables se pueden establecer a nivel de nodo. Cualquiera. También existe un mecanismo de herencia de variables de los antepasados y la sobrescritura de variables en los descendientes. Además, hay un conjunto de variables internas, cuyos nombres comienzan con $. Aquí hay algunas de ellas:

  • $prevStep — hace referencia a las variables del nodo anterior
  • $nextStep — hace referencia a las variables del siguiente nodo
  • $parent — lo mismo, pero para el antepasado
  • $response — respuesta del servidor
  • $env — variables de entorno actuales
  • $dynamicVar — variables dinámicas creadas durante la ejecución del guion o solicitud

$env — son, en esencia, variables comunes a nivel de nodo del Proyecto, sin embargo, el conjunto de variables de entorno varía según el entorno elegido.

El acceso a la variable se realiza a través de ${variable_name}
Como valor de la variable puede haber otra variable, o incluso toda una expresión. Por ejemplo, como variable url puede haber una expresión del tipo
http://${host}:${port}/${endpoint}.

Vale la pena destacar la posibilidad de asignar variables durante la ejecución del script. Por ejemplo, a menudo surge la necesidad de almacenar datos de autorización (token o todo el encabezado), que llegaron del servidor tras un inicio de sesión exitoso. TestMace permite almacenar dichos datos en variables dinámicas de uno de los antepasados. Para evitar colisiones con las variables "estáticas" ya existentes, las variables dinámicas se colocan en un objeto separado. $dynamicVar.

Escenarios

Utilizando todas las posibilidades mencionadas anteriormente, se pueden ejecutar escenarios completos de solicitudes. Por ejemplo, crear entidad -> solicitar entidad -> eliminar entidad. En este caso, por ejemplo, se puede utilizar el nodo Folder para agrupar varios nodos RequestStep.

Autocompletado y resaltado del valor de la expresión

Para un trabajo cómodo con variables (y no solo eso) es necesario el autocompletado. Y, por supuesto, la resaltación del valor de la expresión, para que sea más fácil y cómodo aclarar a qué equivale cada variable. Este es precisamente el caso en el que es mejor ver una vez que escuchar cien veces:

TestMace — una potente IDE para trabajar con API

Cabe destacar que el autocompletado no solo se implementa para variables, sino también, por ejemplo, para encabezados, valores de ciertos encabezados (por ejemplo, autocompletado para el encabezado Content-Type), protocolos y mucho más. La lista se actualiza constantemente con el crecimiento de la aplicación.

Deshacer/rehacer

Deshacer/repetir cambios es muy conveniente, sin embargo, por alguna razón no se implementa en todas partes (y las herramientas para trabajar con API no son una excepción). Pero nosotros no somos de esos.) El deshacer/rehacer está implementado en todo el proyecto, lo que permite cancelar no solo la edición de un nodo específico, sino también su creación, eliminación, movimiento, etc. Las operaciones más críticas requieren confirmación.

Creación de pruebas

La creación de pruebas es responsabilidad del nodo Assertion. Una de las características principales es la posibilidad de crear pruebas sin programación, utilizando editores integrados.

El nodo Assertion consiste en un conjunto de assertions. Cada assertion tiene su propio tipo, en este momento existen varios tipos de assertions.

  1. Comparar valores: simplemente compara 2 valores. Hay varios operadores de comparación "igual", "diferente", "mayor", "mayor o igual", "menor", "menor o igual".

  2. Contiene valor: verifica la inclusión de una subcadena en una cadena.

  3. XPath: verifica que hay un valor específico en XML mediante el selector.

  4. Assertion de JavaScript: script arbitrario en lenguaje javascript que devuelve true en caso de éxito y false en caso de fallo.

Nota que solo el último requiere habilidades de programación del usuario; los otros 3 assertions se crean a través de la interfaz gráfica. Aquí tienes, por ejemplo, cómo luce el diálogo para crear un assertion de comparar valores:

TestMace — una potente IDE para trabajar con API

La guinda del pastel es la creación rápida de assertions a partir de la respuesta, ¡mira esto!

TestMace — una potente IDE para trabajar con API

Sin embargo, tales assertions tienen restricciones evidentes, y cuando te encuentres con ellas, puedes utilizar assertions de javascript. En este caso, TestMace también proporciona un entorno cómodo con autocompletado, resaltado de sintaxis y hasta un analizador estático.

Descripción de API

TestMace no solo permite utilizar API, sino también documentarlo. Además, la descripción tiene una estructura jerárquica y se integra perfectamente en el resto del proyecto. Actualmente, también existe la posibilidad de importar descripciones de API desde formatos Swagger 2.0 / OpenAPI 3.0. La descripción no es solo un peso muerto, sino que se integra estrechamente con el resto del proyecto, permitiendo, por ejemplo, autocompletar URLs, encabezados HTTP, parámetros de consulta, entre otros, y en el futuro planeamos añadir pruebas para verificar si la respuesta coincide con la descripción del API.

Compartir nodos

Caso: quisieras compartir una solicitud problemática o incluso un escenario completo con un colega o simplemente adjuntarlo a un error. TestMace cubre también este caso: la aplicación permite serializar cualquier nodo e incluso un subárbol en una URL. Copia-pega y ya habrás trasladado fácilmente la solicitud a otra máquina o proyecto.

Formato legible para el almacenamiento del proyecto

En este momento, cada nodo se almacena en un archivo separado con la extensión yml (como en el caso del nodo Assertion), o en una carpeta con el nombre del nodo y un archivo index.yml dentro.
Así es cómo se ve, por ejemplo, el archivo de solicitud que hicimos en la revisión anterior:

index.yml

children: []
variables: {}
type: RequestStep
assignVariables: []
requestData:
  request:
    method: GET
    url: 'https://next.json-generator.com/api/json/get/NJv-NT-U8'
  headers: []
  disabledInheritedHeaders: []
  params: []
  body:
    type: Json
    jsonBody: ''
    xmlBody: ''
    textBody: ''
    formData: []
    file: ''
    formURLEncoded: []
  strictSSL: Inherit
authData:
  type: inherit
name: Scratch 1

Como puedes ver, todo es bastante claro. Si lo deseas, este formato se puede editar de forma bastante cómoda incluso manualmente.

La jerarquía de carpetas en el sistema de archivos refleja completamente la jerarquía de nodos en el proyecto. Por ejemplo, un escenario del tipo:

TestMace — una potente IDE para trabajar con API

Se mapea en el sistema de archivos a la siguiente estructura (solo se muestra la jerarquía de carpetas, pero la esencia está clara)

TestMace — una potente IDE para trabajar con API

Lo que facilita el proceso de revisión del proyecto.

Importar desde Postman

Después de leer todo lo anterior, algunos usuarios querrán probar (¿verdad?) el nuevo producto o (¡quién sabe!) implementarlo por completo en su proyecto. Sin embargo, la migración puede verse obstaculizada por la gran cantidad de trabajos ya realizados en el mismo Postman. Para tales casos, TestMace soporta la importación de colecciones desde Postman. Actualmente, se admite la importación sin pruebas, pero en el futuro no descartamos su soporte.

Planes

Espero que a muchos de los que han llegado hasta aquí les haya gustado nuestro producto. Sin embargo, ¡eso no es todo! El trabajo en el producto está en pleno desarrollo y aquí hay algunas características que planeamos agregar en breve.

Sincronización en la nube

Una de las características más solicitadas. En este momento, ofrecemos usar sistemas de control de versiones como método de sincronización, lo que hace que nuestro formato sea más amigable para este tipo de almacenamiento. Sin embargo, no a todos les conviene este flujo de trabajo, por lo que se planea agregar un mecanismo de sincronización más habitual a través de nuestros servidores.

en cli-runtime y kubectl

Como se mencionó anteriormente, los productos a nivel de IDE no pueden prescindir de diversas integraciones con aplicaciones o flujos de trabajo existentes. La CLI es precisamente necesaria para integrar las pruebas escritas en TestMace en el proceso de integración continua. El trabajo en la CLI está en pleno desarrollo, en versiones iniciales se lanzará el proyecto con un informe de consola simple. Posteriormente, se planea agregar la salida del informe en formato JUnit.

Sistema de complementos

A pesar de la potencia de nuestra herramienta, el conjunto de casos que requieren solución es infinito. Después de todo, hay tareas específicas para proyectos concretos. Por esta razón, planeamos agregar un SDK para el desarrollo de complementos, y cada desarrollador podrá agregar funcionalidades a su gusto.

Ampliación de la variedad de tipos de nodos

Este conjunto de nodos no cubre todos los casos necesarios para el usuario. Los nodos que se planea agregar son:

  • Nodo Script — transforma y coloca datos usando js y la API correspondiente. Usando este tipo de nodo, se pueden crear cosas como scripts de pre-solicitud y post-solicitud en Postman.
  • Nodo GraphQL — soporte para GraphQL
  • Nodo de aserción personalizada — permitirá ampliar el conjunto de aserciones existentes en el proyecto
    Naturalmente, esta no es una lista definitiva, se irá ampliando constantemente gracias, entre otros, a sus comentarios.

Preguntas Frecuentes

¿En qué se diferencia de Postman?

  1. La conceptuación de nodos que permite escalar prácticamente indefinidamente la funcionalidad del proyecto
  2. Formato legible por humanos del proyecto con su almacenamiento en el sistema de archivos, lo que facilita el trabajo con sistemas de control de versiones
  3. Posibilidad de crear pruebas sin programación y un soporte más avanzado para js en el editor de pruebas (autocompletado, analizador estático)
  4. Autocompletado avanzado y resaltado del valor actual de las variables

¿Es este un producto de código abierto?

No, actualmente el código fuente está cerrado, sin embargo, en el futuro consideramos la posibilidad de abrirlo

¿De qué vives?)

Junto con la versión gratuita, planeamos lanzar una versión paga del producto. Esta incluirá principalmente características que requieren una parte del servidor, como la sincronización.

Conclusión

Nuestro proyecto avanza a pasos agigantados hacia un lanzamiento estable. Sin embargo, el producto ya se puede utilizar y las opiniones positivas de nuestros primeros usuarios son una prueba de ello. Estamos recolectando activamente comentarios, porque sin una estrecha colaboración con la comunidad es imposible construir una buena herramienta. Puedes encontrarnos aquí:

Sitio oficial

Telegram

Slack

Facebook

Tracker de problemas

¡Esperamos con ansias tus deseos y sugerencias!

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster