TestMace: un potente IDE para trabajar con API

¡Hola a todos! Hoy queremos presentar al público de TI nuestro producto: un IDE para trabajar con API PruebaMaza. Quizás algunos de vosotros ya nos conozcáis desde articulos anteriores. Sin embargo, no ha habido una revisión exhaustiva de la herramienta, por lo que abordamos esta desafortunada deficiencia.

TestMace: un potente IDE para trabajar con API

Motivación

Me gustaría comenzar con cómo, de hecho, llegamos a esta vida y decidimos crear nuestra propia herramienta para el trabajo avanzado con la API. Comencemos con una lista de funcionalidades que debe tener un producto, sobre el cual, en nuestra opinión, podemos decir que es un “IDE para trabajar con API”:

  • Crear y ejecutar consultas y scripts (secuencias de consultas)
  • Redacción de varios tipos de pruebas.
  • Generación de pruebas
  • Trabajar con descripciones de API, incluida la importación desde formatos como Swagger, OpenAPI, WADL, etc.
  • Solicitudes burlonas
  • Buen soporte para uno o más idiomas para escribir scripts, incluida la integración con bibliotecas populares
  • etcétera

La lista se puede ampliar según sus gustos. Además, es importante crear no solo el IDE en sí, sino también una determinada infraestructura, como sincronización en la nube, herramientas de línea de comandos, servicio de monitoreo en línea, etc. Al final, las tendencias de los últimos años nos dictan no sólo la potente funcionalidad de la aplicación, sino también su agradable interfaz.

¿Quién necesita una herramienta así? Obviamente, todos aquellos que al menos de alguna manera están relacionados con el desarrollo y las pruebas de API son desarrolladores y probadores =). Además, si para los primeros suele ser suficiente ejecutar consultas únicas y scripts simples, entonces para los evaluadores esta es una de las herramientas principales, que, entre otras cosas, debería incluir un poderoso mecanismo para escribir pruebas con la capacidad de ejecutarlas en CI.

Entonces, siguiendo estas pautas, comenzamos a crear nuestro producto. Veamos qué hemos logrado en esta etapa.

Comienzo rápido

Comencemos con un primer conocimiento de la aplicación. Puedes descargarlo en nuestro sitio web. Por el momento, se admiten las 3 plataformas principales: Windows, Linux y MacOS. Descargar, instalar, ejecutar. Cuando lo inicie por primera vez, es posible que vea la siguiente ventana:

TestMace: un potente IDE para trabajar con API

Haga clic en el signo más en la parte superior del área de contenido para crear su primera solicitud. La pestaña de consulta se ve así:

TestMace: un potente IDE para trabajar con API

Veámoslo con más detalle. La interfaz de solicitud es muy similar a la interfaz de los clientes de descanso más populares, lo que facilita la migración desde herramientas similares. Hagamos la primera solicitud a la URL. https://next.json-generator.com/api/json/get/NJv-NT-U8

TestMace: un potente IDE para trabajar con API

En general, a primera vista, el panel de respuestas tampoco ofrece sorpresas. Sin embargo, me gustaría llamar su atención sobre algunos puntos:

  1. El cuerpo de la respuesta se representa en forma de árbol, que en primer lugar agrega contenido informativo y en segundo lugar le permite agregar algunas características interesantes que se detallan a continuación.
  2. Hay una pestaña Afirmaciones, que muestra una lista de pruebas para una solicitud determinada.

Como puede ver, nuestra herramienta se puede utilizar como un cómodo descanso para el cliente. Sin embargo, no estaríamos aquí si sus capacidades se limitaran únicamente al envío de solicitudes. A continuación, describiré los conceptos básicos y la funcionalidad de TestMace.

Conceptos y características básicos

Nodo

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

  • Solicitar paso. Este es el nodo a través del cual puede crear una solicitud. Solo puede tener un nodo Aserción como elemento secundario.
  • Afirmación. El nodo se utiliza para escribir pruebas. Solo puede ser un nodo secundario del nodo RequestStep.
  • Carpeta. Le permite agrupar nodos Carpeta y RequestStep dentro de sí mismos.
  • Proyecto. Este es el nodo raíz, creado automáticamente cuando se crea el proyecto. De lo contrario, repite la funcionalidad del nodo Carpeta.
  • Enlace. Enlace al nodo Carpeta o RequestStep. Le permite reutilizar consultas y scripts.
  • etcétera

Los nodos están ubicados en scratch (el panel en la parte inferior izquierda, utilizado para crear rápidamente consultas "únicas") y en proyectos (el panel en la parte superior izquierda), en los que nos detendremos con más detalle.

proyecto

Cuando inicia la aplicación, es posible que observe una línea de Proyecto solitaria en la esquina superior izquierda. Esta es la raíz del árbol del proyecto. Cuando inicia un proyecto, se crea un proyecto temporal, cuya ruta depende de su sistema operativo. En cualquier momento puede trasladar el proyecto a un lugar que le resulte conveniente.

El objetivo principal del proyecto es la capacidad de guardar desarrollos en el sistema de archivos y sincronizarlos aún más a través de sistemas de control de versiones, ejecutar scripts en CI, revisar cambios, etc.

Variables

Las variables son uno de los mecanismos clave de una aplicación. Aquellos que trabajéis con herramientas como TestMace quizá ya tengáis una idea de lo que estamos hablando. Entonces, las variables son una forma de almacenar datos comunes y comunicarse entre nodos. Un análogo, por ejemplo, son las variables ambientales en Postman o Insomnia. Sin embargo, fuimos más allá y desarrollamos el tema. En TestMace, las variables se pueden configurar a nivel de nodo. Cualquier. También existe un mecanismo para heredar variables de los antepasados ​​y superponer variables en los descendientes. Además, hay una serie de variables integradas, cuyos nombres comienzan con $. Éstos son algunos de ellos:

  • $prevStep — enlace a variables del nodo anterior
  • $nextStep — enlace a variables del siguiente nodo
  • $parent - lo mismo, pero sólo para el antepasado
  • $response - respuesta del servidor
  • $env - variables de entorno actuales
  • $dynamicVar - variables dinámicas creadas durante la ejecución del script o de la consulta

$env - estas son esencialmente variables ordinarias a nivel de nodo del proyecto; sin embargo, el conjunto de variables de entorno cambia según el entorno seleccionado.

Se accede a la variable a través de ${variable_name}
El valor de una variable puede ser otra variable o incluso una expresión completa. Por ejemplo, la variable URL puede ser una expresión como
http://${host}:${port}/${endpoint}.

Por otra parte, cabe destacar la posibilidad de asignar variables durante la ejecución del script. Por ejemplo, a menudo es necesario guardar los datos de autorización (un token o el encabezado completo) que provienen del servidor después de un inicio de sesión exitoso. TestMace le permite guardar dichos datos en variables dinámicas de uno de los antepasados. Para evitar colisiones con variables "estáticas" ya existentes, las variables dinámicas se colocan en un objeto separado. $dynamicVar.

Escenarios

Con todas las funciones anteriores, puede ejecutar scripts de consulta completos. Por ejemplo, crear una entidad -> consultar una entidad -> eliminar una entidad. En este caso, por ejemplo, puede utilizar el nodo Carpeta para agrupar varios nodos RequestStep.

Autocompletado y resaltado de expresiones

Para trabajar cómodamente con variables (y no solo), es necesario el autocompletado. Y por supuesto, resaltar el valor de una expresión para que sea más fácil y conveniente aclarar a qué es igual una variable en particular. Este es exactamente el caso cuando es mejor ver una vez que escuchar cien veces:

TestMace: un potente IDE para trabajar con API

Vale la pena señalar que el autocompletado se implementa no solo 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 a medida que crece la aplicación.

Deshacer rehacer

Deshacer/rehacer cambios es algo muy conveniente, pero 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 uno de esos!) Hemos implementado deshacer/rehacer en todo el proyecto, lo que le permite deshacer 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.

Creando pruebas

El nodo Assertion es responsable de crear pruebas. Una de las características principales es la capacidad de crear pruebas sin programación, utilizando editores integrados.

Un nodo Aserción consta de un conjunto de afirmaciones. Cada aserción tiene su propio tipo, actualmente existen varios tipos de aserciones

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

  2. Contiene valor: comprueba la aparición de una subcadena en una cadena.

  3. XPath: comprueba que el selector en XML contenga un valor determinado.

  4. La aserción de JavaScript es un script de JavaScript arbitrario que devuelve verdadero en caso de éxito y falso en caso de error.

Observo que solo la última requiere habilidades de programación por parte del usuario, las otras 3 afirmaciones se crean mediante una interfaz gráfica. Así es, por ejemplo, cómo se ve el cuadro de diálogo para crear una afirmación de comparación de valores:

TestMace: un potente IDE para trabajar con API

La guinda del pastel es la creación rápida de afirmaciones a partir de respuestas, ¡solo míralo!

TestMace: un potente IDE para trabajar con API

Sin embargo, tales afirmaciones tienen limitaciones obvias, que es posible que desee utilizar una afirmación de JavaScript para superar. Y aquí TestMace también proporciona un entorno cómodo con autocompletado, resaltado de sintaxis e incluso un analizador estático.

Descripción API

TestMace le permite no sólo utilizar la API, sino también documentarla. Además, la descripción en sí también tiene una estructura jerárquica y encaja orgánicamente en el resto del proyecto. Además, actualmente es posible importar descripciones de API desde los formatos Swagger 2.0/OpenAPI 3.0. La descripción en sí no es solo un peso muerto, sino que está estrechamente integrada con el resto del proyecto; en particular, está disponible el autocompletado de URL, encabezados HTTP, parámetros de consulta, etc., y en el futuro planeamos agregar pruebas. para el cumplimiento de la respuesta con la descripción de API.

Nodo compartido

Caso: le gustaría compartir una solicitud problemática o incluso un script completo con un colega o simplemente adjuntarlo a un error. TestMace también cubre este caso: la aplicación te permite serializar cualquier nodo e incluso un subárbol en una URL. Copie y pegue y podrá transferir fácilmente la solicitud a otra máquina o proyecto.

Formato de almacenamiento de proyectos legible por humanos

Por el momento, cada nodo se almacena en un archivo separado con la extensión yml (como es el caso del nodo Assertion), o en una carpeta con el nombre del nodo y el archivo index.yml.
Por ejemplo, así es como se ve el archivo de solicitud que creamos en la revisión anterior:

índice.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 está muy claro. Si lo desea, este formato se puede editar fácilmente de forma manual.

La jerarquía de carpetas en el sistema de archivos repite completamente la jerarquía de nodos en el proyecto. Por ejemplo, un script como:

TestMace: un potente IDE para trabajar con API

Asigna el sistema de archivos a la siguiente estructura (solo se muestra la jerarquía de carpetas, pero la esencia es clara)

TestMace: un potente IDE para trabajar con API

Esto facilita el proceso de revisión del proyecto.

Importar desde cartero

Después de leer todo lo anterior, algunos usuarios querrán probar (¿verdad?) un nuevo producto o (¡qué diablos no es broma!) usarlo por completo en su proyecto. Sin embargo, la migración puede ser frenada por una gran cantidad de acontecimientos en el mismo cartero. Para tales casos, TestMace admite la importación de colecciones desde Postman. De momento se admiten importaciones sin pruebas, pero no descartamos admitirlas en el futuro.

Planes

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

sincronización en la nube

Una de las funciones más solicitadas. Por el momento proponemos utilizar sistemas de control de versiones para la sincronización, para lo cual estamos haciendo el formato más amigable para este tipo de almacenamiento. Sin embargo, este flujo de trabajo no es adecuado para todos, por lo que planeamos agregar un mecanismo de sincronización familiar para muchos a través de nuestros servidores.

CLI

Como se mencionó anteriormente, los productos de nivel IDE no pueden prescindir de todo tipo de integraciones con aplicaciones o flujos de trabajo existentes. La CLI es exactamente lo que se necesita para integrar las pruebas escritas en TestMace en el proceso de integración continua. El trabajo en la CLI está en pleno apogeo; las primeras versiones lanzarán el proyecto con un simple informe de consola. En el futuro planeamos agregar resultados de informes en formato JUnit.

Sistema de complementos

A pesar de todo el poder de nuestra herramienta, el conjunto de casos que requieren soluciones es ilimitado. Después de todo, hay tareas que son específicas de un proyecto en particular. Es por eso que en el futuro planeamos agregar un SDK para desarrollar complementos y cada desarrollador podrá agregar funcionalidad a su gusto.

Ampliando la gama de tipos de nodos

Este conjunto de nodos no cubre todos los casos requeridos por el usuario. Nodos que se planea agregar:

  • Nodo de script: convierte y coloca datos usando js y la API correspondiente. Con este tipo de nodo, puede hacer cosas como scripts de solicitud previa y posterior a la solicitud en Postman.
  • Nodo GraphQL: compatibilidad con Graphql
  • Nodo de aserción personalizado: le permitirá expandir el conjunto de aserciones existentes en el proyecto
    Naturalmente, esta no es una lista definitiva; se actualizará constantemente debido, entre otras cosas, a sus comentarios.

Preguntas Frecuentes

¿En qué te diferencias del cartero?

  1. El concepto de nodos, que permite escalar casi infinitamente la funcionalidad del proyecto.
  2. Formato de proyecto legible por humanos que se guarda en un sistema de archivos, lo que simplifica el trabajo utilizando sistemas de control de versiones.
  3. Capacidad para crear pruebas sin programación y soporte js más avanzado 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, de momento las fuentes están cerradas, pero en el futuro estamos valorando la posibilidad de abrir las fuentes.

¿De qué vives?)

Junto con la versión gratuita, planeamos lanzar una versión paga del producto. Incluirá principalmente cosas que requieren un lado del servidor, por ejemplo, sincronización.

Conclusión

Nuestro proyecto avanza a pasos agigantados hacia una versión estable. Sin embargo, el producto ya se puede utilizar y los comentarios positivos de nuestros primeros usuarios son prueba de ello. Recopilamos comentarios de forma activa, porque sin una estrecha cooperación con la comunidad es imposible crear una buena herramienta. Puedes encontrarnos aquí:

Sitio web oficial

Telegram

Flojo

Facebook

Rastreador de problemas

¡Esperamos sus deseos y sugerencias!

Fuente: habr.com

Añadir un comentario