Bonjour Ă tous! Aujourd'hui, nous voulons prĂ©senter notre produit, l'IDE pour travailler avec l'API TestMace , Ă la communautĂ© informatique . Peut-ĂȘtre que certains d'entre vous nous connaissent dĂ©jĂ grĂące Ă des articles prĂ©cĂ©dents . Cependant, il n'y a pas eu d'examen complet de l'outil, nous Ă©liminons donc cet inconvĂ©nient gĂȘnant.

La motivation
Je voudrais commencer par comment, en fait, nous sommes arrivés à une telle vie et avons décidé de classer notre outil pour un travail avancé avec l'API. Commençons par la liste des fonctionnalités qu'un produit devrait avoir, à propos desquelles, à notre avis, nous pouvons dire qu'il s'agit d'un "IDE pour travailler avec des API":
- CrĂ©ation et exĂ©cution de requĂȘtes et de scripts (sĂ©quences de requĂȘtes)
- Ăcriture de diffĂ©rents types de tests
- Génération de test
- Travailler avec des descriptions d'API, y compris l'importation Ă partir de formats tels que Swagger, OpenAPI, WADL, etc.
- Demande de moquerie
- Bon support pour un ou plusieurs langages de script, y compris l'intégration avec des bibliothÚques populaires
- etc.
La liste peut ĂȘtre complĂ©tĂ©e au goĂ»t. De plus, il est important de crĂ©er non seulement l'IDE lui-mĂȘme, mais aussi une certaine infrastructure, telle que la synchronisation du cloud, des outils de ligne de commande, un service de surveillance en ligne, etc. Au final, les tendances de ces derniĂšres annĂ©es nous dictent non seulement la puissante fonctionnalitĂ© de l'application, mais aussi sa belle interface.
Qui a besoin d'un outil similaire? De toute Ă©vidence, tous ceux qui sont au moins en quelque sorte liĂ©s au dĂ©veloppement et aux tests de l'API sont des dĂ©veloppeurs et des testeurs =). De plus, si pour les premiers il suffit souvent de complĂ©ter des requĂȘtes simples et des scripts simples, alors pour les testeurs, c'est 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 propre produit. Voyons ce que nous avons obtenu à ce stade.
Démarrage rapide
Commençons par la 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, MacOS. TĂ©lĂ©chargez, installez, exĂ©cutez. Au premier dĂ©marrage, vous pouvez voir la fenĂȘtre suivante:

Cliquez sur le signe plus en haut de la zone de contenu pour créer la premiÚre demande. L'onglet de demande est le suivant:

ArrĂȘtons-nous dessus plus en dĂ©tail. L'interface de demande est trĂšs similaire Ă l'interface des clients de repos populaires, ce qui facilite la migration Ă partir de ces outils. Faisons la premiĂšre demande d'URL https://next.json-generator.com/api/json/get/NJv-NT-U8

En général, à premiÚre vue, le panneau de réponse ne réserve pas non plus de surprises. Cependant, j'attirerai votre attention sur certains points:
- Le corps de la réponse a une représentation arborescente, qui, d'une part, ajoute de l'informative et, d'autre part, vous permet d'ajouter quelques fonctionnalités intéressantes sur lesquelles ci-dessous
- Il y a un onglet Assertions qui affiche une liste de tests pour cette demande.
Comme vous pouvez le voir, notre outil peut ĂȘtre utilisĂ© comme un client de repos pratique. Cependant, nous ne nous serions pas rĂ©unis ici si ses capacitĂ©s se limitaient Ă l'envoi de demandes. Ensuite, je dĂ©crirai les concepts de base et les fonctionnalitĂ©s de TestMace.
Concepts et fonctionnalités clés
NĆud
FonctionnalitĂ© TestMace est divisĂ© 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:
- RequestStep. Il s'agit du nĆud avec lequel vous pouvez crĂ©er une requĂȘte. En tant qu'enfant, il ne peut avoir qu'un seul nĆud d'assertion.
- Assertion. Le nĆud est utilisĂ© pour Ă©crire des tests. Il peut s'agir d'un nĆud enfant uniquement pour le nĆud RequestStep.
- Dossier Vous permet de regrouper les nĆuds Folder et RequestStep en vous-mĂȘme.
- Projet Il s'agit du nĆud racine créé automatiquement lors de la crĂ©ation du projet. Le reste rĂ©pĂšte la fonctionnalitĂ© du nĆud de dossier.
- Lien Lien vers le nĆud Folder ou RequestStep. Permet la rĂ©utilisation des requĂȘtes et des scripts.
- etc.
Les nĆuds sont situĂ©s dans des rayures (le panneau en bas Ă gauche, permet de crĂ©er rapidement des requĂȘtes "ponctuelles") et en projet (le panneau en haut Ă gauche), sur lequel nous nous attarderons plus en dĂ©tail.
Projet
Lorsque vous démarrez l'application, vous pouvez remarquer 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épend de votre systÚme d'exploitation. à tout moment, vous pouvez transférer le projet dans un endroit qui vous convient.
Le but principal du projet est la possibilité d'économiser du temps de fonctionnement dans le systÚme de fichiers et de poursuivre la synchronisation via des systÚmes de contrÎle de version, l'exécution de scripts dans CI, la révision des 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 ont peut-ĂȘtre dĂ©jĂ compris de quoi il s'agit. Les variables sont donc un moyen de prĂ©server les donnĂ©es partagĂ©es et la communication entre les nĆuds. Par exemple, les variables d'environnement dans Postman ou Insomnia sont analogues. Cependant, 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. Tout. Il existe Ă©galement un mĂ©canisme d'hĂ©ritage des variables des ancĂȘtres et des variables qui se chevauchent chez les descendants. En plus de cela, il existe un certain nombre de variables intĂ©grĂ©es, les noms des variables intĂ©grĂ©es commencent par $
. En voici quelques uns:
$prevStep
- rĂ©fĂ©rence aux variables du nĆud prĂ©cĂ©dent$nextStep
- rĂ©fĂ©rence aux variables du nĆud suivant$parent
est le mĂȘme, mais uniquement 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
est essentiellement les variables ordinaires du niveau Projet du nĆud, cependant, l'ensemble des variables d'environnement varie en fonction de l'environnement que vous sĂ©lectionnez.
La variable est accessible via ${variable_name}
La valeur d'une variable peut ĂȘtre une autre variable, voire une expression entiĂšre. Par exemple, une variable url peut ĂȘtre une expression du formulaire
http://${host}:${port}/${endpoint}
.
SĂ©parĂ©ment, il convient de noter la possibilitĂ© d'assigner des variables lors de l'exĂ©cution du script. Par exemple, il est souvent nĂ©cessaire d'enregistrer les donnĂ©es d'autorisation (jeton ou en-tĂȘte entier) provenant du serveur aprĂšs une connexion rĂ©ussie. TestMace vous permet d'enregistrer ces donnĂ©es dans des variables dynamiques de l'un des ancĂȘtres. Afin d'Ă©viter les collisions avec des variables "statiques" existantes, les variables dynamiques sont dĂ©placĂ©es vers un objet $dynamicVar
distinct.
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, par exemple, vous pouvez utiliser le nĆud Dossier pour regrouper plusieurs nĆuds RequestStep.
Compléter automatiquement et mettre en évidence la valeur d'expression
Pour un travail pratique avec des variables (et pas seulement), l'auto-complĂ©tion est nĂ©cessaire. Et bien sĂ»r, mettre en Ă©vidence la valeur de l'expression, afin qu'il soit plus facile et plus pratique de clarifier Ă quoi correspond telle ou telle variable. Voici juste le cas oĂč il vaut mieux voir une fois qu'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 avec la croissance de l'application.
Annuler / refaire
Annuler / refaire des modifications est une chose trĂšs pratique, mais pour une raison quelconque, elle est loin d'ĂȘtre implĂ©mentĂ©e partout (et les outils pour travailler avec l'API ne font pas exception). Mais nous ne sommes pas de ceux-lĂ !) Undo / redo est implĂ©mentĂ© dans le cadre de l'ensemble du projet, ce qui vous permet d'annuler non seulement la modification 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 test
Le nĆud Assertion est responsable de la crĂ©ation des tests. L'une des principales caractĂ©ristiques est la possibilitĂ© de crĂ©er des tests sans programmation, Ă l'aide d'Ă©diteurs intĂ©grĂ©s.
Un nĆud d'assertion consiste en un ensemble d'assertions (dĂ©clarations). Chaque assertion a son propre type, il existe actuellement plusieurs types d'assertions
Comparer les valeurs - compare seulement 2 valeurs. Il existe plusieurs opérateurs de comparaison pour égal, différent, supérieur à , supérieur ou égal à , inférieur à , inférieur ou égal à .
Contains value - Vérifie si une sous-chaßne est dans une chaßne.
XPath - Vérifie qu'une certaine valeur se trouve dans le sélecteur en XML.
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 seul ce dernier nécessite des compétences en programmation de la part de l'utilisateur, les 3 assertions restantes sont créées à l'aide de l'interface graphique. Ici, par exemple, ressemble à la boßte de dialogue pour créer une assertion de comparaison de valeurs:

La cerise sur le gĂąteau est la crĂ©ation rapide d'assertions Ă partir de la rĂ©ponse, jetez-y un coup d'Ćil!

Cependant, ces assertions ont des limites Ă©videntes que vous pouvez utiliser l'assertion javascript pour entrer en collision. Et ici, TestMace fournit Ă©galement un environnement confortable avec auto-complĂ©tion, coloration syntaxique et mĂȘme avec un analyseur statique.
Description de l'API
TestMace vous permet non seulement d'utiliser l'API, mais Ă©galement 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, pour le moment, il est possible d'importer des descriptions d'API Ă partir des formats Swagger 2.0 / OpenAPI 3.0. La description elle-mĂȘme n'est pas seulement un poids mort, mais elle s'intĂšgre Ă©troitement avec le reste du projet, en particulier, la saisie automatique des URL, des en-tĂȘtes HTTP, des paramĂštres de requĂȘte et plus est disponible, et Ă l'avenir, nous prĂ©voyons d'ajouter des tests pour faire correspondre la rĂ©ponse Ă la description de l'API.
Noeud de partage
Cas: souhaitez-vous partager une requĂȘte problĂ©matique ou mĂȘme un script entier Ă 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 sous-arbre dans l'URL. Copiez-collez et vous pouvez facilement transfĂ©rer la demande vers une autre machine ou un autre projet.
Ă l'heure actuelle, chaque nĆud est stockĂ© dans un fichier distinct avec l'extension yml (comme c'est le cas avec le nĆud Assertion), ou dans un dossier contenant le nom du nĆud et le fichier index.yml.
Voici Ă quoi ressemble un exemple de fichier avec la demande que nous avons faite 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 1
Comme vous pouvez le voir, tout est trĂšs clair. Si vous le souhaitez, un tel format est assez confortable Ă modifier manuellement.
La hiĂ©rarchie des dossiers dans le systĂšme de fichiers rĂ©pĂšte complĂštement la hiĂ©rarchie des nĆuds du projet. Par exemple, un scĂ©nario de la forme:

Il correspond à la structure suivante dans le systÚme de fichiers (seule la hiérarchie des dossiers est affichée, mais l'essentiel est clair)

Ce qui facilite le processus d'examen du projet.
Importer depuis Postman
AprĂšs avoir lu tout ce qui prĂ©cĂšde, certains utilisateurs voudront essayer (non?) Un nouveau produit ou (qu'est-ce qui ne plaisante pas!) Pour s'engager pleinement dans leur projet. Cependant, la migration peut ĂȘtre stoppĂ©e par un grand nombre de dĂ©veloppements dans le mĂȘme facteur. Dans de tels cas, TestMace prend en charge l'importation de collections Ă partir de Postman. Pour le moment, l'importation sans tests est prise en charge, mais Ă l'avenir, nous n'excluons pas leur prise en charge.
Plans
J'espÚre que beaucoup de ceux qui ont lu jusqu'à présent ont aimé 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 dans le cloud
L'une des fonctionnalités les plus demandées. Pour le moment, nous proposons d'utiliser des systÚmes de contrÎle de version comme synchronisation, dont nous rendons le format plus convivial pour ce type de stockage. Cependant, ce flux de travail ne convient pas à tout le monde, il est donc prévu d'ajouter le 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 workflows existants. La CLI est exactement ce qu'il faut pour intégrer des tests écrits dans TestMace dans le processus d'intégration continue. Le travail sur la CLI bat son plein, dans les versions précédentes, il y aura un lancement de projet avec un simple rapport de console. à l'avenir, il est prévu d'ajouter la sortie du rapport au format JUnit.
SystĂšme de plugin
Malgré toute la puissance de notre outil, l'ensemble des cas à résoudre est illimité. Au final, il y a des tùches spécifiques à un projet particulier. C'est pourquoi à l'avenir, nous prévoyons d'ajouter un SDK pour le développement de plug-ins, et chaque développeur pourra ajouter des fonctionnalités à son goût.
Ălargir l'assortiment de types de nĆuds
Cet ensemble de nĆuds ne couvre pas tous les cas requis par l'utilisateur. Noeuds Ă ajouter:
- Noeud 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 faire des choses comme des scripts de prĂ©-demande et de post-demande dans Postman.
- NĆud GraphQL - Prise en charge de Graphql
- Noeud d'assertion personnalisé - vous permet d'élargir l'ensemble des assertions disponibles dans le projet
Naturellement, il ne s'agit pas d'une liste définitive, elle sera constamment mise à jour en raison, entre autres, de vos commentaires.
FAQ
En quoi ĂȘtes-vous diffĂ©rent de Postman?
- Le concept de nĆuds, qui vous permet de faire Ă©voluer presque Ă l'infini la fonctionnalitĂ© du projet
- Format de projet lisible par l'homme avec enregistrement dans le systĂšme de fichiers, ce qui simplifie le travail Ă l'aide de systĂšmes de contrĂŽle de version
- La possibilité de créer des tests sans programmation et un support js plus avancé dans l'éditeur de test (auto-complétion, analyseur statique)
- Auto-complétion avancée et mise en évidence de la valeur actuelle des variables
S'agit-il d'un produit open source?
Non, pour le moment les sources sont fermées, mais à l'avenir nous envisageons la possibilité d'ouvrir les sources
Pour quoi vivez-vous?)
ParallÚlement à la version gratuite, nous prévoyons de publier une version payante du produit. Il comprendra principalement des éléments qui nécessitent du cÎté serveur, par exemple, la synchronisation.
Conclusion
Notre projet Ă©volue Ă pas de gĂ©ant vers une version stable. Cependant, maintenant le produit peut ĂȘtre utilisĂ©, et les retours positifs de nos premiers utilisateurs en sont la preuve. Nous collectons activement des commentaires, car sans une coopĂ©ration Ă©troite avec la communautĂ©, il est impossible de construire un bon outil. Vous pouvez nous trouver ici:
Site officiel
Télégramme
Mou
Facebook
Suivi des problĂšmes
Nous nous réjouissons de vos souhaits et suggestions!