{"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\/ro\/blog\/news\/testmace-bystryj-start","title":{"rendered":"TestMace. \u00cenceput rapid","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"TestMace. \u00cenceput rapid\" src=\"\/wp-content\/uploads\/2019\/12\/ca19545f1cc06814a69a6a3e6d9f3a5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Salut tuturor! Ne \u00eendrept\u0103m cu pa\u0219i mici spre lumin\u0103 \u0219i continu\u0103m seria de articole despre produsul nostru. Dup\u0103 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458372\/\">partea anterioar\u0103, c\u0103 \u00een acest sistem se folosesc bifurca\u021bii speciale:<\/a><\/noindex> articolul de informare, am primit numeroase feedback-uri (mai mult pozitive), sugestii \u0219i rapoarte de bug-uri. Ast\u0103zi v\u0103 vom ar\u0103ta <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">TestMace<\/a><\/noindex> \u00een ac\u021biune, iar voi ve\u021bi putea aprecia c\u00e2teva dintre caracteristicile aplica\u021biei noastre. Pentru o imersiune mai complet\u0103, v\u0103 recomand s\u0103 consulta\u021bi documenta\u021bia noastr\u0103 la adresa <noindex><a rel=\"nofollow\" href=\"http:\/\/docs-ru.testmace.com\">http:\/\/docs-ru.testmace.com<\/a><\/noindex>. A\u0219adar, s\u0103 \u00eencepem! <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"ustanovka\">Instalare<\/h1>\n<p><\/p>\n<p>S\u0103 \u00eencepem cu un evident. Aplica\u021bia este disponibil\u0103 \u0219i poate fi testat\u0103 pe trei platforme \u2014 Linux, Windows, MacOS. Pute\u021bi desc\u0103rca installer-ul pentru sistemul de operare dorit de pe <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">site-ul nostru<\/a><\/noindex>. Pentru utilizatorii de Linux exist\u0103 posibilitatea instal\u0103rii <noindex><a rel=\"nofollow\" href=\"https:\/\/snapcraft.io\/testmace\">a pachetului snap<\/a><\/noindex>. Sper\u0103m c\u0103 \u00een cur\u00e2nd vom ajunge \u0219i la Microsoft Store \u0219i App Store (chiar trebuie? Ce crede\u021bi?).<\/p>\n<p><\/p>\n<h1 id=\"podopytnyy-scenariy\">Scenariul de testare<\/h1>\n<p><\/p>\n<p>Am ales urm\u0103torul scenariu de testare standard:<\/p>\n<p><\/p>\n<ul>\n<li>ne vom loga: utilizator \u2014 admin, parola \u2014 password<\/li>\n<li>vom ad\u0103uga o nou\u0103 \u00eenregistrare<\/li>\n<li>vom verifica ad\u0103ugarea corect\u0103 a \u00eenregistr\u0103rii<\/li>\n<\/ul>\n<p><\/p>\n<p>Vom testa pe <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace-quick-start.herokuapp.com\/\">https:\/\/testmace-quick-start.herokuapp.com\/<\/a><\/noindex>. Este un simplu <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/typicode\/json-server\">json-server<\/a><\/noindex>, perfect pentru testarea de acest tip de aplica\u021bii. Am ad\u0103ugat doar autorizarea prin token pe toate rutele json-server-ului \u0219i am creat metoda login pentru a ob\u021bine acest token. Vom progresa pas cu pas, \u00eembun\u0103t\u0103\u021bind treptat proiectul nostru.<\/p>\n<p><\/p>\n<h2 id=\"sozdanie-proekta-i-popytka-sozdat-suschnost-bez-avtorizacii\">Crearea proiectului \u0219i \u00eencercarea de a crea o entitate f\u0103r\u0103 autorizare<\/h2>\n<p><\/p>\n<p>Mai \u00eent\u00e2i, s\u0103 cre\u0103m un nou proiect (<strong>File<\/strong>-&gt;<strong>New project<\/strong>). Dac\u0103 lansa\u021bi aplica\u021bia pentru prima dat\u0103, noul proiect se va deschide automat. Haide\u021bi s\u0103 \u00eencerc\u0103m s\u0103 facem o cerere pentru crearea unei noi \u00eenregistr\u0103ri (poate c\u0103 crearea \u00eenregistr\u0103rilor este disponibil\u0103 f\u0103r\u0103 autorizare). Selecta\u021bi din meniul contextual al nodului Project op\u021biunile <strong>Add node<\/strong> -&gt; <strong>RequestStep<\/strong>. Vom seta ca nume al nodului <strong>create-post<\/strong>. Rezultatul va fi un nou nod creat \u00een arbore \u0219i se va deschide tabul acestuia. S\u0103 stabilim urm\u0103toarele parametru pentru cerere:<\/p>\n<p><\/p>\n<ul>\n<li>Tip cerere: 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>Corp cerere: json cu valoarea <code>{\"title\": \"New testmace quick start post\"}<\/code><br \/>\nDac\u0103 a\u021bi f\u0103cut totul corect, interfa\u021ba va ar\u0103ta astfel:<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. \u00cenceput rapid\" src=\"\/wp-content\/uploads\/2019\/12\/a5c81dc4977dd73a4975643bf8ced3da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Totu\u0219i, dac\u0103 vom \u00eencerca s\u0103 execut\u0103m cererea, serverul va returna codul 401 \u0219i f\u0103r\u0103 autorizare nu avem nici o \u0219ans\u0103 pe acest server. Ei bine, era de a\u0219teptat).<\/p>\n<p><\/p>\n<h2 id=\"dobavlyaem-zapros-na-avtorizaciyu\">Ad\u0103ugarea cererii de autorizare<\/h2>\n<p><\/p>\n<p>A\u0219a cum s-a men\u021bionat, avem un endpoint POST <code>\/login<\/code>, care accept\u0103 ca corp al cererii json de tip: <code>{\"username\": \"&lt;username&gt;\", \"password\": \"&lt;password&gt;\"}<\/code>, unde <code>username<\/code> \u0219i <code>parola<\/code> (de asemenea, din introducerea de mai sus) au valori <code>admin<\/code> \u0219i <code>parola<\/code> corespunz\u0103toare. Ca r\u0103spuns, acest endpoint returneaz\u0103 un json de forma <code>{\"token\": \"\"}<\/code>. Vom folosi acest token pentru autentificare. Vom crea <strong>RequestStep<\/strong> un nod numit <strong>login<\/strong>, av\u00e2nd ca p\u0103rinte <strong>Proiect<\/strong> nodul. Folosind drag-and-drop, muta\u021bi acest nod \u00een arbore mai sus dec\u00e2t nodul <strong>create-post<\/strong>. S\u0103 set\u0103m urm\u0103toarele parametre pentru cererea nou creat\u0103:<\/p>\n<p><\/p>\n<ul>\n<li>Tip cerere: 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>Corp cerere: json cu valoarea <code>{\"username\": \"admin\", \"password\": \"password\"}<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Execut\u0103m cererea \u0219i primim un cod 200 cu token-ul \u00een r\u0103spuns. A\u0219a arat\u0103:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. \u00cenceput rapid\" 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: elimin\u0103m dublarea domeniului<\/h2>\n<p><\/p>\n<p>Deocamdat\u0103, cererile nu sunt legate \u00eentr-un singur scenariu. Dar acesta nu este singurul dezavantaj. Dac\u0103 ne uit\u0103m cu aten\u021bie, putem observa c\u0103 cel pu\u021bin domeniul este duplicat \u00een ambele cereri. Nu este bine. Este momentul s\u0103 refactoriz\u0103m aceast\u0103 parte a viitorului scenariu \u0219i ne vor ajuta variabilele.<\/p>\n<p><\/p>\n<p>\u00cen prima aproximare, variabilele \u00eendeplinesc aceea\u0219i func\u021bie ca \u00een alte instrumente similare \u0219i limbaje de programare \u2014 eliminarea duplic\u0103rii, \u00eembun\u0103t\u0103\u021birea lizibilit\u0103\u021bii etc. Despre variabile pute\u021bi citi mai multe \u00een <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/user-variables\">documenta\u021bia noastr\u0103<\/a><\/noindex>. \u00cen acest caz, ne vor fi necesare variabilele utilizatorului. <\/p>\n<p><\/p>\n<p>S\u0103 definim la nivelul Project nodul o variabil\u0103 <code>domain<\/code> cu valoarea <code>https:\/\/testmace-quick-start.herokuapp.com<\/code>. Pentru aceasta, este necesar<\/p>\n<p><\/p>\n<ul>\n<li>s\u0103 deschide\u021bi fila acestui nod \u0219i s\u0103 ap\u0103sa\u021bi pe pictograma calculatorului din dreapta sus<\/li>\n<li>Ap\u0103sa\u021bi pe <strong>+ AD\u0102UGA\u021aI VARIABILA<\/strong><\/li>\n<li>Introduce\u021bi numele \u0219i valoarea variabilei<br \/>\n\u00cen cazul nostru, dialogul cu variabila ad\u0103ugat\u0103 va ar\u0103ta astfel:<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. \u00cenceput rapid\" src=\"\/wp-content\/uploads\/2019\/12\/071ac6dca2c5a49b78b11719fae5f650.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OK. Acum, datorit\u0103 mo\u0219tenirii, putem folosi aceast\u0103 variabil\u0103 \u00een descendantii oric\u0103rui nivel de imersie. \u00cen cazul nostru, acestea sunt nodurile <strong>login<\/strong> \u0219i <strong>create-post<\/strong>. Pentru a folosi variabila \u00een c\u00e2mpul text, este necesar s\u0103 scrie\u021bi <code>${}<\/code>. De exemplu, url pentru login se va transforma \u00een <code>${domain}\/login<\/code>, \u00een consecin\u021b\u0103 pentru <strong>create-post<\/strong> nodul url va ar\u0103ta ca <code>${domain}\/posts<\/code>.<\/p>\n<p><\/p>\n<p>Astfel, urm\u00e2nd principiul DRY, am \u00eembun\u0103t\u0103\u021bit pu\u021bin scenariul.<\/p>\n<p><\/p>\n<h2 id=\"sohranyaem-token-v-peremennuyu\">Salv\u0103m token-ul \u00een variabil\u0103<\/h2>\n<p><\/p>\n<p>Deoarece am adus vorba despre variabile, s\u0103 dezvolt\u0103m pu\u021bin acest subiect. \u00cen prezent, \u00een cazul unui login reu\u0219it, primim de la server un token de autorizare, pe care \u00eel vom necesita \u00een cererile ulterioare. S\u0103 salv\u0103m acest token \u00een variabil\u0103. Deoarece valoarea variabilei va fi determinat\u0103 \u00een timpul execut\u0103rii scenariului, folosim pentru aceasta un mecanism special \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/user-variables\/dynamic-variables\">variabile dinamice<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Pentru \u00eenceput, vom face o solicitare de autentificare. \u00cen tab-ul <strong>Parsed<\/strong> Pentru a r\u0103spunde, plasa\u021bi cursorul pe token \u0219i \u00een meniul contextual (care se deschide fie prin clic dreapta, fie prin ap\u0103sarea butonului &#8230;) selecta\u021bi op\u021biunea <strong>Atribuie variabilei<\/strong>. Va ap\u0103rea un dialog cu urm\u0103toarele c\u00e2mpuri:<\/p>\n<p><\/p>\n<ul>\n<li><strong>Path<\/strong> \u2014 ce parte din r\u0103spuns este preluat\u0103 (\u00een cazul nostru, aceasta este <code>body.token<\/code>)<\/li>\n<li><strong>Current value<\/strong> \u2014 ce valoare se afl\u0103 pe calea Path (\u00een cazul nostru, aceasta este valoarea token-ului)<\/li>\n<li><strong>Numele variabilei<\/strong> \u2014 numele variabilei \u00een care <strong>Current value<\/strong> va fi salvat\u0103. \u00cen cazul nostru, aceasta va fi <code>token<\/code><\/li>\n<li><strong>Node<\/strong> \u2014 \u00een care dintre p\u0103rin\u021bi va fi creat\u0103 variabila <strong>Numele variabilei<\/strong>. Vom alege Project<\/li>\n<\/ul>\n<p><\/p>\n<p>Dialogul completat arat\u0103 astfel:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. \u00cenceput rapid\" src=\"\/wp-content\/uploads\/2019\/12\/f524934dd1a4cb238afb6666135b360b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Acum, la fiecare execu\u021bie a nodului <strong>login<\/strong> variabila dinamic\u0103 <code>token<\/code> va fi actualizat\u0103 cu o nou\u0103 valoare din r\u0103spuns. \u0218i aceast\u0103 variabil\u0103 va fi stocat\u0103 \u00een <strong>Proiect<\/strong> nod \u0219i, datorit\u0103 mo\u0219tenirii, va fi disponibil\u0103 descenden\u021bilor.<\/p>\n<p><\/p>\n<p>Pentru a accesa variabilele dinamice, trebuie s\u0103 folosi\u021bi <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/variables\">variabila \u00eencorporat\u0103<\/a><\/noindex> <code>$dynamicVar<\/code>. De exemplu, pentru a accesa token-ul salvat, trebuie s\u0103 apela\u021bi <code>${$dynamicVar.token}<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"prokidyvaem-avtorizacionnyy-token-v-zaprosy\">Transmite\u021bi token-ul de autorizare \u00een solicit\u0103ri<\/h2>\n<p><\/p>\n<p>\u00cen pa\u0219ii anteriori, am ob\u021binut token-ul de autorizare \u0219i tot ce trebuie s\u0103 facem este s\u0103 ad\u0103ug\u0103m antetul <code>Authorization<\/code> cu valoarea <code>Bearer<\/code> \u00een toate solicit\u0103rile care necesit\u0103 autorizare, inclusiv \u00een <strong>create-post<\/strong>. Exist\u0103 mai multe metode pentru aceasta:<\/p>\n<p><\/p>\n<ol>\n<li>Copia\u021bi manual tokenul \u0219i ad\u0103uga\u021bi antetul de autorizare la solicit\u0103rile relevante. Aceast\u0103 metod\u0103 func\u021bioneaz\u0103, dar utilizarea sa este limitat\u0103 doar la solicit\u0103rile de tip &#171;am f\u0103cut \u0219i am aruncat&#187;. Nu este potrivit\u0103 pentru execu\u021bia repetat\u0103 a scenariilor<\/li>\n<li>Utiliza\u021bi func\u021bionalitatea de <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/work-with\/authorization\">autorizare<\/a><\/noindex>.<\/li>\n<li>Utiliza\u021bi <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/other\/default-http-headers\">anteturile implicite<\/a><\/noindex><\/li>\n<\/ol>\n<p><\/p>\n<p>Utilizarea celei de-a doua metode pare evident\u0103, dar \u00een contextul acestui articol, aceast\u0103 abordare\u2026 nu este interesant\u0103. Adic\u0103, mecanismul de autorizare este cunoscut din alte instrumente (de\u0219i avem lucruri precum <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/work-with\/authorization#inherit-from-parent\">mo\u0219tenirea autoriz\u0103rilor<\/a><\/noindex>) \u0219i probabil nu va ridica \u00eentreb\u0103ri. <\/p>\n<p><\/p>\n<p>O alt\u0103 poveste sunt anteturile implicite! Pe scurt, anteturile implicite sunt antete HTTP mo\u0219tenite de la str\u0103mo\u0219ii lor, care sunt ad\u0103ugate la cerere \u00een mod implicit, dac\u0103 nu sunt dezactivate explicit. Cu aceast\u0103 func\u021bionalitate, putem, de exemplu, implementa o autorizare personalizat\u0103 sau pur \u0219i simplu sc\u0103pa de duplicare \u00een scripturi. Vom aplica aceast\u0103 caracteristic\u0103 pentru a transmite tokenul \u00een antete.<\/p>\n<p><\/p>\n<p>Anterior, am salvat prudent tokenul \u00eentr-o variabil\u0103 dinamic\u0103 <code>$dynamicVar.token<\/code> la nivelul nodului Project. R\u0103m\u00e2ne s\u0103 facem urm\u0103toarele:<\/p>\n<p><\/p>\n<ol>\n<li>Definirea antetului implicit <code>Authorization<\/code> cu valoarea <code>Bearer ${$dynamicVar.token}<\/code> la nivelul nodului Project. Pentru aceasta, \u00een interfa\u021ba nodului Project, trebuie s\u0103 deschidem dialogul cu antetele implicite (butonul <strong>Headers<\/strong> din col\u021bul din dreapta sus) \u0219i s\u0103 ad\u0103ug\u0103m antetul corespunz\u0103tor. Dialogul cu valorile completate va ar\u0103ta \u00een felul urm\u0103tor:<br \/>\n<img decoding=\"async\" alt=\"TestMace. \u00cenceput rapid\" src=\"\/wp-content\/uploads\/2019\/12\/9abd888cbf96e53b633e8f0fd3389297.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>Dezactiveaz\u0103 acest antet din cererea de autentificare. Acest lucru este clar: \u00een momentul autentific\u0103rii nu avem \u00eenc\u0103 tokenul \u0219i exact prin aceast\u0103 cerere \u00eel vom stabili. A\u0219adar, \u00een interfa\u021ba cererii de autentificare, \u00een tab-ul <strong>Headers<\/strong> din zona <strong>Inherited<\/strong> vom debifa c\u0103su\u021ba cu antetul Authorization. <\/li>\n<\/ol>\n<p><\/p>\n<p>Asta e tot. Acum, antetul de autorizare va fi ad\u0103ugat la toate cererile care sunt descenden\u021bi ai nodului Project, cu excep\u021bia nodului de autentificare. A\u0219adar, la acest stadiu, avem deja un script preg\u0103tit \u0219i nu ne r\u0103m\u00e2ne dec\u00e2t s\u0103-l lans\u0103m. Putem lansa scriptul aleg\u00e2nd op\u021biunea <strong>Run<\/strong> din meniul contextual al nodului Project. <\/p>\n<p><\/p>\n<h2 id=\"proveryaem-korrektnost-sozdaniya-posta\">Verific\u0103m corectitudinea cre\u0103rii post\u0103rii<\/h2>\n<p><\/p>\n<p>La acest stadiu, scriptul nostru poate s\u0103 se autentifice \u0219i, folosind tokenul de autorizare, s\u0103 creeze o postare. Totu\u0219i, trebuie s\u0103 ne asigur\u0103m c\u0103 noua postare are un nume corect. A\u0219adar, practic r\u0103m\u00e2ne de f\u0103cut urm\u0103toarele:<\/p>\n<p><\/p>\n<ul>\n<li>Trimite\u021bi o cerere pentru a ob\u021bine postarea dup\u0103 id, <\/li>\n<li>Verifica\u021bi c\u0103 numele primit de pe server corespunde numelui trimis la crearea post\u0103rii<\/li>\n<\/ul>\n<p><\/p>\n<p>S\u0103 analiz\u0103m primul pas. Deoarece valoarea id-ului este determinat\u0103 \u00een timpul execu\u021biei scriptului, este necesar s\u0103 cre\u0103m o variabil\u0103 dinamic\u0103 (s\u0103 o numim <code>postId<\/code>) din nodul <strong>create-post<\/strong> la nivelul nodului Project. Cum s\u0103 facem acest lucru deja \u0219tim, este suficient s\u0103 ne adres\u0103m sec\u021biunii <strong>Salv\u0103m token-ul \u00een variabil\u0103<\/strong>. R\u0103m\u00e2ne doar s\u0103 cre\u0103m o cerere pentru a ob\u021bine postarea dup\u0103 acest id. Pentru aceasta, vom crea un RequestStep <strong>get-post<\/strong> cu urm\u0103toarele parametrii:<\/p>\n<p><\/p>\n<ul>\n<li>Tip cerere: GET<\/li>\n<li>URL: ${domain}\/posts\/${$dynamicVar.postId}<\/li>\n<\/ul>\n<p><\/p>\n<p>Pentru a implementa a doua etap\u0103, trebuie s\u0103 ne familiariz\u0103m cu <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\">Afirmarea<\/a><\/noindex> nodul. Nodul de Afirmare este un nod care permite scrierea de verific\u0103ri pentru anumite cereri. Fiecare nod de Afirmare poate con\u021bine mai multe afirma\u021bii (verific\u0103ri). Mai multe detalii despre toate tipurile de afirma\u021bii le pute\u021bi citi \u00een <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\">documentation<\/a><\/noindex>. Vom folosi <code>Comparare<\/code> afirma\u021bia cu operatorul <code>egal<\/code>. Exist\u0103 mai multe metode de creare a afirma\u021biilor:<\/p>\n<p><\/p>\n<ol>\n<li>\u00cendelungat\u0103. Manual, din meniul contextual al nodului RequestStep, crea\u021bi un nod de Afirmare. \u00cen nodul de Afirmare creat, ad\u0103uga\u021bi afirma\u021bia dorit\u0103 \u0219i completa\u021bi c\u00e2mpurile.<\/li>\n<li>Rapid\u0103. Crea\u021bi un nod de Afirmare \u00eempreun\u0103 cu afirma\u021bia din r\u0103spunsul nodului RequestStep folosind meniul contextual<\/li>\n<\/ol>\n<p><\/p>\n<p>Vom folosi a doua metod\u0103. Iat\u0103 cum va ar\u0103ta pentru cazul nostru.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. \u00cenceput rapid\" src=\"\/wp-content\/uploads\/2019\/12\/7f1d81669cb4c10db5f0afa3bf04eddf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Pentru cei care nu au \u00een\u021beles, aici se \u00eent\u00e2mpl\u0103 urm\u0103toarele:<\/p>\n<p><\/p>\n<ol>\n<li>Face\u021bi o cerere \u00een nodul <strong>get-post<\/strong><\/li>\n<li>\u00cen tab-ul <strong>Parsed<\/strong> r\u0103spunsului, apela\u021bi meniul contextual \u0219i selecta\u021bi <strong>Creeaz\u0103 afirma\u021bie<\/strong> -&gt; <strong>Comparare<\/strong> -&gt; <strong>Egal<\/strong><\/li>\n<\/ol>\n<p><\/p>\n<p>Felicit\u0103ri, am creat primul test! Simplu, nu-i a\u0219a? Acum pute\u021bi rula \u00eentregul scenariu \u0219i v\u0103 pute\u021bi bucura de rezultat. Mai r\u0103m\u00e2ne s\u0103 refactoriz\u0103m pu\u021bin \u0219i s\u0103 scoatem <code>titlul<\/code> \u00eentr-o variabil\u0103 separat\u0103. Dar v\u0103 l\u0103s\u0103m acest lucru ca tem\u0103 pentru acas\u0103)<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Concluzie<\/h1>\n<p><\/p>\n<p>\u00cen acest ghid, am creat un scenariu complet \u0219i, de asemenea, am f\u0103cut o revizuire a unor func\u021bionalit\u0103\u021bi ale produsului nostru. Desigur, nu am folosit toate func\u021bionalit\u0103\u021bile, iar \u00een articolele urm\u0103toare vom face o revizuire detaliat\u0103 a capabilit\u0103\u021bilor TestMace. R\u0103m\u00e2ne\u021bi la curent cu actualiz\u0103rile!<\/p>\n<p><\/p>\n<p>P.S. Pentru cei care nu doresc s\u0103 reproduc\u0103 to\u021bi pa\u0219ii, am realizat cu amabilitate <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/TestMace\/testmace-quick-start-project\">repository<\/a><\/noindex> proiectul din articol. Poate fi deschis folosind <strong>File<\/strong> -&gt; <strong>Deschide proiectul<\/strong> \u0219i selecta\u021bi folderul Proiect.<\/p>\n<p>Sursa: <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.1 - 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\/ro\/blog\/news\/testmace-bystryj-start\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\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\/ro\/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. \u00cencepere rapid\u0103 | ProHoster","description":"Salutare tuturor.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/news\/testmace-bystryj-start","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","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\/ro\/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\/ro\/wp-json\/wp\/v2\/posts\/54167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=54167"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/54167\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=54167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=54167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=54167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}