{"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\/nl\/blog\/news\/testmace-bystryj-start","title":{"rendered":"TestMace. Snelle start","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"TestMace. Snelle start\" src=\"\/wp-content\/uploads\/2019\/12\/ca19545f1cc06814a69a6a3e6d9f3a5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hallo iedereen. We komen langzaam weer in de schijnwerpers en gaan verder met onze reeks artikelen over ons product. Na <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458372\/\">de vorige<\/a><\/noindex> de introductie hebben we veel feedback ontvangen (voornamelijk positief), suggesties en bugrapporten. Vandaag laten we je <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">TestMace<\/a><\/noindex> zien hoe het werkt, zodat je enkele functies van onze applicatie kunt waarderen. Voor een vollediger beeld raad ik aan om onze documentatie te raadplegen op <noindex><a rel=\"nofollow\" href=\"http:\/\/docs-ru.testmace.com\">http:\/\/docs-ru.testmace.com<\/a><\/noindex>. Laten we beginnen! <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"ustanovka\">Installatie<\/h1>\n<p><\/p>\n<p>We starten met het voor de hand liggende. De applicatie is beschikbaar en kan daadwerkelijk getest worden op drie platforms: Linux, Windows, MacOS. Je kunt de installer voor het gewenste OS downloaden vanaf <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">onze website<\/a><\/noindex>. Voor Linux-gebruikers is er de optie om een <noindex><a rel=\"nofollow\" href=\"https:\/\/snapcraft.io\/testmace\">snap package<\/a><\/noindex>te installeren. We hopen echt dat we binnenkort ook Microsoft Store en App Store kunnen aanpakken (maar is dat nodig? Wat denken jullie?).<\/p>\n<p><\/p>\n<h1 id=\"podopytnyy-scenariy\">Testscenario<\/h1>\n<p><\/p>\n<p>Als testscenario hebben we het volgende standaardscenario gekozen:<\/p>\n<p><\/p>\n<ul>\n<li>we loggen in: gebruiker \u2014 admin, wachtwoord \u2014 password<\/li>\n<li>we voegen een nieuwe record toe<\/li>\n<li>we controleren of de record correct is toegevoegd<\/li>\n<\/ul>\n<p><\/p>\n<p>We gaan testen op <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace-quick-start.herokuapp.com\/\">https:\/\/testmace-quick-start.herokuapp.com\/<\/a><\/noindex>. Dit is een gewone <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/typicode\/json-server\">json-server<\/a><\/noindex>, perfect geschikt voor het testen van dergelijke applicaties. We hebben alleen token-authenticatie aan alle routes van de json-server toegevoegd en een login-methode gemaakt om deze token te verkrijgen. We zullen stap voor stap vooruitgaan en ons project geleidelijk verbeteren.<\/p>\n<p><\/p>\n<h2 id=\"sozdanie-proekta-i-popytka-sozdat-suschnost-bez-avtorizacii\">Project aanmaken en proberen om een entiteit zonder authenticatie te cre\u00ebren<\/h2>\n<p><\/p>\n<p>Laten we beginnen met het aanmaken van een nieuw project (<strong>Bestand<\/strong>-&gt;<strong>Nieuw project<\/strong>). Als je de applicatie voor het eerst start, wordt het nieuwe project automatisch geopend. Laten we eerst proberen een verzoek te doen om een nieuwe record aan te maken (misschien is het cre\u00ebren van records zonder authenticatie mogelijk). Kies in het contextmenu van de Project-knoop de opties <strong>Knoop toevoegen<\/strong> -&gt; <strong>RequestStep<\/strong>. Als naam voor de knoop geven we <strong>create-post<\/strong>op. Hierdoor wordt er een nieuwe knoop in de boom aangemaakt en wordt het tabblad van die knoop geopend. Stel de volgende parameters voor het verzoek in:<\/p>\n<p><\/p>\n<ul>\n<li>Type verzoek: 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>Body van het verzoek: json met de waarde <code>{\"title\": \"New testmace quick start post\"}<\/code><br \/>\nAls je alles goed hebt gedaan, zou de interface er als volgt uit moeten zien:<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Snelle start\" src=\"\/wp-content\/uploads\/2019\/12\/a5c81dc4977dd73a4975643bf8ced3da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Maar als we het verzoek proberen uit te voeren, zal de server een 401-code retourneren en zonder authenticatie is er niets mogelijk op deze server. Nou, dat was wel te verwachten).<\/p>\n<p><\/p>\n<h2 id=\"dobavlyaem-zapros-na-avtorizaciyu\">Voeg een verzoek voor authenticatie toe<\/h2>\n<p><\/p>\n<p>Zoals eerder vermeld, hebben we een POST endpoint <code>\/login<\/code>, dat een JSON van het type als body van het verzoek accepteert: <code>{\"username\": \"\", \"password\": \"\"}<\/code>, waar <code>username<\/code> en <code>password<\/code> (opnieuw, uit de bovenstaande inleiding) hebben waarden <code>admin<\/code> en <code>password<\/code> daarom. Dit endpoint retourneert een JSON-structuur <code>{\"token\": \"\"}<\/code>. We zullen het gebruiken voor authenticatie. Laten we <strong>RequestStep<\/strong> een knooppunt met de naam <strong>login<\/strong>, met als ouder <strong>Project<\/strong> knooppunt. Gebruik drag-and-drop om dit knooppunt hoger in de boom te plaatsen dan knooppunt <strong>create-post<\/strong>. Laten we de volgende parameters aan de nieuw gemaakte aanvraag toekennen:<\/p>\n<p><\/p>\n<ul>\n<li>Type verzoek: 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>Body van het verzoek: json met de waarde <code>{\"username\": \"admin\", \"password\": \"password\"}<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>Voer de aanvraag uit en ontvang een tweehonderd code met een token in de reactie. Zoiets:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Snelle start\" 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\">Refactoren: duplicatie van het domein verwijderen<\/h2>\n<p><\/p>\n<p>Momenteel zijn de aanvragen niet verbonden in een enkel scenario. Maar dit is niet de enige tekortkoming. Als je beter kijkt, zie je dat het domein in beide aanvragen minimaal wordt gedupliceerd. Niet goed. Het is tijd om dit deel van het toekomstige scenario te refactoren en variabelen zullen ons daarbij helpen.<\/p>\n<p><\/p>\n<p>In eerste instantie vervullen variabelen dezelfde rol als in andere vergelijkbare tools en programmeertalen - het vermijden van duplicatie, het verhogen van de leesbaarheid, enzovoorts. Meer over variabelen is te lezen in <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/user-variables\">onze documentatie<\/a><\/noindex>. In dit geval hebben we gebruikersvariabelen nodig. <\/p>\n<p><\/p>\n<p>Laten we op het niveau van het Project knooppunt een variabele defini\u00ebren <code>domein<\/code> met de waarde <code>https:\/\/testmace-quick-start.herokuapp.com<\/code>. Hiervoor is het nodig<\/p>\n<p><\/p>\n<ul>\n<li>Om het tabblad van dit knooppunt te openen en op het rekenmachine-icoon rechtsboven te klikken<\/li>\n<li>Klik op <strong>+ ADD VARIABLE<\/strong><\/li>\n<li>Voer de naam en waarde van de variabele in<br \/>\nIn ons geval ziet de dialoog met de toegevoegde variabele er als volgt uit:<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Snelle start\" src=\"\/wp-content\/uploads\/2019\/12\/071ac6dca2c5a49b78b11719fae5f650.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OK. Dankzij overerving kunnen we deze variabele gebruiken in afgeleiden knooppunten van elke diepte. In ons geval betreft dit de knooppunten <strong>login<\/strong> en <strong>create-post<\/strong>. Om de variabele in het tekstveld te gebruiken, moet je schrijven <code>${}<\/code>. Bijvoorbeeld, de URL voor aanmelding verandert in <code>${domain}\/login<\/code>, dus voor <strong>create-post<\/strong> knooppunt zal de URL er als volgt uitzien <code>${domain}\/posts<\/code>.<\/p>\n<p><\/p>\n<p>Op deze manier hebben we, volgens het DRY-principe, het scenario iets verbeterd.<\/p>\n<p><\/p>\n<h2 id=\"sohranyaem-token-v-peremennuyu\">We slaan de token op in een variabele<\/h2>\n<p><\/p>\n<p>Aangezien we het over variabelen hebben, laten we dit onderwerp verder ontwikkelen. Momenteel ontvangen we bij een succesvolle aanmelding een autorisatietoken van de server, dat we nodig hebben voor toekomstige aanvragen. Laten we deze token in een variabele opslaan. Aangezien de waarde van de variabele tijdens de uitvoering van het scenario wordt bepaald, gebruiken we hiervoor een speciaal mechanisme - <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/user-variables\/dynamic-variables\">dynamische variabelen<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Laten we beginnen met het uitvoeren van de aanmelding. In het tabblad <strong>Parsed<\/strong> Om het antwoord te krijgen, plaatst u de muiscursor op de token en selecteert u in het contextmenu (dat wordt geopend met de rechter muisknop of door op de knop &#8230; te drukken) de optie <strong>Toewijzen aan variabele<\/strong>. Er verschijnt een dialoogvenster met de volgende velden:<\/p>\n<p><\/p>\n<ul>\n<li><strong>Pad<\/strong> \u2014 welk deel van het antwoord wordt genomen (in ons geval is dat <code>body.token<\/code>)<\/li>\n<li><strong>Huidige waarde<\/strong> \u2014 welke waarde ligt er op het pad Pad (in ons geval is dat de waarde van de token)<\/li>\n<li><strong>Variabelenaam<\/strong> \u2014 de naam van de variabele waarin <strong>Huidige waarde<\/strong> wordt opgeslagen. In ons geval zal dit zijn <code>token<\/code><\/li>\n<li><strong>Node<\/strong> \u2014 in welke voorouder de variabele zal worden aangemaakt <strong>Variabelenaam<\/strong>. Laten we Project kiezen<\/li>\n<\/ul>\n<p><\/p>\n<p>Het ingevulde dialoogvenster ziet er als volgt uit:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Snelle start\" src=\"\/wp-content\/uploads\/2019\/12\/f524934dd1a4cb238afb6666135b360b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Nu, bij elke uitvoering van de node <strong>login<\/strong> zal de dynamische variabele <code>token<\/code> worden bijgewerkt met de nieuwe waarde uit het antwoord. En deze variabele zal worden opgeslagen in <strong>Project<\/strong> de node en dankzij overerving beschikbaar zijn voor de nakomelingen.<\/p>\n<p><\/p>\n<p>Om toegang te krijgen tot dynamische variabelen, moet u gebruikmaken van de <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/variables\">ingebouwde variabele<\/a><\/noindex> <code>$dynamicVar<\/code>. Bijvoorbeeld, om bij de opgeslagen token te komen, moet u aanroepen <code>${$dynamicVar.token}<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"prokidyvaem-avtorizacionnyy-token-v-zaprosy\">We sturen de autorisatietoken door in verzoeken<\/h2>\n<p><\/p>\n<p>In de vorige stappen hebben we de autorisatietoken gekregen en we hoeven alleen maar de header toe te voegen <code>Authorization<\/code> met de waarde <code>Bearer<\/code> aan alle verzoeken die autorisatie vereisen, inclusief in <strong>create-post<\/strong>. Hiervoor zijn er verschillende manieren:<\/p>\n<p><\/p>\n<ol>\n<li>Kopieer de token handmatig en voeg de autorisatieheader toe aan de gevraagde verzoeken. Deze methode werkt, maar is alleen geschikt voor verzoeken van het type &#171;gemaakt en weggegooid&#187;. Het is niet geschikt voor veelvuldige uitvoeringen van scripts.<\/li>\n<li>Gebruik maken van de functionaliteit van <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/work-with\/authorization\">autorisatie<\/a><\/noindex>.<\/li>\n<li>Gebruik <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/other\/default-http-headers\">standaard headers<\/a><\/noindex><\/li>\n<\/ol>\n<p><\/p>\n<p>Het gebruik van de tweede methode lijkt voor de hand liggend, maar in de context van dit artikel is deze benadering\u2026 niet interessant. Immers: het mechanisme van autorisatie is min of meer bekend bij u uit andere tools (ook al hebben we dingen zoals <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/work-with\/authorization#inherit-from-parent\">erfenis van autorisaties<\/a><\/noindex>) en zal waarschijnlijk geen vragen oproepen. <\/p>\n<p><\/p>\n<p>Wat betreft de standaard headers! In een paar woorden, de standaard headers zijn ge\u00ebrfde HTTP-headers die standaard aan het verzoek worden toegevoegd, tenzij ze expliciet worden uitgeschakeld. Met deze functionaliteit kunt u bijvoorbeeld een aangepaste autorisatie implementeren of gewoon duplicatie in scenario's vermijden. We zullen deze functie toepassen voor het doorgeven van de token in de headers.<\/p>\n<p><\/p>\n<p>Eerder hebben we het token opgeslagen in een dynamische variabele <code>$dynamicVar.token<\/code> op het niveau van de Project-knoop. We moeten nu het volgende doen:<\/p>\n<p><\/p>\n<ol>\n<li>Bepaal de standaardheader <code>Authorization<\/code> met de waarde <code>Bearer ${$dynamicVar.token}<\/code> op het niveau van de Project-knoop. Hiervoor moet in de interface van de Project-knoop het dialoogvenster met de standaardheaders worden geopend (knop <strong>Headers<\/strong> in de rechterbovenhoek) en de juiste header worden toegevoegd. Het dialoogvenster met ingevulde waarden zal er als volgt uitzien:<br \/>\n<img decoding=\"async\" alt=\"TestMace. Snelle start\" src=\"\/wp-content\/uploads\/2019\/12\/9abd888cbf96e53b633e8f0fd3389297.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>Zet deze header uit bij het loginverzoek. Dit is logisch: op het moment van inloggen hebben we nog geen token en met dit verzoek willen we het juist instellen. Daarom moeten we in de interface van het loginverzoek onder het tabblad <strong>Headers<\/strong> in het gebied <strong>Inherited<\/strong> de vink in het Authorization-header verwijderen. <\/li>\n<\/ol>\n<p><\/p>\n<p>Dat is alles. Nu zal de autorisatieheader aan alle verzoeken worden toegevoegd die afstammelingen zijn van de Project-knoop, behalve de login-knoop. Het lijkt erop dat we op dit moment al een script hebben en we hoeven het alleen maar uit te voeren. Het script kan worden uitgevoerd door de optie <strong>Run<\/strong> in het contextmenu van de Project-knoop te selecteren. <\/p>\n<p><\/p>\n<h2 id=\"proveryaem-korrektnost-sozdaniya-posta\">We controleren of de post correct is aangemaakt<\/h2>\n<p><\/p>\n<p>Op dit moment kan ons script inloggen en, gebruikmakend van de autorisatietoken, een post aanmaken. We moeten er echter zeker van zijn dat de nieuw aangemaakte post de juiste naam heeft. Dat wil zeggen, in feite moeten we het volgende doen:<\/p>\n<p><\/p>\n<ul>\n<li>Stuur een verzoek om de post op te halen op basis van id, <\/li>\n<li>Controleer of de naam die van de server komt overeenkomt met de naam die bij het aanmaken van de post is doorgegeven<\/li>\n<\/ul>\n<p><\/p>\n<p>Laten we de eerste stap bekijken. Aangezien de waarde van id tijdens de uitvoering van het script wordt bepaald, moeten we een dynamische variabele aanmaken (laten we deze noemen <code>postId<\/code>) vanuit de knoop <strong>create-post<\/strong> op het niveau van de Project-knoop. Hoe we dat doen weten we al, het is voldoende om naar de sectie <strong>We slaan de token op in een variabele<\/strong>te verwijzen. We moeten alleen een verzoek maken om de post op te halen op basis van deze id. Daarom maken we een RequestStep <strong>get-post<\/strong> met de volgende parameters:<\/p>\n<p><\/p>\n<ul>\n<li>Type verzoek: GET<\/li>\n<li>URL: ${domain}\/posts\/${$dynamicVar.postId}<\/li>\n<\/ul>\n<p><\/p>\n<p>Voor de uitvoering van de tweede stap moeten we kennismaken met <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\">Assertion<\/a><\/noindex> de knoop. De Assertion-knoop \u2014 dat is een knoop die het mogelijk maakt om controles voor bepaalde verzoeken te schrijven. Elke Assertion-knoop kan meerdere beweringen (controles) bevatten. Meer over de verschillende soorten beweringen kun je lezen in onze <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\">de documentatie<\/a><\/noindex>. We zullen gebruik maken van <code>Compare<\/code> assertion met de operator <code>equal<\/code>. Er zijn verschillende manieren om beweringen aan te maken:<\/p>\n<p><\/p>\n<ol>\n<li>Langdurig. Handmatig een Assertion-knooppunt maken via het contextmenu van de RequestStep-knoop. Voeg de gewenste assertion toe in het gemaakte Assertion-knooppunt en vul de velden in.<\/li>\n<li>Snel. Maak een Assertion-knooppunt samen met de assertion uit het antwoord van de RequestStep-knoop via het contextmenu.<\/li>\n<\/ol>\n<p><\/p>\n<p>Laten we de tweede methode gebruiken. Zo zal het eruitzien voor onze casus.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Snelle start\" src=\"\/wp-content\/uploads\/2019\/12\/7f1d81669cb4c10db5f0afa3bf04eddf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Voor degenen die het niet begrepen hebben, hier gebeurt het volgende:<\/p>\n<p><\/p>\n<ol>\n<li>Doe een verzoek in het knooppunt <strong>get-post<\/strong><\/li>\n<li>In het tabblad <strong>Parsed<\/strong> antwoord, roep het contextmenu op en kies <strong>Create assertion<\/strong> -&gt; <strong>Compare<\/strong> -&gt; <strong>Equal<\/strong><\/li>\n<\/ol>\n<p><\/p>\n<p>Gefeliciteerd, we hebben de eerste test gemaakt! Vrij eenvoudig, toch? Nu kunt u het script in zijn geheel uitvoeren en genieten van het resultaat. We moeten nog een klein beetje refactoren en het <code>title<\/code> in een aparte variabele onderbrengen. Maar we laten dit als huiswerk aan u over :)<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Conclusie<\/h1>\n<p><\/p>\n<p>In deze handleiding hebben we een volledig script gemaakt en daarbij enkele functies van ons product besproken. Uiteraard hebben we niet alle functionaliteit gebruikt en in de volgende artikelen zullen we een gedetailleerd overzicht geven van de mogelijkheden van TestMace. Blijf op de hoogte van updates!<\/p>\n<p><\/p>\n<p>P.S. Voor degenen die het te veel gedoe vinden om alle stappen te reproduceren, hebben we vriendelijk <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/TestMace\/testmace-quick-start-project\">repository<\/a><\/noindex> met het project uit het artikel. U kunt het openen met <strong>Bestand<\/strong> -&gt; <strong>Open project<\/strong> en kies de map Project.<\/p>\n<p>Bron: <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.3 - 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\/nl\/blog\/news\/testmace-bystryj-start\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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\/nl\/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. Snelle start | ProHoster","description":"Hallo allemaal.","canonical_url":"https:\/\/prohoster.info\/nl\/blog\/news\/testmace-bystryj-start","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/54167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=54167"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/54167\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=54167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=54167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=54167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}