TestMace - un puissant IDE pour travailler avec l'API

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:


  1. 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
  2. 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


  1. 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 à.


  2. Contains value - Vérifie si une sous-chaßne est dans une chaßne.


  3. XPath - Vérifie qu'une certaine valeur se trouve dans le sélecteur en XML.


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


Format de stockage de projet lisible par l'homme


À 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?


  1. Le concept de nƓuds, qui vous permet de faire Ă©voluer presque Ă  l'infini la fonctionnalitĂ© du projet
  2. 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
  3. 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)
  4. 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!

Source: https://habr.com/ru/post/fr458372/


All Articles