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

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 Actuellement, les 3 principales plateformes sont prises en charge. Windows, LinuxSous macOS, tĂ©lĂ©chargez, installez et lancez le programme. Au premier lancement, la fenĂȘtre suivante peut s'afficher :

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 :

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

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 :
- 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
- 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 :

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
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 à .
Contient une valeur : vérifie l'occurrence d'une sous-chaßne dans une chaßne.
XPath - vérifie que le sélecteur en XML contient une certaine valeur.
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 :

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

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 1Comme 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 :

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

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 ?
- Le concept de nĆuds, qui vous permet d'adapter presque Ă l'infini les fonctionnalitĂ©s du projet
- 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
- Possibilité de créer des tests sans programmation et support js plus avancé dans l'éditeur de tests (autocomplétion, analyseur statique)
- 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:
Nous attendons avec impatience vos souhaits et suggestions !
Source: habr.com
