{"id":54167,"date":"2019-12-19T00:00:00","date_gmt":"2019-12-18T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/testmace-bystryj-start"},"modified":"2020-02-18T14:02:08","modified_gmt":"2020-02-18T11:02:08","slug":"testmace-bystryj-start","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/news\/testmace-bystryj-start","title":{"rendered":"TestMace. D\u00e9marrage rapide","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"TestMace. D\u00e9marrage rapide\" src=\"\/wp-content\/uploads\/2019\/12\/ca19545f1cc06814a69a6a3e6d9f3a5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Bonjour \u00e0 tous. Nous sortons progressivement de l'ombre et continuons notre s\u00e9rie d'articles sur notre produit. Apr\u00e8s <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458372\/\">pr\u00e9c\u00e9dent<\/a><\/noindex> l'article d'introduction, nous avons re\u00e7u de nombreux retours (principalement positifs), des suggestions et des rapports de bugs. Aujourd'hui, nous allons vous montrer <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">TestMace<\/a><\/noindex> de quoi il s'agit et vous pourrez vraiment appr\u00e9cier certaines fonctionnalit\u00e9s de notre application. Pour une immersion compl\u00e8te, je vous conseille de vous r\u00e9f\u00e9rer \u00e0 notre documentation \u00e0 l'adresse <noindex><a rel=\"nofollow\" href=\"http:\/\/docs-ru.testmace.com\">http:\/\/docs-ru.testmace.com<\/a><\/noindex>. Alors, c'est parti ! <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"ustanovka\">Installation<\/h1>\n<p><\/p>\n<p>Commen\u00e7ons par une banalit\u00e9. L'application est disponible et r\u00e9ellement testable sur trois plateformes \u2013 Linux, Windows, MacOS. Vous pouvez t\u00e9l\u00e9charger l'installateur pour le syst\u00e8me d'exploitation qui vous int\u00e9resse \u00e0 <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">notre site<\/a><\/noindex>. Pour les utilisateurs de Linux, il est possible d'installer <noindex><a rel=\"nofollow\" href=\"https:\/\/snapcraft.io\/testmace\">un paquet snap<\/a><\/noindex>. Nous esp\u00e9rons vivement que bient\u00f4t nous pourrons \u00e9galement nous occuper du Microsoft Store et de l'App Store ( mais en a-t-on vraiment besoin ? Qu'en pensez-vous ?).<\/p>\n<p><\/p>\n<h1 id=\"podopytnyy-scenariy\">Sc\u00e9nario de test<\/h1>\n<p><\/p>\n<p>Pour notre essai, nous avons choisi le sc\u00e9nario standard suivant :<\/p>\n<p><\/p>\n<ul>\n<li>nous allons nous connecter : utilisateur \u2013 admin, mot de passe \u2013 password<\/li>\n<li>ajouter un nouvel enregistrement<\/li>\n<li>v\u00e9rifier l'ajout correct de l'enregistrement<\/li>\n<\/ul>\n<p><\/p>\n<p>Nous allons tester sur <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace-quick-start.herokuapp.com\/\">https:\/\/testmace-quick-start.herokuapp.com\/<\/a><\/noindex>. C'est un simple <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/typicode\/json-server\">json-server<\/a><\/noindex>, parfaitement adapt\u00e9 pour tester des applications similaires. Nous avons simplement ajout\u00e9 une authentification par jeton sur tous les itin\u00e9raires du json-server et cr\u00e9\u00e9 une m\u00e9thode de connexion pour obtenir ce jeton. Nous allons avancer progressivement, am\u00e9liorant notre projet petit \u00e0 petit.<\/p>\n<p><\/p>\n<h2 id=\"sozdanie-proekta-i-popytka-sozdat-suschnost-bez-avtorizacii\">Cr\u00e9ation de projet et tentative de cr\u00e9ation d'entit\u00e9 sans autorisation<\/h2>\n<p><\/p>\n<p>Pour commencer, cr\u00e9ons un nouveau projet (<strong>Fichier<\/strong>-&gt;<strong>Nouveau projet<\/strong>). Si vous lancez l'application pour la premi\u00e8re fois, le nouveau projet s'ouvrira automatiquement. Commen\u00e7ons par essayer d'envoyer une demande de cr\u00e9ation d'un nouvel enregistrement (peut-\u00eatre que la cr\u00e9ation d'enregistrements est possible sans autorisation). Dans le menu contextuel du n\u0153ud Projet, s\u00e9lectionnez les options <strong>Ajouter un n\u0153ud<\/strong> -&gt; <strong>RequestStep<\/strong>. Pour le nom du n\u0153ud, d\u00e9finissons <strong>create-post<\/strong>. En cons\u00e9quence, un nouveau n\u0153ud sera cr\u00e9\u00e9 dans l'arborescence et l'onglet de ce n\u0153ud s'ouvrira. Nous allons d\u00e9finir les param\u00e8tres de la demande suivants :<\/p>\n<p><\/p>\n<ul>\n<li>Type de demande : POST<\/li>\n<li>url : <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace-quick-start.herokuapp.com\/posts\">https:\/\/testmace-quick-start.herokuapp.com\/posts<\/a><\/noindex><\/li>\n<li>Corps de la demande : json avec la valeur <code>{\"title\": \"Nouvel article de d\u00e9marrage rapide testmace\"}<\/code><br \/>\nSi vous avez bien fait les choses, l'interface ressemblera \u00e0 ceci :<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. D\u00e9marrage rapide\" src=\"\/wp-content\/uploads\/2019\/12\/a5c81dc4977dd73a4975643bf8ced3da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Cependant, si nous essayons d'ex\u00e9cuter la demande, le serveur renverra un code 401 et sans autorisation, nous ne pourrons rien faire sur ce serveur. Bon, c'est plut\u00f4t pr\u00e9visible).<\/p>\n<p><\/p>\n<h2 id=\"dobavlyaem-zapros-na-avtorizaciyu\">Ajoutons une demande d'autorisation<\/h2>\n<p><\/p>\n<p>Comme mentionn\u00e9 pr\u00e9c\u00e9demment, nous avons un point de terminaison POST <code>\/login<\/code>, qui accepte comme corps de demande un json de ce type : <code>{\"username\": \"\", \"password\": \"\"}<\/code>, o\u00f9 <code>username<\/code> et <code>password<\/code> (encore une fois, de l'introduction ci-dessus) ont des valeurs <code>admin<\/code> et <code>password<\/code> en r\u00e9ponse, ce point de terminaison renvoie un json de type <code>{\"token\": \"\"}<\/code>. Utilisons-le pour l'authentification. Cr\u00e9ons un <strong>RequestStep<\/strong> n\u0153ud nomm\u00e9 <strong>login<\/strong>, en tant que parent sera <strong>Projet<\/strong> n\u0153ud. Utilisez le glisser-d\u00e9poser pour d\u00e9placer ce n\u0153ud dans l'arbre au-dessus du n\u0153ud <strong>create-post<\/strong>. Attribuons les param\u00e8tres suivants \u00e0 la requ\u00eate nouvellement cr\u00e9\u00e9e :<\/p>\n<p><\/p>\n<ul>\n<li>Type de demande : POST<\/li>\n<li>url : <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace-quick-start.herokuapp.com\/login\">https:\/\/testmace-quick-start.herokuapp.com\/login<\/a><\/noindex><\/li>\n<li>Corps de la demande : json avec la valeur <code>{\"username\": \"admin\", \"password\": \"password\"}<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Ex\u00e9cutons la requ\u00eate et obtiendrons un code deux cents avec le token dans la r\u00e9ponse. Comme ceci :<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. D\u00e9marrage rapide\" src=\"\/wp-content\/uploads\/2019\/12\/222b2a0b965b4c1135b5b62c0b7424ba.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<h2 id=\"refaktoring-ubiraem-dublirovanie-domena\">Refactoring : \u00e9liminons la duplication de domaine<\/h2>\n<p><\/p>\n<p>Actuellement, les requ\u00eates ne sont pas li\u00e9es en un seul sc\u00e9nario. Mais ce n'est pas le seul inconv\u00e9nient. Si l'on y regarde de plus pr\u00e8s, on peut remarquer que le domaine est dupliqu\u00e9 dans les deux requ\u00eates. Ce n'est pas bien. Il est temps de refactoriser cette partie du futur sc\u00e9nario et les variables nous aideront.<\/p>\n<p><\/p>\n<p>Dans un premier temps, les variables remplissent le m\u00eame r\u00f4le que dans d'autres outils et langages de programmation similaires : \u00e9liminer les duplications, am\u00e9liorer la lisibilit\u00e9, etc. Vous pouvez en savoir plus sur les variables dans <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/user-variables\">notre documentation<\/a><\/noindex>. Dans ce cas, nous aurons besoin de variables utilisateur. <\/p>\n<p><\/p>\n<p>D\u00e9finissons au niveau Project une variable pour le n\u0153ud <code>domain<\/code> avec la valeur <code>https:\/\/testmace-quick-start.herokuapp.com<\/code>. Pour cela, il est n\u00e9cessaire<\/p>\n<p><\/p>\n<ul>\n<li>d'ouvrir l'onglet de ce n\u0153ud et de cliquer sur l'ic\u00f4ne de la calculatrice en haut \u00e0 droite<\/li>\n<li>Cliquez sur <strong>+ AJOUTER VARIABLE<\/strong><\/li>\n<li>Entrez le nom et la valeur de la variable<br \/>\nDans notre cas, la bo\u00eete de dialogue avec la variable ajout\u00e9e ressemblera \u00e0 ceci :<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. D\u00e9marrage rapide\" src=\"\/wp-content\/uploads\/2019\/12\/071ac6dca2c5a49b78b11719fae5f650.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OK. Maintenant, gr\u00e2ce \u00e0 l'h\u00e9ritage, nous pouvons utiliser cette variable dans les descendants \u00e0 n'importe quel niveau d'imbrication. Dans notre cas, ce sont les n\u0153uds <strong>login<\/strong> et <strong>create-post<\/strong>. Pour utiliser la variable dans le champ de texte, il faut \u00e9crire <code>${}<\/code>. Par exemple, l'url pour la connexion se transforme en <code>${domain}\/login<\/code>, par cons\u00e9quent pour <strong>create-post<\/strong> le n\u0153ud, l'url ressemblera \u00e0 <code>${domain}\/posts<\/code>.<\/p>\n<p><\/p>\n<p>Ainsi, suivant le principe DRY, nous avons l\u00e9g\u00e8rement am\u00e9lior\u00e9 le sc\u00e9nario.<\/p>\n<p><\/p>\n<h2 id=\"sohranyaem-token-v-peremennuyu\">Enregistrons le token dans une variable<\/h2>\n<p><\/p>\n<p>Puisque nous parlons de variables, d\u00e9veloppons un peu ce sujet. Actuellement, en cas de connexion r\u00e9ussie, nous recevons du serveur un token d'authentification, qui sera n\u00e9cessaire pour les requ\u00eates suivantes. Enregistrons ce token dans une variable. Comme la valeur de la variable sera d\u00e9termin\u00e9e au moment de l'ex\u00e9cution du sc\u00e9nario, utilisons pour cela un m\u00e9canisme sp\u00e9cial \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/user-variables\/dynamic-variables\">des variables dynamiques<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Tout d'abord, ex\u00e9cutons une requ\u00eate pour la connexion. Dans l'onglet <strong>Parsed<\/strong> Pour r\u00e9pondre, survolez le jeton et dans le menu contextuel (appel\u00e9 soit avec le bouton droit de la souris, soit en appuyant sur le bouton &#8230;), s\u00e9lectionnez l'option. <strong>Attribuer \u00e0 la variable<\/strong>. Une bo\u00eete de dialogue appara\u00eetra avec les champs suivants :<\/p>\n<p><\/p>\n<ul>\n<li><strong>Chemin<\/strong> \u2014 quelle partie de la r\u00e9ponse est utilis\u00e9e (dans notre cas, c'est <code>body.token<\/code>)<\/li>\n<li><strong>Valeur actuelle<\/strong> \u2014 quelle valeur se trouve \u00e0 l'emplacement sp\u00e9cifi\u00e9 par le chemin (dans notre cas, c'est la valeur du jeton)<\/li>\n<li><strong>Nom de la variable<\/strong> \u2014 le nom de la variable dans laquelle <strong>Valeur actuelle<\/strong> sera enregistr\u00e9e. Dans notre cas, ce sera <code>token<\/code><\/li>\n<li><strong>N\u0153ud<\/strong> \u2014 dans lequel des anc\u00eatres la variable sera cr\u00e9\u00e9e <strong>Nom de la variable<\/strong>. Choisissons Projet<\/li>\n<\/ul>\n<p><\/p>\n<p>La bo\u00eete de dialogue remplie ressemble \u00e0 ceci :<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. D\u00e9marrage rapide\" src=\"\/wp-content\/uploads\/2019\/12\/f524934dd1a4cb238afb6666135b360b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Maintenant, \u00e0 chaque ex\u00e9cution du n\u0153ud <strong>login<\/strong> la variable dynamique <code>token<\/code> sera mise \u00e0 jour avec la nouvelle valeur de la r\u00e9ponse. Et cette variable sera stock\u00e9e dans <strong>Projet<\/strong> le n\u0153ud et, gr\u00e2ce \u00e0 l'h\u00e9ritage, sera accessible aux descendants.<\/p>\n<p><\/p>\n<p>Pour acc\u00e9der aux variables dynamiques, il est n\u00e9cessaire d'utiliser <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/variables\">la variable int\u00e9gr\u00e9e<\/a><\/noindex> <code>$dynamicVar<\/code>. Par exemple, pour acc\u00e9der au jeton enregistr\u00e9, il faut appeler <code>${$dynamicVar.token}<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"prokidyvaem-avtorizacionnyy-token-v-zaprosy\">Transmettons le jeton d'autorisation dans les requ\u00eates<\/h2>\n<p><\/p>\n<p>Lors des \u00e9tapes pr\u00e9c\u00e9dentes, nous avons obtenu le jeton d'autorisation et tout ce que nous avons \u00e0 faire est d'ajouter un en-t\u00eate <code>Authorization<\/code> avec la valeur <code>Bearer<\/code> \u00e0 toutes les requ\u00eates n\u00e9cessitant une autorisation, y compris dans <strong>create-post<\/strong>. Il existe plusieurs fa\u00e7ons de le faire :<\/p>\n<p><\/p>\n<ol>\n<li>Copiez manuellement le jeton et ajoutez l'en-t\u00eate d'autorisation aux requ\u00eates int\u00e9ressantes. Cette m\u00e9thode fonctionne, mais son utilisation est limit\u00e9e aux requ\u00eates de type &#171; fait et jet\u00e9 &#187;. Elle n'est pas adapt\u00e9e pour l'ex\u00e9cution r\u00e9p\u00e9t\u00e9e de sc\u00e9narios.<\/li>\n<li>Utiliser la fonctionnalit\u00e9 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/work-with\/authorization\">l'autorisation<\/a><\/noindex>.<\/li>\n<li>Utiliser <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/other\/default-http-headers\">en-t\u00eates par d\u00e9faut<\/a><\/noindex><\/li>\n<\/ol>\n<p><\/p>\n<p>L'utilisation de la seconde m\u00e9thode semble \u00e9vidente, mais dans le contexte de cet article, cette approche... n'est pas int\u00e9ressante. En effet : le m\u00e9canisme des autorisations devrait vous \u00eatre familier d'autres outils (m\u00eame si nous avons des \u00e9l\u00e9ments comme <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/work-with\/authorization#inherit-from-parent\">l'h\u00e9ritage des autorisations<\/a><\/noindex>) et ne devrait pas poser de probl\u00e8me. <\/p>\n<p><\/p>\n<p>En revanche, les en-t\u00eates par d\u00e9faut ! Pour faire simple, les en-t\u00eates par d\u00e9faut sont des en-t\u00eates HTTP h\u00e9rit\u00e9s des anc\u00eatres qui sont automatiquement ajout\u00e9s \u00e0 la requ\u00eate, sauf s'ils sont explicitement d\u00e9sactiv\u00e9s. Gr\u00e2ce \u00e0 cette fonctionnalit\u00e9, par exemple, on peut mettre en \u0153uvre une autorisation personnalis\u00e9e ou simplement \u00e9viter les duplications dans les sc\u00e9narios. Utilisons cette fonctionnalit\u00e9 pour transmettre le jeton dans les en-t\u00eates.<\/p>\n<p><\/p>\n<p>Nous avons prudemment sauvegard\u00e9 le jeton dans une variable dynamique <code>$dynamicVar.token<\/code> au niveau du n\u0153ud Project. Il reste \u00e0 faire ce qui suit :<\/p>\n<p><\/p>\n<ol>\n<li>D\u00e9finir l'en-t\u00eate par d\u00e9faut <code>Authorization<\/code> avec la valeur <code>Bearer ${$dynamicVar.token}<\/code> au niveau du n\u0153ud Project. Pour cela, dans l'interface du n\u0153ud Project, il faut ouvrir la bo\u00eete de dialogue des en-t\u00eates par d\u00e9faut (bouton <strong>Headers<\/strong> en haut \u00e0 droite) et ajouter l'en-t\u00eate correspondant. La bo\u00eete de dialogue avec les valeurs remplies ressemblera \u00e0 ceci :<br \/>\n<img decoding=\"async\" alt=\"TestMace. D\u00e9marrage rapide\" src=\"\/wp-content\/uploads\/2019\/12\/9abd888cbf96e53b633e8f0fd3389297.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>D\u00e9sactiver cet en-t\u00eate dans la requ\u00eate de login. Cela est compr\u00e9hensible : au moment de la connexion, nous n'avons pas encore de jeton, et c'est justement avec cette requ\u00eate que nous allons le d\u00e9finir. Par cons\u00e9quent, dans l'interface de la requ\u00eate de login, dans l'onglet <strong>Headers<\/strong> dans la zone <strong>Inherited<\/strong> nous d\u00e9cochons l'option de l'en-t\u00eate Authorization. <\/li>\n<\/ol>\n<p><\/p>\n<p>C'est tout. Maintenant, l'en-t\u00eate d'autorisation sera ajout\u00e9 \u00e0 toutes les requ\u00eates descendant du n\u0153ud Project, sauf pour le n\u0153ud de login. Ainsi, \u00e0 ce stade, nous avons d\u00e9j\u00e0 un sc\u00e9nario pr\u00eat et il ne nous reste plus qu'\u00e0 le lancer. Le lancement du sc\u00e9nario peut se faire en s\u00e9lectionnant l'\u00e9l\u00e9ment <strong>Ex\u00e9cution<\/strong> dans le menu contextuel du n\u0153ud Project. <\/p>\n<p><\/p>\n<h2 id=\"proveryaem-korrektnost-sozdaniya-posta\">V\u00e9rifions la validit\u00e9 de la cr\u00e9ation du post<\/h2>\n<p><\/p>\n<p>\u00c0 ce stade, notre sc\u00e9nario peut se connecter, et en utilisant le jeton d'autorisation, cr\u00e9er un post. Cependant, nous devons nous assurer que le nouveau post a un nom correct. Il s'agit donc de faire les choses suivantes :<\/p>\n<p><\/p>\n<ul>\n<li>Envoyer une requ\u00eate pour obtenir le post par id, <\/li>\n<li>V\u00e9rifier que le nom retourn\u00e9 par le serveur correspond au nom donn\u00e9 lors de la cr\u00e9ation du post<\/li>\n<\/ul>\n<p><\/p>\n<p>Examinons la premi\u00e8re \u00e9tape. \u00c9tant donn\u00e9 que la valeur de l'id est d\u00e9termin\u00e9e pendant l'ex\u00e9cution du script, il est n\u00e9cessaire de cr\u00e9er une variable dynamique (appelons-la <code>postId<\/code>) \u00e0 partir du n\u0153ud <strong>create-post<\/strong> au niveau du n\u0153ud Project. Comment faire cela, nous le savons d\u00e9j\u00e0, il suffit de se r\u00e9f\u00e9rer \u00e0 la section <strong>Enregistrons le token dans une variable<\/strong>. Il ne reste plus qu'\u00e0 cr\u00e9er une requ\u00eate pour obtenir le post avec cet id. Pour cela, cr\u00e9ons un RequestStep <strong>get-post<\/strong> avec les param\u00e8tres suivants :<\/p>\n<p><\/p>\n<ul>\n<li>Type de requ\u00eate : GET<\/li>\n<li>URL : ${domain}\/posts\/${$dynamicVar.postId}<\/li>\n<\/ul>\n<p><\/p>\n<p>Pour r\u00e9aliser la deuxi\u00e8me \u00e9tape, nous devons nous familiariser avec <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\">Assertion<\/a><\/noindex> le n\u0153ud. Le n\u0153ud Assertion est un n\u0153ud qui permet d'\u00e9crire des v\u00e9rifications pour certaines requ\u00eates. Chaque n\u0153ud Assertion peut contenir plusieurs assertions (v\u00e9rifications). Vous pourrez en savoir plus sur tous les types d'assertions dans notre <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\">documentation<\/a><\/noindex>. Nous allons utiliser <code>Comparer<\/code> assertion avec l'op\u00e9rateur <code>\u00e9gal<\/code>. Il existe plusieurs mani\u00e8res de cr\u00e9er des assertions :<\/p>\n<p><\/p>\n<ol>\n<li>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.<\/li>\n<li>Quick. Create an Assertion node along with the assertion from the response of the RequestStep node using the context menu.<\/li>\n<\/ol>\n<p><\/p>\n<p>We will use the second method. Here\u2019s how it will look for our case.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. D\u00e9marrage rapide\" src=\"\/wp-content\/uploads\/2019\/12\/7f1d81669cb4c10db5f0afa3bf04eddf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>For those who didn't understand, here's what happens:<\/p>\n<p><\/p>\n<ol>\n<li>Make a request in the node. <strong>get-post<\/strong><\/li>\n<li>Dans l'onglet <strong>Parsed<\/strong> In the response, call the context menu and select <strong>Create assertion<\/strong> -&gt; <strong>Comparer<\/strong> -&gt; <strong>Equal<\/strong><\/li>\n<\/ol>\n<p><\/p>\n<p>Congratulations, we have created our first test! Simple, isn\u2019t it? Now you can run the scenario fully and enjoy the result. There's just a bit left to refactor and extract <code>title<\/code> into a separate variable. But we will leave that to you as homework)<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Conclusion<\/h1>\n<p><\/p>\n<p>In this guide, we created a full-fledged scenario and reviewed some features of our product. Of course, we didn\u2019t use all the functionality, and in the following articles, we will provide a detailed overview of TestMace's capabilities. Stay tuned for updates!<\/p>\n<p><\/p>\n<p>P.S. For those who are too lazy to reproduce all the steps, we have kindly recorded <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/TestMace\/testmace-quick-start-project\">d\u00e9p\u00f4t<\/a><\/noindex> with the project from the article. You can open it using <strong>Fichier<\/strong> -&gt; <strong>Open project<\/strong> and select the Project folder.<\/p>\n<p>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458964\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442. \u041c\u044b \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u044c\u043a\u0443 \u0432\u044b\u0445\u043e\u0434\u0438\u043c \u0438\u0437 \u0442\u0435\u043d\u0438 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439 \u043e \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0435. \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043e\u0431\u0437\u043e\u0440\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0442\u0437\u044b\u0432\u043e\u0432 (\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445), \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0438 bug \u0440\u0435\u043f\u043e\u0440\u0442\u043e\u0432. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043f\u043e\u043a\u0430\u0436\u0435\u043c TestMace \u0432 \u0434\u0435\u043b\u0435 \u0438 \u0432\u044b \u043f\u043e \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0443 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0438\u0448\u043a\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0414\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-54167","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/news\/testmace-bystryj-start\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47TestMace. \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/news\/testmace-bystryj-start\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-12-18T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:02:08+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47TestMace. Quick Start | ProHoster","description":"Bonjour \u00e0 tous.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/news\/testmace-bystryj-start","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47TestMace. \u0411\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u0442\u0430\u0440\u0442 | ProHoster","og:description":"\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442.","og:url":"https:\/\/prohoster.info\/fr\/blog\/news\/testmace-bystryj-start","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-12-18T21:00:00+00:00","article:modified_time":"2020-02-18T11:02:08+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"54167","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 10:17:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:10:34","updated":"2026-01-24 10:17:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/54167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=54167"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/54167\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=54167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=54167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=54167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}