Bonjour Ă tous ! Aujourd'hui, nous souhaitons prĂ©senter Ă la communautĂ© IT notre produit â un IDE pour travailler avec des API . Certains d'entre vous nous connaissent peut-ĂȘtre dĂ©jĂ grĂące Ă . Cependant, il n'y a pas eu de revue complĂšte de l'outil, donc nous allons corriger ce regrettable oubli.

Motivation
Nous aimerions commencer par expliquer comment nous en sommes arrivés là et pourquoi nous avons décidé de créer notre propre outil pour un travail avancé avec les API. Commençons par la liste des fonctionnalités que devrait avoir un produit qu'on peut appeler « IDE pour travailler avec des API » :
- CrĂ©ation et exĂ©cution de requĂȘtes et de scripts (sĂ©quences de requĂȘtes)
- Rédaction de divers tests
- Génération de tests
- Travail avec la documentation des API, y compris l'importation de formats tels que Swagger, OpenAPI, WADL, etc.
- Mocking des requĂȘtes
- Bonne prise en charge d'un ou plusieurs langages de programmation pour l'écriture de scripts, y compris l'intégration avec des bibliothÚques populaires
- etc.
La liste peut ĂȘtre complĂ©tĂ©e selon les prĂ©fĂ©rences. Il est Ă©galement important de crĂ©er non seulement l'IDE lui-mĂȘme, mais aussi une infrastructure particuliĂšre, comme la synchronisation dans le cloud, des outils en ligne de commande, un service de surveillance en ligne, etc. Finalement, les tendances des derniĂšres annĂ©es nous dictent non seulement une fonctionnalitĂ© puissante pour l'application, mais aussi une interface agrĂ©able.
Pour qui cet outil est-il utile ? Ăvidemment, pour tous ceux qui sont d'une maniĂšre ou d'une autre liĂ©s au dĂ©veloppement et aux tests d'API â dĂ©veloppeurs et testeurs =). En effet, pour les premiers, il suffit souvent d'exĂ©cuter des requĂȘtes isolĂ©es et des scĂ©narios simples, tandis que pour les testeurs, c'est l'un des principaux outils qui, en plus, doit inclure un puissant mĂ©canisme d'Ă©criture de tests avec la possibilitĂ© de les exĂ©cuter en CI.
Ainsi, en suivant ces repÚres, nous avons commencé à créer notre produit. Voyons ce que nous avons réussi à réaliser à ce stade.
Démarrage rapide
Commençons par une premiĂšre dĂ©couverte de l'application. Vous pouvez la tĂ©lĂ©charger . Actuellement, toutes les 3 principales plateformes sont supportĂ©es â Windows, Linux, MacOS. TĂ©lĂ©chargez, installez et lancez. Lors du premier lancement, vous pouvez voir la fenĂȘtre suivante :

Cliquez sur le plus en haut de la zone de contenu pour crĂ©er votre premiĂšre requĂȘte. L'onglet de requĂȘte ressemble Ă ceci :

Examinons-le plus en dĂ©tail. L'interface de requĂȘte ressemble beaucoup Ă celle des clients REST populaires, ce qui facilite la migration depuis ces outils. Effectuons la premiĂšre requĂȘte sur l'url.

à premiÚre vue, le panneau de réponse ne semble pas non plus présenter de surprises. Cependant, je voudrais attirer votre attention sur certains points :
- Le corps de la réponse a une représentation en arbre, ce qui, d'une part, ajoute de l'information et, d'autre part, permet d'ajouter certaines fonctionnalités intéressantes que je décrirai ci-dessous.
- Il y a un onglet Assertions, qui affiche la liste des tests pour cette requĂȘte.
Comme vous pouvez le constater, notre outil peut ĂȘtre utilisĂ© comme un client REST pratique. Cependant, nous ne serions pas ici si ses capacitĂ©s se limitaient uniquement Ă l'envoi de requĂȘtes. Je vais maintenant exposer les concepts de base et les fonctionnalitĂ©s de TestMace.
Concepts de base et fonctionnalités
Noeud
Les fonctionnalitĂ©s de TestMace sont rĂ©parties en diffĂ©rents types de nĆuds. Dans l'exemple ci-dessus, nous avons dĂ©montrĂ© le fonctionnement du nĆud RequestStep. Cependant, l'application propose Ă©galement actuellement les types de nĆuds suivants :
- RequestStep. C'est un nĆud qui permet de crĂ©er une requĂȘte. En tant qu'Ă©lĂ©ment enfant, il peut n'avoir qu'un seul nĆud Assertion.
- Assertion. Ce nĆud est utilisĂ© pour Ă©crire des tests. Il ne peut ĂȘtre un nĆud enfant que pour le nĆud RequestStep.
- Folder. Permet de regrouper des nĆuds Folder et RequestStep Ă l'intĂ©rieur.
- Project. C'est le nĆud racine, créé automatiquement lors de la crĂ©ation d'un projet. Par ailleurs, il reprend les fonctionnalitĂ©s du nĆud Folder.
- Link. Lien vers un nĆud Folder ou RequestStep. Permet de rĂ©utiliser des requĂȘtes et des scĂ©narios.
- etc.
Les nĆuds sont placĂ©s dans les scratches (panneau en bas Ă gauche, utilisĂ© pour la crĂ©ation rapide de requĂȘtes « jetables ») et dans le project (panneau en haut Ă gauche), sur lequel nous allons nous attarder.
Projet
Au lancement de l'application, vous avez pu remarquer une seule ligne Project en haut à gauche. C'est la racine de l'arbre du projet. Lorsqu'un projet est lancé, un projet temporaire est créé, dont le chemin dépend de votre systÚme d'exploitation. à tout moment, vous pouvez déplacer le projet à un emplacement qui vous convient.
La principale fonction du projet est de permettre de sauvegarder les développements dans le systÚme de fichiers et de synchroniser ensuite via des systÚmes de contrÎle de versions, d'exécuter des scénarios dans CI, de réviser les modifications, etc.
Variables
Les variables sont l'un des mĂ©canismes clĂ©s de l'application. Ceux d'entre vous qui travaillent avec des outils comme TestMace auront peut-ĂȘtre dĂ©jĂ compris de quoi il s'agit. Ainsi, les variables sont un moyen de conserver des donnĂ©es communes et de communiquer entre les nĆuds. Par exemple, elles sont similaires aux variables d'environnement dans Postman ou Insomnia. Cependant, nous avons approfondi le sujet. Dans TestMace, les variables peuvent ĂȘtre dĂ©finies au niveau du nĆud. N'importe quel nĆud. Il existe Ă©galement un mĂ©canisme d'hĂ©ritage des variables des ancĂȘtres et de substitution des variables dans les descendants. De plus, il y a un certain nombre de variables intĂ©grĂ©es, dont les noms commencent par $. Voici quelques-unes d'entre elles :
$prevStepâ rĂ©fĂ©rence aux variables du nĆud prĂ©cĂ©dent$nextStepâ rĂ©fĂ©rence aux variables du nĆud suivant$parentâ idem, mais pour un ancĂȘtre$responseâ rĂ©ponse du serveur$envâ variables d'environnement actuelles$dynamicVarâ variables dynamiques, créées lors de l'exĂ©cution du scĂ©nario ou de la requĂȘte
$env â ce sont en fait des variables ordinaires au niveau du projet, mais l'ensemble des variables d'environnement change en fonction de l'environnement sĂ©lectionnĂ©.
L'accĂšs Ă une variable se fait via ${variable_name}
En tant que valeur d'une variable, il peut s'agir d'une autre variable, ou mĂȘme d'une expression complĂšte. Par exemple, en tant que variable url, on peut avoir une expression du type
http://${host}:${port}/${endpoint}.
Il convient de noter la possibilitĂ© d'assigner des variables pendant l'exĂ©cution du script. Par exemple, il est souvent nĂ©cessaire de conserver les donnĂ©es d'autorisation (token ou tout l'en-tĂȘte) qui ont Ă©tĂ© reçues du serveur aprĂšs une connexion rĂ©ussie. TestMace permet de conserver de telles donnĂ©es dans des variables dynamiques de l'un des ancĂȘtres. Pour Ă©viter les collisions avec les variables « statiques » dĂ©jĂ existantes, les variables dynamiques sont placĂ©es dans un objet sĂ©parĂ©. $dynamicVar.
Scénarios
En utilisant toutes les possibilitĂ©s mentionnĂ©es ci-dessus, vous pouvez rĂ©aliser des scĂ©narios de requĂȘtes entiers. Par exemple, crĂ©ation d'une entitĂ© -> requĂȘte d'entitĂ© -> suppression d'entitĂ©. Dans ce cas, vous pouvez utiliser un nĆud Folder pour regrouper plusieurs nĆuds RequestStep.
Autocomplétion et surlignage de la valeur de l'expression
Pour travailler efficacement avec des variables (et pas seulement), l'autocomplĂ©tion est essentielle. Bien sĂ»r, il est Ă©galement important de mettre en surbrillance la valeur de l'expression, afin de voir plus facilement Ă quoi correspond chaque variable. C'est le genre de situation oĂč il est souvent prĂ©fĂ©rable de voir une fois que d'entendre cent fois.

Il convient de noter que l'autocomplĂ©tion est mise en Ćuvre non seulement pour les variables, mais aussi, par exemple, pour les en-tĂȘtes, les valeurs de certains en-tĂȘtes (comme l'autocomplĂ©tion pour l'en-tĂȘte Content-Type), les protocoles et bien d'autres choses encore. La liste est constamment enrichie Ă mesure que l'application se dĂ©veloppe.
Annuler/Rétablir
L'annulation/rĂ©tablissement des modifications est une fonctionnalitĂ© trĂšs pratique, mais elle n'est pas toujours disponible (et les outils de travail avec l'API ne font pas exception). Cependant, nous ne faisons pas partie de ceux-lĂ !) L'annulation/rĂ©tablissement est mise en Ćuvre dans l'ensemble du projet, ce qui 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
La crĂ©ation de tests est assurĂ©e par le nĆud Assertion. L'une des principales caractĂ©ristiques est la possibilitĂ© de crĂ©er des tests sans programmation, en utilisant des Ă©diteurs intĂ©grĂ©s.
Le nĆud Assertion se compose d'un ensemble d'assertions. Chaque assertion a son propre type, et Ă l'heure actuelle, plusieurs types d'assertions existent.
Comparer des valeurs â compare simplement 2 valeurs. Plusieurs opĂ©rateurs de comparaison sont disponibles : « Ă©gal », « diffĂ©rent », « plus grand », « plus grand ou Ă©gal », « plus petit », « plus petit ou Ă©gal ».
Contient la valeur â vĂ©rifie si une sous-chaĂźne est prĂ©sente dans une chaĂźne.
XPath â vĂ©rifie qu'une valeur spĂ©cifique se trouve par sĂ©lecteur dans le XML.
Assertion JavaScript â un script arbitraire en JavaScript qui renvoie true en cas de succĂšs et false en cas d'Ă©chec.
Je tiens à souligner que seul le dernier demande des compétences en programmation, les 3 autres assertions étant créées à l'aide de l'interface graphique. Voici à quoi ressemble le dialogue de création d'une assertion de comparaison de valeurs :

La cerise sur le gùteau est la création rapide d'assertions à partir de la réponse, regardez juste ça !

Cependant, de telles assertions prĂ©sentent des limites Ă©videntes, face auxquelles vous pouvez utiliser des assertions JavaScript. Et ici, TestMace offre Ă©galement un environnement confortable avec autocomplĂ©tion, mise en surbrillance de la syntaxe et mĂȘme un analyseur statique.
Description de l'API
TestMace permet non seulement d'utiliser l'API, mais aussi de le documenter. La description elle-mĂȘme a une structure hiĂ©rarchique et s'intĂšgre harmonieusement dans le reste du projet. De plus, il est actuellement possible d'importer la description de l'API Ă partir des formats Swagger 2.0 / OpenAPI 3.0. La description ne reste pas simplement dans un Ă©tat inerte, mais s'intĂšgre Ă©troitement avec le reste du projet, notamment grĂące Ă l'autocomplĂ©tion des URLs, des en-tĂȘtes HTTP, des paramĂštres de requĂȘte et d'autres Ă©lĂ©ments, et Ă l'avenir, nous prĂ©voyons d'ajouter des tests de conformitĂ© des rĂ©ponses Ă la description de l'API.
Partage de nĆuds
Cas d'utilisation : vous voudriez partager une requĂȘte problĂ©matique ou mĂȘme un scĂ©nario entier avec un collĂšgue ou simplement l'attacher Ă un bug. TestMace couvre Ă©galement ce cas : l'application permet de sĂ©rialiser n'importe quel nĆud et mĂȘme un sous-arbre dans une URL. Un simple copier-coller et vous avez dĂ©jĂ transfĂ©rĂ© la requĂȘte vers un autre ordinateur ou projet avec facilitĂ©.
Format de stockage lisible par l'homme du projet
Ă l'heure actuelle, chaque nĆud est stockĂ© dans un fichier sĂ©parĂ© avec l'extension yml (comme dans le cas du nĆud Assertion), ou dans un dossier nommĂ© d'aprĂšs le nĆud avec un fichier index.yml Ă l'intĂ©rieur.
Voici Ă quoi ressemble par exemple le fichier de la requĂȘte que nous avons créé dans l'examen 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 1Comme vous pouvez le voir, tout est trÚs clair. Si vous le souhaitez, ce format est tout à fait confortable à éditer manuellement.
La hiĂ©rarchie des dossiers dans le systĂšme de fichiers reflĂšte exactement la hiĂ©rarchie des nĆuds dans le projet. Par exemple, un scĂ©nario comme :

Se mappent dans le systÚme de fichiers selon la structure suivante (seule la hiérarchie des dossiers est montrée, mais le principe est clair)

Ce qui facilite le processus de révision du projet.
Importation depuis Postman
AprĂšs avoir lu tout ce qui prĂ©cĂšde, certains utilisateurs voudront peut-ĂȘtre essayer (n'est-ce pas ?) le nouveau produit ou (qui sait ?) l'utiliser pleinement dans leur projet. Cependant, la migration peut ĂȘtre entravĂ©e par un grand nombre de dĂ©veloppements dĂ©jĂ rĂ©alisĂ©s dans Postman. Pour de tels cas, TestMace prend en charge l'importation de collections depuis Postman. Actuellement, l'importation sans tests est prise en charge, mais nous ne rejetons pas leur prise en charge Ă l'avenir.
Plans
J'espÚre que de nombreux lecteurs, jusqu'à ce stade, ont apprécié notre produit. Cependant, ce n'est pas tout ! Le développement du produit est en plein essor et voici quelques fonctionnalités que nous prévoyons d'ajouter prochainement.
Synchronisation Cloud
L'une des fonctionnalités les plus demandées. à l'heure actuelle, nous proposons d'utiliser des systÚmes de contrÎle de version pour la synchronisation, ce qui rend le format plus adapté à ce type de stockage. Cependant, ce flux de travail ne convient pas à tout le monde, c'est pourquoi nous prévoyons d'ajouter un mécanisme de synchronisation familier pour beaucoup à travers nos serveurs.
CLI
Comme mentionné précédemment, les produits de niveau IDE ne se passent pas des diverses intégrations avec les applications ou flux de travail existants. Le CLI est en effet nécessaire pour intégrer les tests écrits dans TestMace dans le processus d'intégration continue. Le développement du CLI est en plein cours, les premiÚres versions permettront de lancer le projet avec un simple rapport en console. Par la suite, nous prévoyons d'ajouter une sortie de rapport au format JUnit.
SystĂšme de plugins
Malgré toute la puissance de notre outil, le nombre de cas à résoudre est illimité. AprÚs tout, il existe des tùches spécifiques à chaque projet. Pour cette raison, nous prévoyons d'ajouter un SDK pour le développement de plugins, permettant à chaque développeur d'ajouter des fonctionnalités à sa convenance.
Ălargissement de la gamme de types de nĆuds
Cet ensemble de nĆuds ne couvre pas tous les cas nĂ©cessaires pour l'utilisateur. Les nĆuds qui sont prĂ©vus d'ĂȘtre ajoutĂ©s :
- NĆud Script â transforme et place des donnĂ©es en utilisant js et l'API appropriĂ©e. En utilisant ce type de nĆud, il est possible de crĂ©er des choses comme des scripts prĂ©-requĂȘte et post-requĂȘte dans Postman.
- NĆud GraphQL â support de graphql
- NĆud d'assertion personnalisĂ©e â permettra d'Ă©largir l'ensemble des assertions disponibles dans le projet
Naturellement, ce n'est pas une liste définitive, elle sera constamment mise à jour grùce à votre feedback, entre autres.
FAQ
Qu'est-ce qui vous distingue de Postman ?
- Concept de nĆuds permettant d'Ă©voluer presque indĂ©finiment les fonctionnalitĂ©s du projet
- Format lisible par l'homme pour le projet, conservé dans le systÚme de fichiers, ce qui facilite le travail avec les systÚmes de contrÎle de version
- Possibilité de créer des tests sans programmation et prise en charge avancée de js dans l'éditeur de tests (auto-complétion, analyseur statique)
- Complétion automatique avancée et surlignage de la valeur actuelle des variables
Est-ce un produit open-source?
Non, actuellement les sources sont fermées, mais nous envisageons de les rendre ouvertes à l'avenir.
Comment vivez-vous ?
Avec la version gratuite, nous prévoyons de lancer une version payante du produit. Celle-ci inclura principalement des fonctionnalités nécessitant une partie serveur, comme la synchronisation.
Conclusion
Notre projet progresse à grands pas vers une version stable. Cependant, le produit est déjà utilisable et les retours positifs de nos premiers utilisateurs en témoignent. Nous collectons activement des retours, car sans une collaboration étroite avec la communauté, il est impossible de créer un bon outil. Vous pouvez nous trouver ici :
Nous attendons avec impatience vos souhaits et suggestions !
Source : habr.com
