{"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\/de\/blog\/news\/testmace-bystryj-start","title":{"rendered":"TestMace. Schneller Start","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"TestMace. Schneller Start\" src=\"\/wp-content\/uploads\/2019\/12\/ca19545f1cc06814a69a6a3e6d9f3a5a.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Hallo zusammen. Wir treten langsam aus dem Schatten und setzen unsere Reihe von Artikeln \u00fcber unser Produkt fort. Nach <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/458372\/\">der vorherigen<\/a><\/noindex> dem \u00dcberblicksartikel haben wir viele R\u00fcckmeldungen (vor allem positive), Vorschl\u00e4ge und Bug-Reports erhalten. Heute zeigen wir <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">TestMace<\/a><\/noindex> es in der Praxis und Sie k\u00f6nnen einige Funktionen unserer Anwendung zu sch\u00e4tzen wissen. F\u00fcr ein umfassenderes Verst\u00e4ndnis empfehle ich, unsere Dokumentation unter <noindex><a rel=\"nofollow\" href=\"http:\/\/docs-ru.testmace.com\">http:\/\/docs-ru.testmace.com<\/a><\/noindex>aufzusuchen. Also, los geht's! <\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h1 id=\"ustanovka\">Installation<\/h1>\n<p><\/p>\n<p>Fangen wir mit dem Offensichtlichen an. Die Anwendung ist verf\u00fcgbar und kann tats\u00e4chlich auf drei Plattformen getestet werden \u2014 Linux, Windows, MacOS. Sie k\u00f6nnen den Installer f\u00fcr das gew\u00fcnschte OS von <noindex><a rel=\"nofollow\" href=\"https:\/\/client.testmace.com\">unserer Webseite<\/a><\/noindex>herunterladen. F\u00fcr Linux-Nutzer gibt es die M\u00f6glichkeit der Installation <noindex><a rel=\"nofollow\" href=\"https:\/\/snapcraft.io\/testmace\">mit einem Snap-Paket<\/a><\/noindex>. Wir hoffen sehr, dass wir bald auch im Microsoft Store und App Store verf\u00fcgbar sein werden (brauchen wir das wirklich? Was denken Sie?).<\/p>\n<p><\/p>\n<h1 id=\"podopytnyy-scenariy\">Test-Szenario<\/h1>\n<p><\/p>\n<p>Als Test-Szenario haben wir folgendes Standard-Szenario gew\u00e4hlt:<\/p>\n<p><\/p>\n<ul>\n<li>melden wir uns an: Benutzer \u2014 admin, Passwort \u2014 password<\/li>\n<li>f\u00fcgen wir einen neuen Eintrag hinzu<\/li>\n<li>\u00fcberpr\u00fcfen wir die korrekte Erstellung des Eintrags<\/li>\n<\/ul>\n<p><\/p>\n<p>Wir werden auf testen <noindex><a rel=\"nofollow\" href=\"https:\/\/testmace-quick-start.herokuapp.com\/\">https:\/\/testmace-quick-start.herokuapp.com\/<\/a><\/noindex>. Das ist ein gew\u00f6hnlicher <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/typicode\/json-server\">json-server<\/a><\/noindex>, der sich hervorragend f\u00fcr das Testen solcher Anwendungen eignet. Wir haben nur die Token-Authentifizierung f\u00fcr alle Routen des json-Servers hinzugef\u00fcgt und eine Login-Methode zur Erlangung dieses Tokens erstellt. Wir werden schrittweise vorgehen und unser Projekt nach und nach verbessern.<\/p>\n<p><\/p>\n<h2 id=\"sozdanie-proekta-i-popytka-sozdat-suschnost-bez-avtorizacii\">Projekt erstellen und versuchen, eine Entit\u00e4t ohne Authorisierung zu erstellen<\/h2>\n<p><\/p>\n<p>Zun\u00e4chst erstellen wir ein neues Projekt (<strong>Datei<\/strong>-&gt;<strong>Neues Projekt<\/strong>). Wenn Sie die Anwendung zum ersten Mal starten, wird das neue Projekt automatisch ge\u00f6ffnet. Lassen Sie uns zun\u00e4chst einen Versuch machen, einen neuen Eintrag zu erstellen (vielleicht ist die Erstellung von Eintr\u00e4gen ohne Autorisierung m\u00f6glich). W\u00e4hlen Sie im Kontextmen\u00fc des Projektknotens die Punkte <strong>Knoten hinzuf\u00fcgen<\/strong> -&gt; <strong>RequestStep<\/strong>. Als Knotennamen w\u00e4hlen wir <strong>create-post<\/strong>. In der Folge wird im Baum ein neuer Knoten erstellt und der Reiter dieses Knotens ge\u00f6ffnet. Wir legen die folgenden Parameter der Anfrage fest:<\/p>\n<p><\/p>\n<ul>\n<li>Anfragetyp: 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>Anforderungstext: json mit dem Wert <code>{\"title\": \"New testmace quick start post\"}<\/code><br \/>\nWenn Sie alles richtig gemacht haben, sollte die Benutzeroberfl\u00e4che wie folgt aussehen:<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Schneller Start\" src=\"\/wp-content\/uploads\/2019\/12\/a5c81dc4977dd73a4975643bf8ced3da.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Wenn wir jedoch versuchen, die Anfrage auszuf\u00fchren, gibt der Server den Code 401 zur\u00fcck und ohne Autorisierung ist auf diesem Server nichts drin. Nun, das war grunds\u00e4tzlich zu erwarten).<\/p>\n<p><\/p>\n<h2 id=\"dobavlyaem-zapros-na-avtorizaciyu\">F\u00fcgen wir die Anfrage zur Autorisierung hinzu<\/h2>\n<p><\/p>\n<p>Wie bereits erw\u00e4hnt, gibt es einen POST-Endpunkt <code>\/login<\/code>, der als Anforderungstext json des Typs annimmt: <code>{\"username\": \"\", \"password\": \"\"}<\/code><header> <code>username<\/code> und <code>passwort<\/code> (wieder aus der oben genannten Einf\u00fchrung) haben Werte <code>admin<\/code> und <code>passwort<\/code> entsprechend. Als Antwort gibt dieser Endpunkt ein JSON \u00fcbergeben in der Form zur\u00fcck <code>{\"token\": \"\"}<\/code>. Wir werden es zur Authentifizierung nutzen. Erstellen wir <strong>RequestStep<\/strong> einen Knoten mit dem Namen <strong>login<\/strong>, als Vorfahren wird fungieren <strong>Projekt<\/strong> Knoten. Verschieben Sie diesen Knoten mithilfe von Drag-and-Drop im Baum h\u00f6her als den Knoten <strong>create-post<\/strong>. Wir werden dem neu erstellten Anfrage folgende Parameter zuweisen:<\/p>\n<p><\/p>\n<ul>\n<li>Anfragetyp: 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>Anforderungstext: json mit dem Wert <code>{\"username\": \"admin\", \"password\": \"password\"}<\/code><\/li>\n<\/ul>\n<p><\/p>\n<p>F\u00fchren Sie die Anfrage aus und erhalten Sie den zweihundertsten Code mit dem Token in der Antwort. So etwa:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Schneller 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\">Refaktorierung: Wir entfernen die Domain-Duplikation<\/h2>\n<p><\/p>\n<p>Aktuell sind die Anfragen nicht in einem einheitlichen Szenario verbunden. Doch das ist nicht der einzige Nachteil. Wenn man genauer hinschaut, erkennt man, dass die Domain in beiden Anfragen mindestens dupliziert wird. Nicht gut. H\u00f6chste Zeit, diesen Teil des zuk\u00fcnftigen Szenarios zu refaktorisieren, und dazu helfen uns Variablen.<\/p>\n<p><\/p>\n<p>In erster Ann\u00e4herung erf\u00fcllen Variablen dieselbe Rolle wie in anderen \u00e4hnlichen Werkzeugen und Programmiersprachen \u2013 Duplikation zu vermeiden, die Lesbarkeit zu erh\u00f6hen usw. Mehr \u00fcber Variablen kann man nachlesen in <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/user-variables\">unserer Dokumentation<\/a><\/noindex>. In diesem Fall ben\u00f6tigen wir benutzerdefinierte Variablen. <\/p>\n<p><\/p>\n<p>Definieren wir auf der Ebene des Projektknotens die Variablen <code>domain<\/code> mit dem Wert <code>https:\/\/testmace-quick-start.herokuapp.com<\/code>. Dazu ist es notwendig<\/p>\n<p><\/p>\n<ul>\n<li>Den Tab mit diesem Knoten zu \u00f6ffnen und auf das Taschenrechner-Symbol oben rechts zu klicken<\/li>\n<li>Darauf klicken <strong>+ VARIABLE HINZUF\u00dcGEN<\/strong><\/li>\n<li>Geben Sie den Namen und den Wert der Variablen ein<br \/>\nIn unserem Fall wird der Dialog mit der hinzugef\u00fcgten Variablen folgenderma\u00dfen aussehen:<\/li>\n<\/ul>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Schneller Start\" src=\"\/wp-content\/uploads\/2019\/12\/071ac6dca2c5a49b78b11719fae5f650.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>OK. Dank der Vererbung k\u00f6nnen wir diese Variable in Nachkommen jeder Verschachtelungsebene nutzen. In unserem Fall sind dies die Knoten <strong>login<\/strong> und <strong>create-post<\/strong>. Um die Variable im Textfeld zu nutzen, m\u00fcssen Sie schreiben <code>${}<\/code>. Zum Beispiel wird die URL f\u00fcr den Login zu <code>${domain}\/login<\/code>, entsprechend f\u00fcr <strong>create-post<\/strong> den Knoten wird die URL wie folgt aussehen <code>${domain}\/posts<\/code>.<\/p>\n<p><\/p>\n<p>So haben wir, nach dem DRY-Prinzip handelnd, das Szenario leicht verbessert.<\/p>\n<p><\/p>\n<h2 id=\"sohranyaem-token-v-peremennuyu\">Speichern Sie das Token in einer Variablen<\/h2>\n<p><\/p>\n<p>Da wir gerade von Variablen sprechen, m\u00f6chten wir dieses Thema weiter entwickeln. Momentan erhalten wir bei erfolgreichem Login vom Server ein Authentifizierungstoken, das wir in den folgenden Anfragen ben\u00f6tigen. Lassen Sie uns dieses Token in einer Variablen speichern. Da der Wert der Variablen zur Laufzeit des Szenarios bestimmt wird, verwenden wir daf\u00fcr einen speziellen Mechanismus \u2013 <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/user-variables\/dynamic-variables\">dynamische Variablen<\/a><\/noindex>.<\/p>\n<p><\/p>\n<p>Zuerst f\u00fchren wir die Anfrage zum Login aus. Im Tab <strong>Parsed<\/strong> Um die Antwort zu erhalten, fahren Sie mit der Maus \u00fcber das Token und w\u00e4hlen Sie im Kontextmen\u00fc (das entweder mit der rechten Maustaste oder durch Dr\u00fccken der Taste &#8230; ge\u00f6ffnet wird) die Option aus. <strong>Variable zuweisen<\/strong>Es erscheint ein Dialog mit den folgenden Feldern:<\/p>\n<p><\/p>\n<ul>\n<li><strong>Pfad<\/strong> \u2014 welcher Teil der Antwort verwendet wird (in unserem Fall ist das <code>body.token<\/code>)<\/li>\n<li><strong>Aktueller Wert<\/strong> \u2014 welcher Wert sich im Pfad befindet (in unserem Fall der Wert des Tokens)<\/li>\n<li><strong>Variablenname<\/strong> \u2014 Name der Variable, in die <strong>Aktueller Wert<\/strong> gespeichert wird. In unserem Fall wird das sein <code>token<\/code><\/li>\n<li><strong>Node<\/strong> \u2014 in welchem der Vorg\u00e4nger die Variable erstellt wird. <strong>Variablenname<\/strong>W\u00e4hlen wir Projekt.<\/li>\n<\/ul>\n<p><\/p>\n<p>Der ausgef\u00fcllte Dialog sieht wie folgt aus:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Schneller Start\" src=\"\/wp-content\/uploads\/2019\/12\/f524934dd1a4cb238afb6666135b360b.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>Jetzt wird bei jedem Ausf\u00fchren des Knotens <strong>login<\/strong> die dynamische Variable <code>token<\/code> mit dem neuen Wert aus der Antwort aktualisiert. Und diese Variable wird im <strong>Projekt<\/strong> Knoten gespeichert und dank der Vererbung den Nachkommen zur Verf\u00fcgung stehen.<\/p>\n<p><\/p>\n<p>Um auf dynamische Variablen zuzugreifen, muss man <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/variables\/variables\">die eingebaute Variable verwenden.<\/a><\/noindex> <code>$dynamicVar<\/code>Zum Beispiel, um auf das gespeicherte Token zuzugreifen, muss man <code>${$dynamicVar.token}<\/code>.<\/p>\n<p><\/p>\n<h2 id=\"prokidyvaem-avtorizacionnyy-token-v-zaprosy\">Den Autorisierungstoken in die Anfragen weitergeben.<\/h2>\n<p><\/p>\n<p>In den vorhergehenden Schritten haben wir den Autorisierungstoken erhalten und alles, was zu tun ist, ist, den Header hinzuzuf\u00fcgen <code>Authorization<\/code> mit dem Wert <code>Bearer<\/code> in alle Anfragen, die eine Autorisierung erfordern, einschlie\u00dflich <strong>create-post<\/strong>. Daf\u00fcr gibt es mehrere Methoden:<\/p>\n<p><\/p>\n<ol>\n<li>Kopieren Sie das Token manuell und f\u00fcgen Sie den Autorisierungsheader in die gew\u00fcnschten Anfragen ein. Diese Methode funktioniert, ist jedoch nur f\u00fcr Anfragen des Typs &#171;gemacht und weggeworfen&#187; geeignet. F\u00fcr das mehrmalige Ausf\u00fchren von Skripten ist sie nicht geeignet.<\/li>\n<li>Die Funktionalit\u00e4t der <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/work-with\/authorization\">Autorisierung<\/a><\/noindex>.<\/li>\n<li>Verwenden <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/other\/default-http-headers\">Standardheader nutzen.<\/a><\/noindex><\/li>\n<\/ol>\n<p><\/p>\n<p>Die Nutzung der zweiten Methode scheint offensichtlich, aber im Kontext dieses Artikels ist dieser Ansatz\u2026 uninteressant. Wirklich: Das Mechanismus der Autorisierungen ist Ihnen bereits aus anderen Tools bekannt (obwohl wir Dinge wie <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/work-with\/authorization#inherit-from-parent\">Vererbung von Autorisierungen<\/a><\/noindex>) haben, und es wird wahrscheinlich keine Fragen aufwerfen. <\/p>\n<p><\/p>\n<p>Eine andere Sache sind die Standardheader! Kurz gesagt, die Standardheader sind von Vorg\u00e4ngern vererbbare HTTP-Header, die standardm\u00e4\u00dfig zur Anfrage hinzugef\u00fcgt werden, es sei denn, sie werden ausdr\u00fccklich deaktiviert. Mit dieser Funktionalit\u00e4t kann man zum Beispiel eine benutzerdefinierte Autorisierung implementieren oder einfach Duplikate in den Szenarien vermeiden. Wir werden diese Funktion nutzen, um den Token in den Headern zu \u00fcbergeben.<\/p>\n<p><\/p>\n<p>Wir haben fr\u00fcher vorsorglich das Token in einer dynamischen Variable gespeichert <code>$dynamicVar.token<\/code> auf der Ebene des Project Knotens. Nun bleibt Folgendes zu tun:<\/p>\n<p><\/p>\n<ol>\n<li>Standard-Header definieren <code>Authorization<\/code> mit dem Wert <code>Bearer ${$dynamicVar.token}<\/code> auf der Ebene des Project Knotens. Dazu muss im Interface des Project Knotens der Dialog mit den Standard-Headern ge\u00f6ffnet werden (Taste <strong>Headers<\/strong> oben rechts) und der entsprechende Header hinzugef\u00fcgt werden. Der Dialog mit den ausgef\u00fcllten Werten w\u00fcrde folgenderma\u00dfen aussehen:<br \/>\n<img decoding=\"async\" alt=\"TestMace. Schneller Start\" src=\"\/wp-content\/uploads\/2019\/12\/9abd888cbf96e53b633e8f0fd3389297.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/li>\n<li>Diesen Header aus der Login-Anfrage entfernen. Das ist auch verst\u00e4ndlich: Zum Zeitpunkt des Logins haben wir noch kein Token und mit dieser Anfrage werden wir es gerade festlegen. Daher entfernen wir im Interface der Login-Anfrage auf der Registerkarte <strong>Headers<\/strong> im Bereich <strong>Inherited<\/strong> das H\u00e4kchen beim Authorization-Header. <\/li>\n<\/ol>\n<p><\/p>\n<p>Damit ist alles erledigt. Der Autorisierungs-Header wird nun zu allen Anfragen hinzugef\u00fcgt, die Nachkommen des Project Knotens sind, au\u00dfer des Login-Knotens. Das bedeutet, dass wir bereits ein funktionierendes Skript haben, und wir m\u00fcssen es nur noch starten. Das Skript kann durch Auswahl des Punkts <strong>Ausf\u00fchren<\/strong> im Kontextmen\u00fc des Project Knotens gestartet werden. <\/p>\n<p><\/p>\n<h2 id=\"proveryaem-korrektnost-sozdaniya-posta\">\u00dcberpr\u00fcfen der Korrektheit des Post-Erstellens<\/h2>\n<p><\/p>\n<p>In diesem Stadium kann unser Skript sich einloggen und mit dem Autorisierungstoken einen Post erstellen. Wir m\u00fcssen jedoch sicherstellen, dass der neu erstellte Post den richtigen Namen hat. Es bleibt also Folgendes zu tun:<\/p>\n<p><\/p>\n<ul>\n<li>Eine Anfrage zum Abrufen des Posts nach ID senden, <\/li>\n<li>\u00dcberpr\u00fcfen, dass der vom Server zur\u00fcckgegebene Name dem bei der Erstellung des Posts \u00fcbergebenen Namen entspricht.<\/li>\n<\/ul>\n<p><\/p>\n<p>Lassen Sie uns den ersten Schritt betrachten. Da der ID-Wert zur Laufzeit des Skripts bestimmt wird, m\u00fcssen wir eine dynamische Variable (nennen wir sie <code>postId<\/code>) aus dem Knoten <strong>create-post<\/strong> auf der Ebene des Project Knotens erstellen. Wie das geht, wissen wir bereits, es gen\u00fcgt, den Abschnitt <strong>Speichern Sie das Token in einer Variablen<\/strong>aufzusuchen. Es bleibt nur, eine Anfrage zum Abrufen des Posts nach dieser ID zu erstellen. Dazu erstellen wir einen RequestStep <strong>get-post<\/strong> mit den folgenden Parametern:<\/p>\n<p><\/p>\n<ul>\n<li>Anfragetyp: GET<\/li>\n<li>URL: ${domain}\/posts\/${$dynamicVar.postId}<\/li>\n<\/ul>\n<p><\/p>\n<p>F\u00fcr die Umsetzung des zweiten Schrittes m\u00fcssen wir uns mit <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\">Assertion<\/a><\/noindex> dem Knoten vertraut machen. Der Assertion-Knoten ist ein Knoten, der es erm\u00f6glicht, Pr\u00fcfungen f\u00fcr bestimmte Anfragen zu schreiben. Jeder Assertion-Knoten kann mehrere Aussagen (Pr\u00fcfungen) enthalten. Weitere Informationen zu den verschiedenen Arten von Assertions finden Sie in unserem <noindex><a rel=\"nofollow\" href=\"https:\/\/docs-ru.testmace.com\/node-types\/assertion\">Dokumentation<\/a><\/noindex>. Wir werden <code>Vergleich<\/code> Assertion mit dem Operator <code>equal<\/code>. Es gibt mehrere M\u00f6glichkeiten, Assertions zu erstellen:<\/p>\n<p><\/p>\n<ol>\n<li>Lange. Manuell aus dem Kontextmen\u00fc des RequestStep-Knotens einen Assertion-Knoten erstellen. Im erstellten Assertion-Knoten den gew\u00fcnschten Assertion hinzuf\u00fcgen und die Felder ausf\u00fcllen.<\/li>\n<li>Schnell. Einen Assertion-Knoten zusammen mit dem Assertion aus der Antwort des RequestStep-Knotens \u00fcber das Kontextmen\u00fc erstellen.<\/li>\n<\/ol>\n<p><\/p>\n<p>Wir nutzen die zweite Methode. So wird es f\u00fcr unseren Fall aussehen.<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"TestMace. Schneller Start\" src=\"\/wp-content\/uploads\/2019\/12\/7f1d81669cb4c10db5f0afa3bf04eddf.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>F\u00fcr diejenigen, die es nicht verstanden haben, passiert Folgendes:<\/p>\n<p><\/p>\n<ol>\n<li>Eine Anfrage im Knoten machen <strong>get-post<\/strong><\/li>\n<li>Im Tab <strong>Parsed<\/strong> im Antwort-Kontextmen\u00fc das Kontextmen\u00fc aufrufen und ausw\u00e4hlen <strong>Assertion erstellen<\/strong> -&gt; <strong>Vergleich<\/strong> -&gt; <strong>Gleich<\/strong><\/li>\n<\/ol>\n<p><\/p>\n<p>Herzlichen Gl\u00fcckwunsch, wir haben den ersten Test erstellt! Einfach, nicht wahr? Jetzt k\u00f6nnt ihr das Szenario vollst\u00e4ndig ausf\u00fchren und das Ergebnis genie\u00dfen. Es bleibt nur noch ein wenig zu refaktorisieren und in eine separate Variable auszulagern. Aber das lassen wir euch als Hausaufgabe) <code>title<\/code> In diesem Handbuch haben wir ein vollst\u00e4ndiges Szenario erstellt und gleichzeitig einige Funktionen unseres Produkts vorgestellt. Nat\u00fcrlich haben wir bei weitem nicht alle Funktionen genutzt, und in den kommenden Artikeln werden wir eine detaillierte \u00dcbersicht \u00fcber die M\u00f6glichkeiten von TestMace geben. Bleibt dran f\u00fcr Updates!<\/p>\n<p><\/p>\n<h1 id=\"zaklyuchenie\">Fazit<\/h1>\n<p><\/p>\n<p>P.S. F\u00fcr diejenigen, die keine Lust haben, alle Schritte nachzuvollziehen, haben wir freundlicherweise<\/p>\n<p><\/p>\n<p>mit dem Projekt aus dem Artikel bereitgestellt. Es kann \u00fcber <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/TestMace\/testmace-quick-start-project\">Repository<\/a><\/noindex> Projekt \u00f6ffnen <strong>Datei<\/strong> -&gt; <strong>und den Ordner Projekt ausw\u00e4hlen.<\/strong> \ud83e\udd47TestMace. Schneller Start | ProHoster<\/p>\n<p>Quelle: <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.1.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\/de\/blog\/news\/testmace-bystryj-start\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\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\/de\/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. Schneller Start | ProHoster","description":"Hallo zusammen.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/news\/testmace-bystryj-start","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/54167","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=54167"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/54167\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=54167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=54167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=54167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}