
Bonjour Ă tous, ici ! Il est possible que beaucoup d'entre vous nous connaissent grĂące Ă . Pour ceux qui viennent de nous rejoindre : nous dĂ©veloppons un IDE pour travailler avec l'API TestMace. La question la plus posĂ©e lors de la comparaison de TestMace avec des produits concurrents est : « En quoi ĂȘtes-vous diffĂ©rent de Postman ? ». Nous avons dĂ©cidĂ© qu'il Ă©tait temps de donner une rĂ©ponse dĂ©veloppĂ©e Ă cette question. Ci-dessous, nous avons listĂ© nos avantages par rapport Ă .
Division en nĆuds
Si vous travaillez avec Postman, vous savez que l'interface de la requĂȘte contient toutes les fonctionnalitĂ©s nĂ©cessaires. Il y a des scripts, des tests et, bien sĂ»r, les requĂȘtes elles-mĂȘmes. Cela simplifie le travail pour les dĂ©butants, mais pour de grands scĂ©narios, cette approche n'est pas flexible. Que faire si vous souhaitez crĂ©er plusieurs requĂȘtes et faire de l'agrĂ©gation dessus ? Que faire si vous voulez exĂ©cuter un script sans requĂȘte ou plusieurs scripts logiquement sĂ©parĂ©s en sĂ©rie ? Au final, il serait bon de sĂ©parer les tests des scripts utilitaires ordinaires. De plus, l'approche « ajouter toutes les fonctionnalitĂ©s dans un seul nĆud » n'est pas Ă©volutive - l'interface devient rapidement surchargĂ©e.
TestMace divise initialement toutes les fonctionnalitĂ©s en diffĂ©rents types de nĆuds. Vous voulez faire une requĂȘte ? Voici un Vous voulez Ă©crire un script ? Voici un nĆud. Besoin de tests ? Pas de problĂšme - nĆud. Ah oui, vous pouvez Ă©galement envelopper tout cela dans un nĆud. Et tout cela s'assemble facilement ensemble. Cette approche est non seulement trĂšs flexible, mais Ă©galement conforme au principe de responsabilitĂ© unique, permettant d'utiliser seulement ce dont vous avez vraiment besoin Ă l'instant. Pourquoi ai-je besoin de scripts et de tests si je veux simplement faire une requĂȘte ?
Format lisible par l'homme pour le projet
Il existe une diffĂ©rence conceptuelle entre TestMace et Postman concernant la maniĂšre de stocker. Dans Postman, toutes les requĂȘtes sont stockĂ©es quelque part dans un stockage local. Si vous devez partager des requĂȘtes entre plusieurs utilisateurs, il faut utiliser la synchronisation intĂ©grĂ©e. En rĂ©alitĂ©, c'est une approche courante, mais elle n'est pas sans dĂ©fauts. Qu'en est-il de la sĂ©curitĂ© des donnĂ©es ? La politique de certaines entreprises peut ne pas permettre de stocker des donnĂ©es chez des tiers. Cependant, nous pensons que TestMace peut offrir quelque chose de mieux ! Et cet amĂ©lioration, c'est le « format lisible par l'homme du projet ».
Commençons par le fait qu'il existe en principe une entitĂ© "projet" dans TestMace. L'application a Ă©tĂ© initialement conçue pour stocker des projets dans des systĂšmes de contrĂŽle de version : l'arborescence du projet est pratiquement projetĂ©e un Ă un sur la structure de fichiers, le format de stockage utilisĂ© est le yaml (sans crochets ni virgules superflus), et la reprĂ©sentation des fichiers de chaque nĆud est dĂ©taillĂ©e dans la documentation avec des commentaires. Mais dans la plupart des cas, vous ne serez pas amenĂ© Ă y jeter un Ćil â tous les noms de champs ont des dĂ©signations logiques.
Que cela apporte-t-il Ă l'utilisateur ? Cela permet de modifier trĂšs flexiblement le flux de travail de l'Ă©quipe, en utilisant des approches familiĂšres. Par exemple, les dĂ©veloppeurs peuvent stocker le projet dans le mĂȘme rĂ©fĂ©rentiel que le backend. Dans les branches, en plus de modifier directement la base de code, le dĂ©veloppeur peut corriger les scĂ©narios de requĂȘtes existants et les tests. AprĂšs avoir validĂ© les modifications dans le rĂ©fĂ©rentiel (git, svn, mercurial â ce que vous prĂ©fĂ©rez), CI (votre outil prĂ©fĂ©rĂ©, non imposĂ© par personne) lance notre utilitaire en ligne de commande , et le rapport gĂ©nĂ©rĂ© aprĂšs exĂ©cution (par exemple, au format junit, qui est Ă©galement pris en charge par testmace-cli) est envoyĂ© au systĂšme correspondant. De plus, la question mentionnĂ©e ci-dessus concernant la sĂ©curitĂ© n'est plus un problĂšme.
Comme vous pouvez le voir, TestMace n'impose pas son écosystÚme et sa paradigme. Au lieu de cela, il s'intÚgre facilement dans des processus déjà établis.
Variables dynamiques
TestMace suit le concept no-code : si un problĂšme peut ĂȘtre rĂ©solu sans utiliser de code, nous essayons de donner cette possibilitĂ©. Travailler avec des variables est exactement cette fonctionnalitĂ© oĂč, dans la plupart des cas, on peut se passer de programmation.
Exemple : nous avons reçu une réponse du serveur, et nous souhaitons sauvegarder une partie de la réponse dans une variable. Dans Postman, nous aurions écrit dans le script de test (ce qui est en soi étrange) quelque chose comme :
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", jsonData.data);Mais à notre avis, écrire un script pour un scénario aussi simple et souvent utilisé semble excessif. C'est pourquoi dans TestMace, il est possible d'assigner une partie de la réponse à une variable en utilisant l'interface graphique. Regardez comme c'est simple :

Et maintenant, Ă chaque requĂȘte, cette variable dynamique sera mise Ă jour. Mais vous pourriez contester cela en argumentant que l'approche de Postman est plus flexible et permet non seulement de faire une affectation, mais Ă©galement d'exĂ©cuter un certain prĂ©traitement. Voici comment modifier l'exemple prĂ©cĂ©dent :
var jsonData = JSON.parse(responseBody);
postman.setEnvironmentVariable("data", CryptoJS.MD5(jsonData.data));Eh bien, pour cela, TestMace dispose d un nĆud qui couvre ce scĂ©nario. Pour reproduire le cas prĂ©cĂ©dent, mais dĂ©jĂ dans l'exĂ©cution de TestMace, il est nĂ©cessaire de crĂ©er un nĆud script aprĂšs la requĂȘte et d'utiliser le code suivant comme script :
const data = tm.currentNode.prev.response.body.data;
tm.currentNode.parent.setDynamicVar('data', crypto.MD5(data));Comme vous pouvez le voir, la composition des nĆuds a encore Ă©tĂ© utile ici. Et pour un cas aussi simple que celui dĂ©crit ci-dessus, vous pouvez mĂȘme simplement affecter l'expression ${crypto.MD5($response.data)} Ă une variable créée via l'interface graphique !
Création de tests via l'IU
Postman permet de crĂ©er des tests en Ă©crivant des scripts (dans le cas de Postman, c'est du JavaScript). Cette approche prĂ©sente de nombreux avantages : flexibilitĂ© presque illimitĂ©e, disponibilitĂ© de solutions prĂȘtes Ă l'emploi, etc.
Cependant, la réalité est souvent telle (ce n'est pas nous, c'est la vie) que le testeur n'a pas de compétences en programmation, et l'équipe aimerait apporter de la valeur immédiatement. Pour de tels cas, dans le cadre du concept no-code, TestMace permet de créer des tests simples via l'interface graphique, sans avoir besoin d'écrire des scripts. Voici, par exemple, à quoi ressemble le processus de création d'un test qui compare des valeurs pour l'égalité :

Cependant, la crĂ©ation de tests dans l'Ă©diteur graphique n'annule pas la possibilitĂ© . Ici, toutes les mĂȘmes bibliothĂšques que dans le nĆud script, et pour Ă©crire des tests.
PossibilitĂ© de lancer un scĂ©nario existant via un lien (nĆud Link)
Il se prĂ©sente souvent des situations oĂč une certaine requĂȘte ou mĂȘme un scĂ©nario entier doit ĂȘtre exĂ©cutĂ© plusieurs fois dans diffĂ©rentes parties du projet. Un exemple de telles requĂȘtes pourrait ĂȘtre une authentification personnalisĂ©e multi-Ă©tapes, la mise en Ă©tat de l'environnement sur l'Ă©tat souhaitĂ©, etc. En gros, pour parler en termes de langages de programmation, nous aimerions avoir des fonctions rĂ©utilisables dans diffĂ©rentes parties de l'application. Dans TestMace, cette fonction est remplie par NĆud. Son utilisation est trĂšs simple :
1) crĂ©ez une requĂȘte ou un scĂ©nario
2) crĂ©ez un nĆud de type Lien
3) dans les paramÚtres, indiquez le lien vers le scénario créé à l'étape précédente
Dans une version plus avancĂ©e, vous pouvez spĂ©cifier quelles variables dynamiques du scĂ©nario doivent ĂȘtre transmises au niveau supĂ©rieur par rapport au lien. Cela semble compliquĂ© ? Supposons que nous ayons créé un Dossier nommĂ© create-post, Ă l'intĂ©rieur duquel une variable dynamique est assignĂ©e Ă ce nĆud postId. Maintenant, dans le nĆud Lien create-post-link , vous pouvez explicitement indiquer que la variable postId doit ĂȘtre assignĂ©e au parent create-post-link. Ce mĂ©canisme (encore une fois, en termes de programmeur) peut ĂȘtre utilisĂ© pour renvoyer un rĂ©sultat de la « fonction ». En gros, c'est gĂ©nial, DRY Ă son meilleur et aucune ligne de code n'a Ă©tĂ© blessĂ©e.

Concernant Postman, la demande d'ajout de la rĂ©utilisation des requĂȘtes , et il semble mĂȘme que indiquent que ce problĂšme est en cours de traitement. Dans sa forme actuelle, Postman a bien sĂ»r la possibilitĂ© de changer le flux d'exĂ©cution, ce qui, en thĂ©orie, permet de rĂ©aliser un comportement similaire, mais c'est plutĂŽt un hack sale qu'une vĂ©ritable approche fonctionnelle.
Autres différences
- Un contrĂŽle accru sur la portĂ©e des variables. La plus petite portĂ©e dans laquelle une variable peut ĂȘtre dĂ©finie dans Postman est la collection. TestMace permet de dĂ©finir des variables pour n'importe quelle requĂȘte ou dossier. Dans Postman, le partage de collection permet d'exporter uniquement des collections, tandis que dans TestMace, le partage fonctionne pour n'importe quel nĆud.
- TestMace prend en charge , qui peuvent par dĂ©faut ĂȘtre ajoutĂ©s aux requĂȘtes enfants. Postman a quelque chose Ă ce sujet , et cela a mĂȘme Ă©tĂ© fermĂ©, mais comme solution, il est proposĂ© de⊠. Dans TestMace, tout cela est configurĂ© via l'interface graphique et il est possible de dĂ©sactiver les en-tĂȘtes hĂ©ritĂ©s dans des descendants spĂ©cifiques.
- Annuler/RĂ©tablir. Cela fonctionne non seulement lors de l'Ă©dition des nĆuds, mais Ă©galement lors du dĂ©placement, de la suppression, du renommage et d'autres opĂ©rations modifiant la structure du projet.
- Les fichiers joints aux requĂȘtes deviennent une partie intĂ©grante du projet et sont stockĂ©s avec celui-ci, tout en se synchronisant parfaitement, contrairement Ă Postman. (Oui, il n'est plus nĂ©cessaire de sĂ©lectionner manuellement les fichiers Ă chaque exĂ©cution et de les transmettre aux collĂšgues dans des archives.)
Des fonctionnalités qui arrivent bientÎt
Nous n'avons pas pu résister à la tentation de lever un coin du voile sur les prochaines sorties, surtout lorsque les fonctionnalités sont vraiment séduisantes et déjà en cours de finition avant la sortie. Alors, accueillons-les.
Fonctions
Comme vous le savez, pour générer des valeurs dans Postman, on utilise ce qu'on appelle des variables dynamiques. et la grande majorité des fonctions servent à générer des valeurs fictives. Par exemple, pour générer un e-mail aléatoire, il faut écrire :
{{$randomEmail}}Cependant, Ă©tant donnĂ© qu'il s'agit de variables (mĂȘme dynamiques), elles ne peuvent pas ĂȘtre utilisĂ©es comme des fonctions : elles ne sont pas paramĂ©trables, donc il est impossible de prendre le hachage d'une chaĂźne.
Dans TestMace, nous prĂ©voyons d'ajouter des fonctions « honnĂȘtes ». Directement Ă l'intĂ©rieur de ${}, il sera possible non seulement d'accĂ©der Ă une variable, mais aussi d'appeler une fonction. Ainsi, si nous voulons gĂ©nĂ©rer le fameux e-mail fictif, nous n'aurons qu'Ă Ă©crire
${faker.internet.email()}En plus d'ĂȘtre une fonction, il est intĂ©ressant de noter qu'il est possible d'appeler une mĂ©thode d'objet. Et au lieu d'une grande liste plate de variables dynamiques, nous avons un ensemble d'objets logiquement regroupĂ©s.
Et que faire si nous voulons calculer le hachage d'une chaĂźne ? C'est facile !
${crypto.MD5($dynamicVar.data)}On peut noter qu'il est mĂȘme possible de passer des variables en tant que paramĂštres ! Ă ce stade, le lecteur curieux pourrait suspecter quelque chose d'Ă©trangeâŠ
Utilisation de JavaScript dans les expressions
⊠Et avec raison ! Lorsque les exigences des fonctions ont Ă©tĂ© formulĂ©es, nous avons soudain rĂ©alisĂ© qu'il Ă©tait nĂ©cessaire d'Ă©crire un JavaScript valide dans les expressions. Donc maintenant, vous ĂȘtes libre d'Ă©crire des expressions du genre :
${1 + '' + crypto.MD5('asdf')}Et tout cela sans scripts, directement dans les champs d'entrée !
En ce qui concerne Postman, il n'est possible d'utiliser que des variables, et lorsqu'on essaie d'écrire une expression correcte, le validateur se plaint et refuse de l'évaluer.
![]()
Autocomplétion avancée
à l'heure actuelle, TestMace dispose d'une autocomplétion standard qui ressemble à ceci :

Ici, en plus de la chaßne autocomplétée, il est indiqué à quoi cette chaßne appartient. Ce mécanisme ne fonctionne que dans les expressions entourées d'accolades ${}.
Comme vous pouvez le constater, des marqueurs visuels ont Ă©tĂ© ajoutĂ©s, indiquant le type de variable (par exemple, chaĂźne, nombre, tableau, etc.). Il est Ă©galement possible de modifier les modes de saisie automatique (par exemple, on peut choisir l'autocomplĂ©tion avec des variables ou des en-tĂȘtes). Mais mĂȘme cela n'est pas le point le plus important !
Tout d'abord, l'autocomplĂ©tion fonctionne mĂȘme dans les expressions (lĂ oĂč c'est possible). VoilĂ Ă quoi cela ressemble :

Et deuxiÚmement, l'autocomplétion est maintenant également disponible dans les scripts. Regardez comment cela fonctionne !

Il est inutile de comparer cette fonctionnalitĂ© Ă Postman â lĂ , l'autocomplĂ©tion est limitĂ©e Ă des listes statiques de variables, d'en-tĂȘtes et de leurs valeurs (corrigez-moi si j'ai oubliĂ© quelque chose). Les scripts ne sont pas autocomplĂ©tĂ©s đ
Conclusion
Octobre marque un an depuis le début du développement de notre produit. Pendant ce temps, nous avons pu réaliser beaucoup de choses et, sur certains paramÚtres, nous avons rattrapé nos concurrents. Quoi qu'il en soit, notre objectif est de créer un outil véritablement pratique pour travailler avec les API. Il nous reste encore beaucoup de travail à faire, voici un plan approximatif pour le développement de notre projet dans l'année à venir : .
Votre retour nous permettra de mieux nous orienter dans l'abondance de fonctionnalitĂ©s, et votre soutien nous donne la force et la confiance que nous faisons quelque chose d'utile. Aujourd'hui est un jour important pour notre projet â le jour de la publication de TestMace sur . S'il vous plaĂźt, soutenez notre projet, cela compte beaucoup pour nous. D'autant plus que sur notre page PH aujourd'hui, il y a une offre allĂ©chante, et elle est limitĂ©e
Source : habr.com
