
Bonjour à tous. Nous sortons progressivement de l'ombre et continuons notre série d'articles sur notre produit. AprÚs l'article d'introduction, nous avons reçu de nombreux retours (principalement positifs), des suggestions et des rapports de bugs. Aujourd'hui, nous allons vous montrer de quoi il s'agit et vous pourrez vraiment apprécier certaines fonctionnalités de notre application. Pour une immersion complÚte, je vous conseille de vous référer à notre documentation à l'adresse . Alors, c'est parti !
Installation
Commençons par une banalitĂ©. L'application est disponible et rĂ©ellement testable sur trois plateformes â Linux, Windows, MacOS. Vous pouvez tĂ©lĂ©charger l'installateur pour le systĂšme d'exploitation qui vous intĂ©resse Ă . Pour les utilisateurs de Linux, il est possible d'installer . Nous espĂ©rons vivement que bientĂŽt nous pourrons Ă©galement nous occuper du Microsoft Store et de l'App Store ( mais en a-t-on vraiment besoin ? Qu'en pensez-vous ?).
Scénario de test
Pour notre essai, nous avons choisi le scénario standard suivant :
- nous allons nous connecter : utilisateur â admin, mot de passe â password
- ajouter un nouvel enregistrement
- vérifier l'ajout correct de l'enregistrement
Nous allons tester sur . C'est un simple , parfaitement adapté pour tester des applications similaires. Nous avons simplement ajouté une authentification par jeton sur tous les itinéraires du json-server et créé une méthode de connexion pour obtenir ce jeton. Nous allons avancer progressivement, améliorant notre projet petit à petit.
Création de projet et tentative de création d'entité sans autorisation
Pour commencer, crĂ©ons un nouveau projet (Fichier->Nouveau projet). Si vous lancez l'application pour la premiĂšre fois, le nouveau projet s'ouvrira automatiquement. Commençons par essayer d'envoyer une demande de crĂ©ation d'un nouvel enregistrement (peut-ĂȘtre que la crĂ©ation d'enregistrements est possible sans autorisation). Dans le menu contextuel du nĆud Projet, sĂ©lectionnez les options Ajouter un nĆud -> RequestStep. Pour le nom du nĆud, dĂ©finissons create-post. En consĂ©quence, un nouveau nĆud sera créé dans l'arborescence et l'onglet de ce nĆud s'ouvrira. Nous allons dĂ©finir les paramĂštres de la demande suivants :
- Type de demande : POST
- url :
- Corps de la demande : json avec la valeur
{"title": "Nouvel article de démarrage rapide testmace"}
Si vous avez bien fait les choses, l'interface ressemblera Ă ceci :

Cependant, si nous essayons d'exécuter la demande, le serveur renverra un code 401 et sans autorisation, nous ne pourrons rien faire sur ce serveur. Bon, c'est plutÎt prévisible).
Ajoutons une demande d'autorisation
Comme mentionnĂ© prĂ©cĂ©demment, nous avons un point de terminaison POST /login, qui accepte comme corps de demande un json de ce type : {"username": "", "password": ""}, oĂč username et password (encore une fois, de l'introduction ci-dessus) ont des valeurs admin et password en rĂ©ponse, ce point de terminaison renvoie un json de type {"token": ""}. Utilisons-le pour l'authentification. CrĂ©ons un RequestStep nĆud nommĂ© login, en tant que parent sera Projet nĆud. Utilisez le glisser-dĂ©poser pour dĂ©placer ce nĆud dans l'arbre au-dessus du nĆud create-post. Attribuons les paramĂštres suivants Ă la requĂȘte nouvellement créée :
- Type de demande : POST
- url :
- Corps de la demande : json avec la valeur
{"username": "admin", "password": "password"}
ExĂ©cutons la requĂȘte et obtiendrons un code deux cents avec le token dans la rĂ©ponse. Comme ceci :

Refactoring : éliminons la duplication de domaine
Actuellement, les requĂȘtes ne sont pas liĂ©es en un seul scĂ©nario. Mais ce n'est pas le seul inconvĂ©nient. Si l'on y regarde de plus prĂšs, on peut remarquer que le domaine est dupliquĂ© dans les deux requĂȘtes. Ce n'est pas bien. Il est temps de refactoriser cette partie du futur scĂ©nario et les variables nous aideront.
Dans un premier temps, les variables remplissent le mĂȘme rĂŽle que dans d'autres outils et langages de programmation similaires : Ă©liminer les duplications, amĂ©liorer la lisibilitĂ©, etc. Vous pouvez en savoir plus sur les variables dans . Dans ce cas, nous aurons besoin de variables utilisateur.
DĂ©finissons au niveau Project une variable pour le nĆud domain avec la valeur https://testmace-quick-start.herokuapp.com. Pour cela, il est nĂ©cessaire
- d'ouvrir l'onglet de ce nĆud et de cliquer sur l'icĂŽne de la calculatrice en haut Ă droite
- Cliquez sur + AJOUTER VARIABLE
- Entrez le nom et la valeur de la variable
Dans notre cas, la boßte de dialogue avec la variable ajoutée ressemblera à ceci :

OK. Maintenant, grĂące Ă l'hĂ©ritage, nous pouvons utiliser cette variable dans les descendants Ă n'importe quel niveau d'imbrication. Dans notre cas, ce sont les nĆuds login et create-post. Pour utiliser la variable dans le champ de texte, il faut Ă©crire ${}. Par exemple, l'url pour la connexion se transforme en ${domain}/login, par consĂ©quent pour create-post le nĆud, l'url ressemblera Ă ${domain}/posts.
Ainsi, suivant le principe DRY, nous avons légÚrement amélioré le scénario.
Enregistrons le token dans une variable
Puisque nous parlons de variables, dĂ©veloppons un peu ce sujet. Actuellement, en cas de connexion rĂ©ussie, nous recevons du serveur un token d'authentification, qui sera nĂ©cessaire pour les requĂȘtes suivantes. Enregistrons ce token dans une variable. Comme la valeur de la variable sera dĂ©terminĂ©e au moment de l'exĂ©cution du scĂ©nario, utilisons pour cela un mĂ©canisme spĂ©cial â .
Tout d'abord, exĂ©cutons une requĂȘte pour la connexion. Dans l'onglet Parsed Pour rĂ©pondre, survolez le jeton et dans le menu contextuel (appelĂ© par un clic droit ou en appuyant sur le bouton âŠ), sĂ©lectionnez l'option Attribuer Ă la variable. Une boĂźte de dialogue apparaĂźtra avec les champs suivants :
- Chemin â quelle partie de la rĂ©ponse est utilisĂ©e (dans notre cas, c'est
body.token) - Valeur actuelle â quelle valeur se trouve Ă l'emplacement spĂ©cifiĂ© par le chemin (dans notre cas, c'est la valeur du jeton)
- Nom de la variable â le nom de la variable dans laquelle Valeur actuelle sera enregistrĂ©e. Dans notre cas, ce sera
token - NĆud â dans lequel des ancĂȘtres la variable sera créée Nom de la variable. Choisissons Projet
La boĂźte de dialogue remplie ressemble Ă ceci :

Maintenant, Ă chaque exĂ©cution du nĆud login la variable dynamique token sera mise Ă jour avec la nouvelle valeur de la rĂ©ponse. Et cette variable sera stockĂ©e dans Projet le nĆud et, grĂące Ă l'hĂ©ritage, sera accessible aux descendants.
Pour accéder aux variables dynamiques, il est nécessaire d'utiliser $dynamicVar. Par exemple, pour accéder au jeton enregistré, il faut appeler ${$dynamicVar.token}.
Transmettons le jeton d'autorisation dans les requĂȘtes
Lors des Ă©tapes prĂ©cĂ©dentes, nous avons obtenu le jeton d'autorisation et tout ce que nous avons Ă faire est d'ajouter un en-tĂȘte Authorization avec la valeur Bearer Ă toutes les requĂȘtes nĂ©cessitant une autorisation, y compris dans create-post. Il existe plusieurs façons de le faire :
- Copier manuellement le jeton et ajouter l'en-tĂȘte d'autorisation dans les requĂȘtes concernĂ©es. Cette mĂ©thode fonctionne, mais son utilisation est limitĂ©e aux requĂȘtes de type 'fait et jetĂ©'. Elle n'est pas adaptĂ©e Ă l'exĂ©cution multiple de scĂ©narios.
- Utiliser la fonctionnalité .
- Utiliser
L'utilisation de la seconde mĂ©thode semble Ă©vidente, mais dans le contexte de cet article, cette approche... n'est pas intĂ©ressante. En effet : le mĂ©canisme des autorisations devrait vous ĂȘtre familier d'autres outils (mĂȘme si nous avons des Ă©lĂ©ments comme ) et ne devrait pas poser de problĂšme.
En revanche, les en-tĂȘtes par dĂ©faut ! Pour faire simple, les en-tĂȘtes par dĂ©faut sont des en-tĂȘtes HTTP hĂ©ritĂ©s des ancĂȘtres qui sont automatiquement ajoutĂ©s Ă la requĂȘte, sauf s'ils sont explicitement dĂ©sactivĂ©s. GrĂące Ă cette fonctionnalitĂ©, par exemple, on peut mettre en Ćuvre une autorisation personnalisĂ©e ou simplement Ă©viter les duplications dans les scĂ©narios. Utilisons cette fonctionnalitĂ© pour transmettre le jeton dans les en-tĂȘtes.
Nous avons prudemment sauvegardĂ© le jeton dans une variable dynamique $dynamicVar.token au niveau du nĆud Project. Il reste Ă faire ce qui suit :
- DĂ©finir l'en-tĂȘte par dĂ©faut
Authorizationavec la valeurBearer ${$dynamicVar.token}au niveau du nĆud Project. Pour cela, dans l'interface du nĆud Project, il faut ouvrir la boĂźte de dialogue des en-tĂȘtes par dĂ©faut (bouton Headers en haut Ă droite) et ajouter l'en-tĂȘte correspondant. La boĂźte de dialogue avec les valeurs remplies ressemblera Ă ceci :

- DĂ©sactiver cet en-tĂȘte dans la requĂȘte de login. Cela est comprĂ©hensible : au moment de la connexion, nous n'avons pas encore de jeton, et c'est justement avec cette requĂȘte que nous allons le dĂ©finir. Par consĂ©quent, dans l'interface de la requĂȘte de login, dans l'onglet Headers dans la zone Inherited nous dĂ©cochons l'option de l'en-tĂȘte Authorization.
C'est tout. Maintenant, l'en-tĂȘte d'autorisation sera ajoutĂ© Ă toutes les requĂȘtes descendant du nĆud Project, sauf pour le nĆud de login. Ainsi, Ă ce stade, nous avons dĂ©jĂ un scĂ©nario prĂȘt et il ne nous reste plus qu'Ă le lancer. Le lancement du scĂ©nario peut se faire en sĂ©lectionnant l'Ă©lĂ©ment ExĂ©cution dans le menu contextuel du nĆud Project.
Vérifions la validité de la création du post
à ce stade, notre scénario peut se connecter, et en utilisant le jeton d'autorisation, créer un post. Cependant, nous devons nous assurer que le nouveau post a un nom correct. Il s'agit donc de faire les choses suivantes :
- Envoyer une requĂȘte pour obtenir le post par id,
- Vérifier que le nom retourné par le serveur correspond au nom donné lors de la création du post
Examinons la premiĂšre Ă©tape. Ătant donnĂ© que la valeur de l'id est dĂ©terminĂ©e pendant l'exĂ©cution du script, il est nĂ©cessaire de crĂ©er une variable dynamique (appelons-la postId) Ă partir du nĆud create-post au niveau du nĆud Project. Comment faire cela, nous le savons dĂ©jĂ , il suffit de se rĂ©fĂ©rer Ă la section Enregistrons le token dans une variable. Il ne reste plus qu'Ă crĂ©er une requĂȘte pour obtenir le post avec cet id. Pour cela, crĂ©ons un RequestStep get-post avec les paramĂštres suivants :
- Type de requĂȘte : GET
- URL : ${domain}/posts/${$dynamicVar.postId}
Pour rĂ©aliser la deuxiĂšme Ă©tape, nous devons nous familiariser avec le nĆud. Le nĆud Assertion est un nĆud qui permet d'Ă©crire des vĂ©rifications pour certaines requĂȘtes. Chaque nĆud Assertion peut contenir plusieurs assertions (vĂ©rifications). Vous pourrez en savoir plus sur tous les types d'assertions dans notre . Nous allons utiliser Comparer assertion avec l'opĂ©rateur Ă©gal. Il existe plusieurs maniĂšres de crĂ©er des assertions :
- Long. Manually create an Assertion node from the context menu of the RequestStep node. In the created Assertion node, add the desired assertion and fill in the fields.
- Quick. Create an Assertion node along with the assertion from the response of the RequestStep node using the context menu.
We will use the second method. Hereâs how it will look for our case.

For those who didn't understand, here's what happens:
- Make a request in the node. get-post
- Dans l'onglet Parsed In the response, call the context menu and select Create assertion -> Comparer -> Equal
Congratulations, we have created our first test! Simple, isnât it? Now you can run the scenario fully and enjoy the result. There's just a bit left to refactor and extract title into a separate variable. But we will leave that to you as homework)
Conclusion
In this guide, we created a full-fledged scenario and reviewed some features of our product. Of course, we didnât use all the functionality, and in the following articles, we will provide a detailed overview of TestMace's capabilities. Stay tuned for updates!
P.S. For those who are too lazy to reproduce all the steps, we have kindly recorded with the project from the article. You can open it using Fichier -> Open project and select the Project folder.
Source : habr.com

