TestMace - un IDE puissant pour travailler avec des API

Salut tout le monde! Aujourd'hui, nous souhaitons présenter au public informatique notre produit - un IDE pour travailler avec des API Masse d'essai. Peut-être que certains d'entre vous nous connaissent déjà grâce à articles précédents. Cependant, il n’y a pas eu de révision complète de l’outil, c’est pourquoi nous comblons cette malheureuse lacune.

TestMace - un IDE puissant pour travailler avec des API

Motivation

Je voudrais commencer par comment, en fait, nous sommes arrivés à cette vie et avons décidé de créer notre propre outil pour un travail avancé avec l'API. Commençons par une liste de fonctionnalités qu'un produit devrait avoir, dont, à notre avis, nous pouvons dire qu'il s'agit d'un « IDE pour travailler avec des API » :

  • Créer et exécuter des requêtes et des scripts (séquences de requêtes)
  • Rédaction de différents types de tests
  • Génération de tests
  • Travailler avec des descriptions d'API, y compris l'importation à partir de formats tels que Swagger, OpenAPI, WADL, etc.
  • Demandes moqueuses
  • Bonne prise en charge d'un ou plusieurs langages pour l'écriture de scripts, y compris l'intégration avec les bibliothèques populaires
  • etc.

La liste peut être élargie selon vos goûts. De plus, il est important de créer non seulement l'IDE lui-même, mais également une certaine infrastructure, telle que la synchronisation cloud, les outils de ligne de commande, le service de surveillance en ligne, etc. Au final, les tendances de ces dernières années nous dictent non seulement les fonctionnalités puissantes de l'application, mais aussi son interface agréable.

Qui a besoin d’un tel outil ? Évidemment, tous ceux qui sont au moins d'une manière ou d'une autre liés au développement et aux tests d'API sont des développeurs et des testeurs =). De plus, si pour les premiers il suffit souvent d'exécuter des requêtes uniques et des scripts simples, alors pour les testeurs, il s'agit de l'un des principaux outils, qui, entre autres, devrait inclure un mécanisme puissant pour écrire des tests avec la possibilité de les exécuter dans CI.

Ainsi, en suivant ces directives, nous avons commencé à créer notre produit. Voyons ce que nous avons réalisé à ce stade.

Départ rapide

Commençons par une première connaissance de l'application. Vous pouvez le télécharger sur notre site internet. À l'heure actuelle, les 3 principales plates-formes sont prises en charge : Windows, Linux et MacOS. Téléchargez, installez, lancez. Lorsque vous le lancez pour la première fois, vous pouvez voir la fenêtre suivante :

TestMace - un IDE puissant pour travailler avec des API

Cliquez sur le signe plus en haut de la zone de contenu pour créer votre première demande. L'onglet Requête ressemble à ceci :

TestMace - un IDE puissant pour travailler avec des API

Regardons cela plus en détail. L'interface de requête est très similaire à l'interface des clients de repos populaires, ce qui facilite la migration à partir d'outils similaires. Faisons la première requête à l'url https://next.json-generator.com/api/json/get/NJv-NT-U8

TestMace - un IDE puissant pour travailler avec des API

En général, à première vue, le panneau de réponses ne réserve pas non plus de surprises. Cependant, je voudrais attirer votre attention sur certains points :

  1. Le corps de la réponse est représenté sous la forme d'un arbre, qui d'une part ajoute du contenu informatif et d'autre part permet d'ajouter quelques fonctionnalités intéressantes dont ci-dessous
  2. Il y a un onglet Assertions, qui affiche une liste de tests pour une requête donnée

Comme vous pouvez le constater, notre outil peut être utilisé comme client de repos pratique. Cependant, nous n’en serions pas là si ses capacités se limitaient uniquement à l’envoi de requêtes. Ensuite, je décrirai les concepts de base et les fonctionnalités de TestMace.

Concepts et fonctionnalités de base

Узел

La fonctionnalité TestMace est divisée en différents types de nœuds. Dans l'exemple ci-dessus, nous avons démontré le fonctionnement du nœud RequestStep. Cependant, les types de nœuds suivants sont désormais également disponibles dans l'application :

  • Étape de demande. Il s'agit du nœud via lequel vous pouvez créer une demande. Il ne peut avoir qu’un seul nœud Assertion comme élément enfant.
  • Affirmation. Le nœud est utilisé pour écrire des tests. Ne peut être qu'un nœud enfant du nœud RequestStep.
  • Dossier. Vous permet de regrouper les nœuds Folder et RequestStep en eux-mêmes.
  • Projet. Il s'agit du nœud racine, créé automatiquement lors de la création du projet. Sinon, il répète la fonctionnalité du nœud Dossier.
  • Lien. Lien vers le nœud Dossier ou RequestStep. Vous permet de réutiliser des requêtes et des scripts.
  • etc.

Les nœuds se situent dans les scratchs (le panneau en bas à gauche, utilisé pour créer rapidement des requêtes « ponctuelles ») et dans les projets (le panneau en haut à gauche), sur lesquels nous reviendrons plus en détail.

Projet

Lorsque vous lancez l'application, vous remarquerez peut-être une seule ligne de projet dans le coin supérieur gauche. Il s'agit de la racine de l'arborescence du projet. Lorsque vous démarrez un projet, un projet temporaire est créé, dont le chemin d'accès dépend de votre système d'exploitation. À tout moment, vous pouvez déplacer le projet vers un endroit qui vous convient.

L'objectif principal du projet est la possibilité de sauvegarder les développements dans le système de fichiers et de les synchroniser davantage via des systèmes de contrôle de version, d'exécuter des scripts dans CI, de réviser les modifications, etc.

Variables

Les variables sont l'un des mécanismes clés d'une application. Ceux d'entre vous qui travaillent avec des outils comme TestMace ont peut-être déjà une idée de ce dont nous parlons. Ainsi, les variables sont un moyen de stocker des données communes et de communiquer entre les nœuds. Un analogue, par exemple, sont les variables d'environnement dans Postman ou Insomnia. Mais nous sommes allés plus loin et avons développé le sujet. Dans TestMace, les variables peuvent être définies au niveau du nœud. N'importe lequel. Il existe également un mécanisme permettant d'hériter des variables des ancêtres et de chevaucher les variables des descendants. De plus, il existe un certain nombre de variables intégrées, les noms des variables intégrées commencent par $. En voici quelques unes:

  • $prevStep — lien vers les variables du nœud précédent
  • $nextStep — lien vers les variables du nœud suivant
  • $parent - la même chose, mais seulement pour l'ancêtre
  • $response - réponse du serveur
  • $env - variables d'environnement actuelles
  • $dynamicVar - variables dynamiques créées lors de l'exécution d'un script ou d'une requête

$env - il s'agit essentiellement de variables ordinaires au niveau du nœud du projet, cependant, l'ensemble des variables d'environnement change en fonction de l'environnement sélectionné.

La variable est accessible via ${variable_name}
La valeur d'une variable peut être une autre variable, voire une expression entière. Par exemple, la variable url peut être une expression telle que
http://${host}:${port}/${endpoint}.

Par ailleurs, il convient de noter la possibilité d'attribuer des variables lors de l'exécution du script. Par exemple, il est souvent nécessaire de sauvegarder les données d'autorisation (un jeton ou l'intégralité de l'en-tête) provenant du serveur après une connexion réussie. TestMace vous permet de sauvegarder ces données dans des variables dynamiques de l'un des ancêtres. Afin d'éviter les collisions avec des variables « statiques » déjà existantes, les variables dynamiques sont placées dans un objet séparé $dynamicVar.

scénarios

En utilisant toutes les fonctionnalités ci-dessus, vous pouvez exécuter des scripts de requête entiers. Par exemple, créer une entité -> interroger une entité -> supprimer une entité. Dans ce cas, vous pouvez par exemple utiliser le nœud Folder pour regrouper plusieurs nœuds RequestStep.

Auto-complétion et mise en évidence des expressions

Pour un travail pratique avec des variables (et pas seulement), la saisie semi-automatique est nécessaire. Et bien sûr, mettre en évidence la valeur d’une expression pour qu’il soit plus facile et plus pratique de clarifier à quoi correspond une variable particulière. C’est exactement le cas lorsqu’il vaut mieux voir une fois que d’entendre cent fois :

TestMace - un IDE puissant pour travailler avec des API

Il convient de noter que l'auto-complétion est implémentée non seulement pour les variables, mais aussi, par exemple, pour les en-têtes, les valeurs de certains en-têtes (par exemple, l'auto-complétion pour l'en-tête Content-Type), les protocoles et bien plus encore. La liste est constamment mise à jour à mesure que l'application se développe.

Défaire refaire

Annuler/rétablir des modifications est une chose très pratique, mais pour une raison quelconque, elle n'est pas implémentée partout (et les outils permettant de travailler avec les API ne font pas exception). Mais nous n'en faisons pas partie !) Nous avons implémenté l'annulation/la restauration tout au long du projet, ce qui vous permet d'annuler non seulement l'édition d'un nœud spécifique, mais aussi sa création, sa suppression, son déplacement, etc. Les opérations les plus critiques nécessitent une confirmation.

Création de tests

Le nœud Assertion est responsable de la création des tests. L'une des principales fonctionnalités est la possibilité de créer des tests sans programmation, à l'aide d'éditeurs intégrés.

Un nœud Assertion se compose d’un ensemble d’assertions. Chaque assertion a son propre type ; il existe actuellement plusieurs types d'assertions

  1. Comparer les valeurs - compare simplement 2 valeurs. Il existe plusieurs opérateurs de comparaison : égal, non égal, supérieur à, supérieur ou égal à, inférieur à, inférieur ou égal à.

  2. Contient une valeur : vérifie l'occurrence d'une sous-chaîne dans une chaîne.

  3. XPath - vérifie que le sélecteur en XML contient une certaine valeur.

  4. L'assertion JavaScript est un script javascript arbitraire qui renvoie vrai en cas de succès et faux en cas d'échec.

Je note que seule la dernière nécessite des compétences en programmation de la part de l'utilisateur, les 3 autres assertions sont créées à l'aide d'une interface graphique. Voici, par exemple, à quoi ressemble la boîte de dialogue permettant de créer une assertion de comparaison de valeurs :

TestMace - un IDE puissant pour travailler avec des API

La cerise sur le gâteau est la création rapide d’assertions à partir des réponses, il suffit de regarder !

TestMace - un IDE puissant pour travailler avec des API

Cependant, de telles assertions ont des limites évidentes, que vous souhaiterez peut-être utiliser une assertion javascript pour surmonter. Et ici, TestMace fournit également un environnement confortable avec la saisie semi-automatique, la coloration syntaxique et même un analyseur statique.

Description de l'API

TestMace vous permet non seulement d'utiliser l'API, mais aussi de la documenter. De plus, la description elle-même a également une structure hiérarchique et s'intègre organiquement dans le reste du projet. De plus, il est actuellement possible d'importer des descriptions d'API depuis les formats Swagger 2.0 / OpenAPI 3.0. La description elle-même n'est pas seulement un poids mort, mais est étroitement intégrée au reste du projet, en particulier, la saisie semi-automatique des URL, des en-têtes HTTP, des paramètres de requête, etc. est disponible, et à l'avenir, nous prévoyons d'ajouter des tests pour la conformité de la réponse avec la description de l'API.

Nœud de partage

Cas : vous souhaiteriez partager une requête problématique voire un script entier avec un collègue ou simplement le joindre à un bug. TestMace couvre également ce cas : l'application vous permet de sérialiser n'importe quel nœud et même un sous-arbre dans une URL. Copiez-collez et vous pourrez facilement transférer la demande vers une autre machine ou un autre projet.

Format de stockage de projet lisible par l'homme

Pour le moment, chaque nœud est stocké dans un fichier séparé avec l'extension yml (comme c'est le cas avec le nœud Assertion), ou dans un dossier avec le nom du nœud et le fichier index.yml qu'il contient.
Par exemple, voici à quoi ressemble le fichier de requête que nous avons effectué dans la revue ci-dessus :

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

Comme vous pouvez le constater, tout est très clair. Si vous le souhaitez, ce format peut être facilement modifié manuellement.

La hiérarchie des dossiers dans le système de fichiers répète entièrement la hiérarchie des nœuds du projet. Par exemple, un script comme :

TestMace - un IDE puissant pour travailler avec des API

Mappe le système de fichiers sur la structure suivante (seule la hiérarchie des dossiers est affichée, mais l'essence est claire)

TestMace - un IDE puissant pour travailler avec des API

Cela facilite le processus d’examen des projets.

Importer depuis Postman

Après avoir lu tout ce qui précède, certains utilisateurs voudront essayer (n'est-ce pas ?) un nouveau produit ou (qu'est-ce qui ne plaisante pas !) l'utiliser complètement dans leur projet. Cependant, la migration peut être stoppée par un grand nombre de développements chez le même facteur. Dans de tels cas, TestMace prend en charge l'importation de collections depuis Postman. Pour le moment, les importations sans tests sont prises en charge, mais nous n'excluons pas de les prendre en charge à l'avenir.

Plans

J'espère que beaucoup de ceux qui ont lu jusqu'à présent ont apprécié notre produit. Mais ce n’est pas tout ! Le travail sur le produit bat son plein et voici quelques fonctionnalités que nous prévoyons d'ajouter prochainement.

Synchronisation cloud

Une des fonctionnalités les plus demandées. Nous proposons actuellement d'utiliser des systèmes de contrôle de version pour la synchronisation, dont nous rendons le format plus convivial pour ce type de stockage. Cependant, ce flux de travail ne convient pas à tout le monde, nous prévoyons donc d'ajouter un mécanisme de synchronisation familier à beaucoup via nos serveurs.

CLI

Comme mentionné ci-dessus, les produits de niveau IDE ne peuvent pas se passer de toutes sortes d'intégrations avec des applications ou des flux de travail existants. La CLI est exactement ce dont vous avez besoin pour intégrer les tests écrits dans TestMace dans le processus d'intégration continue. Les travaux sur la CLI battent leur plein ; les premières versions lanceront le projet avec un simple rapport de console. À l'avenir, nous prévoyons d'ajouter une sortie de rapport au format JUnit.

Système de plugins

Malgré toute la puissance de notre outil, l’ensemble des cas nécessitant des solutions est illimité. Après tout, certaines tâches sont spécifiques à un projet particulier. C'est pourquoi, à l'avenir, nous prévoyons d'ajouter un SDK pour développer des plugins et chaque développeur pourra ajouter des fonctionnalités à sa guise.

Élargir la gamme de types de nœuds

Cet ensemble de nœuds ne couvre pas tous les cas requis par l'utilisateur. Nœuds dont l'ajout est prévu :

  • Nœud de script - convertit et place les données à l'aide de js et de l'API correspondante. En utilisant ce type de nœud, vous pouvez effectuer des tâches telles que des scripts de pré-demande et de post-demande dans Postman.
  • Nœud GraphQL - prise en charge de graphql
  • Nœud d'assertion personnalisé - vous permettra d'étendre l'ensemble des assertions existantes dans le projet
    Bien entendu, il ne s’agit pas d’une liste définitive ; elle sera constamment mise à jour grâce, entre autres, à vos commentaires.

QFP

En quoi êtes-vous différent de Postman ?

  1. Le concept de nœuds, qui vous permet d'adapter presque à l'infini les fonctionnalités du projet
  2. Format de projet lisible par l'homme avec enregistrement dans un système de fichiers, ce qui simplifie le travail à l'aide de systèmes de contrôle de version
  3. Possibilité de créer des tests sans programmation et support js plus avancé dans l'éditeur de tests (autocomplétion, analyseur statique)
  4. Auto-complétion avancée et mise en évidence de la valeur actuelle des variables

Est-ce un produit open source ?

Non, pour le moment les sources sont fermées, mais à l'avenir nous envisageons la possibilité d'ouvrir les sources

De quoi vis-tu ?)

Parallèlement à la version gratuite, nous prévoyons de publier une version payante du produit. Cela inclura principalement des éléments qui nécessitent un côté serveur, par exemple la synchronisation.

Conclusion

Notre projet avance à pas de géant vers une version stable. Cependant, le produit est déjà utilisable et les retours positifs de nos premiers utilisateurs en sont la preuve. Nous collectons activement les commentaires, car sans une coopération étroite avec la communauté, il est impossible de créer un bon outil. Vous pouvez nous trouver ici:

site officiel

Telegram

Slack

Facebook

Suivi des problèmes

Nous attendons avec impatience vos souhaits et suggestions !

Source: habr.com

Ajouter un commentaire