TestMace — un puissant IDE pour travailler avec des API.

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

TestMace — un puissant IDE pour travailler avec des API.

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 sur notre site. 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 :

TestMace — un puissant IDE pour travailler avec des API.

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 :

TestMace — un puissant IDE pour travailler avec des API.

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. https://next.json-generator.com/api/json/get/NJv-NT-U8

TestMace — un puissant IDE pour travailler avec des API.

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

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

TestMace — un puissant IDE pour travailler avec des API.

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.

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

  2. Contient la valeur — vĂ©rifie si une sous-chaĂźne est prĂ©sente dans une chaĂźne.

  3. XPath — vĂ©rifie qu'une valeur spĂ©cifique se trouve par sĂ©lecteur dans le XML.

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

TestMace — un puissant IDE pour travailler avec des API.

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

TestMace — un puissant IDE pour travailler avec des API.

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 1

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

TestMace — un puissant IDE pour travailler avec des API.

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)

TestMace — un puissant IDE pour travailler avec des API.

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 ?

  1. Concept de nƓuds permettant d'Ă©voluer presque indĂ©finiment les fonctionnalitĂ©s du projet
  2. 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
  3. 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)
  4. 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 :

Site officiel

Telegram

Slack

Facebook

Suivi des problĂšmes

Nous attendons avec impatience vos souhaits et suggestions !

Source : habr.com

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster