¡Hola a todos! Hoy queremos presentar al público de TI nuestro producto: un 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
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í:
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.
En general, a primera vista, el panel de respuestas tampoco ofrece sorpresas. Sin embargo, me gustaría llamar su atención sobre algunos puntos:
- 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.
- 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:
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
-
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.
-
Contiene valor: comprueba la aparición de una subcadena en una cadena.
-
XPath: comprueba que el selector en XML contenga un valor determinado.
-
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:
La guinda del pastel es la creación rápida de afirmaciones a partir de respuestas, ¡solo míralo!
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:
Asigna el sistema de archivos a la siguiente estructura (solo se muestra la jerarquía de carpetas, pero la esencia es clara)
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?
- El concepto de nodos, que permite escalar casi infinitamente la funcionalidad del proyecto.
- 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.
- Capacidad para crear pruebas sin programación y soporte js más avanzado en el editor de pruebas (autocompletado, analizador estático)
- 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í:
¡Esperamos sus deseos y sugerencias!
Fuente: habr.com