
Hallo zusammen. Wir treten langsam aus dem Schatten und setzen unsere Artikelreihe über unser Produkt fort. Nach dem Einführungstext haben wir viele Rückmeldungen (hauptsächlich positiv), Vorschläge und Fehlerberichte erhalten. Heute zeigen wir es in Aktion, und ihr könnt einige Funktionen unserer Anwendung zu schätzen wissen. Für ein vollständiges Eintauchen empfehle ich, unsere Dokumentation unter aufzusuchen. Also, lasst uns anfangen!
Installation von
Beginnen wir mit den Basics. Die Anwendung ist verfügbar und kann tatsächlich auf drei Plattformen getestet werden – Linux, Windows, MacOS. Ihr könnt den Installer für das gewünschte OS von . Für die Linux-Nutzer gibt es die Möglichkeit, ein zu installieren. Wir hoffen sehr, dass wir bald auch im Microsoft Store und im App Store vertreten sind (ist das nötig? Was denkt ihr?).
Test-Szenario
Wir haben das folgende Standard-Szenario gewählt:
- melden uns an: Benutzer – admin, Passwort – password
- fügen einen neuen Eintrag hinzu
- überprüfen die korrekte Hinzufügung des Eintrags
Wir werden auf testen . Dies ist ein gewöhnlicher , gut geeignet für das Testen ähnlicher Anwendungen. Wir haben gerade die Token-Authentifizierung für alle json-server-Routen hinzugefügt und die Login-Methode zur Beschaffung des Tokens erstellt. Wir werden schrittweise vorgehen und unser Projekt kontinuierlich verbessern.
Erstellen eines Projekts und versuchen, eine Entität ohne Authentifizierung zu erstellen
Zuerst erstellen wir ein neues Projekt (Datei->Neues Projekt). Wenn Sie die Anwendung zum ersten Mal starten, wird das neue Projekt automatisch geöffnet. Lassen Sie uns zunächst versuchen, eine Anfrage zum Erstellen eines neuen Eintrags zu machen (vielleicht ist das Erstellen von Einträgen ohne Authentifizierung möglich). Wählen Sie im Kontextmenü des Projektknotens die Punkte Knoten hinzufügen -> RequestStep. Geben Sie als Knotennamen create-postein. Dadurch wird ein neuer Knoten im Baum erstellt und der Tab für diesen Knoten geöffnet. Wir setzen die folgenden Anfrageparameter fest:
- Anfrage-Typ: POST
- url:
- Anfragekörper: json mit dem Wert
{"title": "Neuer Testartikel Schnellstartbeitrag"}
Wenn Sie alles richtig gemacht haben, sollte die Benutzeroberfläche folgendermaßen aussehen:

Wenn wir jedoch versuchen, die Anfrage auszuführen, gibt der Server den HTTP-Statuscode 401 zurück und ohne Authentifizierung dürfen wir auf diesem Server nichts erwarten. Nun, das ist im Grunde genommen erwartbar).
Wir fügen die Anfrage zur Authentifizierung hinzu.
Wie bereits erwähnt, haben wir einen POST-Endpunkt /login, der als Anfrage-Body JSON vom Typ erwartet: {"username": "", "password": ""}, wobei Benutzername und password (nochmals, aus der obigen Einführung) haben die Werte admin und password entsprechend. Als Antwort gibt dieser Endpunkt JSON vom Typ zurück {"token": ""}. Wir werden ihn zur Authentifizierung verwenden. Lassen Sie uns erstellen RequestStep einen Knoten mit dem Namen login, der Knoten wird als Elternteil fungieren Projekt . Verschieben Sie diesen Knoten mit Drag-and-Drop im Baum über den Knoten create-post. Lassen Sie uns dem neu erstellten Anfrage die folgenden Parameter zuweisen:
- Anfrage-Typ: POST
- url:
- Anfragekörper: json mit dem Wert
{"username": "admin", "password": "password"}
Führen Sie die Anfrage aus und erhalten Sie den Statuscode 200 mit dem Token in der Antwort. So sieht das aus:

Refactoring: Entfernen von Duplikaten der Domain
Derzeit sind die Anfragen nicht in ein einheitliches Szenario verbunden. Aber das ist nicht der einzige Nachteil. Wenn man genauer hinsieht, kann man feststellen, dass die Domain in beiden Anfragen mindestens doppelt vorkommt. Das ist nicht gut. Es ist an der Zeit, diesen Teil des zukünftigen Szenarios zu refaktorisieren, und dabei helfen uns Variablen.
Im ersten Ansatz erfüllen Variablen dieselbe Rolle wie in anderen ähnlichen Werkzeugen und Programmiersprachen – Duplikate zu vermeiden, die Lesbarkeit zu erhöhen usw. Mehr über Variablen kann man in den . In diesem Fall benötigen wir benutzerdefinierte Variablen.
Wir definieren auf Ebene des Project-Knotens eine Variable domain mit dem Wert https://testmace-quick-start.herokuapp.com. Dazu ist es notwendig
- Den Tab des entsprechenden Knotens zu öffnen und auf das Kalkulatorsymbol oben rechts zu klicken.
- Klicken Sie auf + VARIABLE HINZUFÜGEN
- Geben Sie den Namen und den Wert der Variable ein.
In unserem Fall wird der Dialog mit der hinzugefügten Variable wie folgt aussehen:

OK. Jetzt können wir dank der Vererbung diese Variable in Nachfolgern beliebiger Verschachtelungstiefen verwenden. In unserem Fall sind das die Knoten login und create-post. Um die Variable im Textfeld zu verwenden, muss man schreiben ${}. Zum Beispiel wird die URL für den Login umgewandelt in ${domain}/login, entsprechend für create-post wird die URL des Knotens so aussehen ${domain}/posts.
So haben wir, gemäß dem DRY-Prinzip, das Szenario etwas verbessert.
Wir speichern das Token in einer Variablen.
Da das Thema Variablen zur Sprache kommt, lassen Sie uns ein wenig tiefer in dieses Thema einsteigen. Derzeit erhalten wir im Falle eines erfolgreichen Logins vom Server ein Authentifizierungstoken, das wir bei nachfolgenden Anfragen benötigen. Lassen Sie uns dieses Token in einer Variablen speichern. Da der Wert der Variablen zur Laufzeit des Skripts bestimmt wird, verwenden wir dafür einen speziellen Mechanismus — .
Um zu beginnen, führen wir eine Login-Anfrage aus. Gehen Sie zu dem Tab Parsed Bewegen Sie die Maus über das Token in der Antwort und wählen Sie im Kontextmenü (das Sie entweder mit der rechten Maustaste oder durch Klicken auf die Schaltfläche … aufrufen können) den Punkt Variable zuweisen. Ein Dialog mit den folgenden Feldern erscheint:
- Path — welcher Teil der Antwort verwendet wird (in unserem Fall ist das
body.token) - Aktueller Wert — welches Wert sich im Pfad Path befindet (in unserem Fall ist es der Wert des Tokens)
- Variablenname — der Name der Variablen, in die Aktueller Wert gespeichert wird. In unserem Fall wird dies sein
Token - Knoten — in welchem der Vorfahren die Variable erstellt wird Variablenname. Wählen wir Project
Der ausgefüllte Dialog sieht wie folgt aus:

Jetzt wird bei jedem Ausführen des Knoten login die dynamische Variable Token mit dem neuen Wert aus der Antwort aktualisiert. Und diese Variable wird in Projekt Durch Vererbung wird es für Nachkommen verfügbar sein.
Um auf dynamische Variablen zuzugreifen, müssen Sie $dynamicVarverwenden. Zum Beispiel, um auf den gespeicherten Token zuzugreifen, müssen Sie ${$dynamicVar.token}.
den Autorisierungs-Token in die Anfragen einfügen.
In den vorherigen Schritten haben wir den Autorisierungs-Token erhalten und alles, was Sie tun müssen, ist den Header Authorization mit dem Wert Bearer in alle anfordernden Anfragen einzufügen, die eine Autorisierung erfordern, einschließlich in create-post. Dafür gibt es mehrere Wege:
- Den Token manuell kopieren und den Autorisierungsheader in die gewünschten Anfragen einfügen. Diese Methode funktioniert, ist jedoch auf Anfragen des Typs „gemacht und weggeworfen“ beschränkt. Für die mehrmalige Ausführung von Szenarien ist sie nicht geeignet.
- Die Funktionalität der .
- Verwenden
Die Verwendung der zweiten Methode scheint offensichtlich, jedoch ist dieser Ansatz im Kontext dieses Artikels… uninteressant. Nun, tatsächlich: der Autorisierungsmechanismus ist Ihnen mehr oder weniger aus anderen Tools bekannt (auch wenn wir Dinge wie ) haben und wahrscheinlich keine Fragen aufwerfen wird.
Eine andere Sache sind die Standard-Header! Um es kurz zu machen: Standard-Header sind vererbte HTTP-Header, die standardmäßig zur Anfrage hinzugefügt werden, es sei denn, sie werden ausdrücklich deaktiviert. Mit dieser Funktionalität kann man zum Beispiel eine benutzerdefinierte Authentifizierung realisieren oder einfach Duplikate in Szenarien vermeiden. Nutzen wir diese Funktion, um das Token in den Headern zu übertragen.
Zuvor haben wir das Token in einer dynamischen Variable gespeichert. $dynamicVar.token auf der Ebene des Project-Knotens. Jetzt bleibt Folgendes zu tun:
- Den Standard-Header festlegen.
Authorizationmit dem WertBearer ${$dynamicVar.token}auf der Ebene des Project-Knotens. Dazu muss im Interface des Project-Knotens das Dialogfeld mit den Standard-Headern geöffnet werden (Taste Headers oben rechts) und der entsprechende Header hinzugefügt werden. Das Dialogfeld mit den ausgefüllten Werten sieht wie folgt aus:

- Diesen Header aus der Login-Anfrage entfernen. Das ist verständlich: Zum Zeitpunkt des Logins haben wir noch kein Token, und mit dieser Anfrage werden wir es tatsächlich festlegen. Daher entfernen wir im Interface der Login-Anfrage auf dem Tab Headers im Bereich Inherited das Häkchen bei dem Authorization-Header.
Das ist alles. Jetzt wird der Autorisierungsheader zu allen Anfragen hinzugefügt, die Nachkommen des Projektknotens sind, außer dem Login-Knoten. Das bedeutet, dass wir in diesem Stadium bereits das Skript vorbereitet haben und es nur noch ausführen müssen. Das Skript kann gestartet werden, indem Sie den Punkt wählen Ausführen im Kontextmenü des Projektknotens.
Überprüfen der Korrektheit der Erstellung des Beitrags
In diesem Stadium kann unser Skript sich einloggen und, unter Verwendung des Autorisierungstokens, einen Beitrag erstellen. Wir müssen jedoch sicherstellen, dass der neu erstellte Beitrag den korrekten Namen hat. Im Grunde genommen bleibt uns Folgendes zu tun:
- Eine Anfrage zum Abrufen des Beitrags über die ID senden,
- Überprüfen, ob der Name, der vom Server zurückgegeben wird, dem Namen entspricht, der bei der Erstellung des Beitrags übergeben wurde.
Betrachten wir den ersten Schritt. Da der Wert der ID zur Laufzeit des Skripts bestimmt wird, müssen wir eine dynamische Variable (nennen wir sie postId) aus dem Knoten create-post auf der Ebene des Projektknotens erstellen. Wie dies zu tun ist, wissen wir bereits, wir müssen nur auf den Abschnitt Wir speichern das Token in einer Variablen.verweisen. Es bleibt nur, die Anfrage zum Abrufen des Beitrags über diese ID zu erstellen. Dafür erstellen wir einen RequestStep get-post mit den folgenden Parametern:
- Anfragetyp: GET
- URL: ${domain}/posts/${$dynamicVar.postId}
Um den zweiten Schritt umzusetzen, müssen wir uns mit dem Knoten vertraut machen. Der Assertion-Knoten ist ein Knoten, der das Schreiben von Prüfungen für bestimmte Anfragen ermöglicht. Jeder Assertion-Knoten kann mehrere Aussagen (Prüfungen) enthalten. Mehr Informationen zu den verschiedenen Arten von Assertions finden Sie in unserem . Wir werden Vergleichen Assertion mit dem Operator gleich. Es gibt mehrere Möglichkeiten, Assertions zu erstellen:
- Lang. Manuell aus dem Kontextmenü des RequestStep-Knotens einen Assertion-Knoten erstellen. Im erstellten Assertion-Knoten die gewünschte Assertion hinzufügen und die Felder ausfüllen.
- Schnell. Einen Assertion-Knoten zusammen mit der Assertion aus der Antwort des RequestStep-Knotens über das Kontextmenü erstellen.
Wir nutzen die zweite Methode. So wird es für unseren Fall aussehen.

Für diejenigen, die es nicht verstanden haben, passiert hier Folgendes:
- Eine Anfrage im Knoten get-post
- Im Tab Parsed antworten, das Kontextmenü aufrufen und auswählen Assertion erstellen -> Vergleichen -> Gleich
Herzlichen Glückwunsch, wir haben den ersten Test erstellt! Einfach, nicht wahr? Jetzt können Sie das Szenario vollständig ausführen und das Ergebnis genießen. Es bleibt nur noch wenig zu refaktorisieren und in eine separate Variable auszulagern. Aber das überlassen wir Ihnen als Hausaufgabe) Anrede в отдельную переменную. Но мы оставим это вам в качестве домашнего задания)
Fazit
In diesem Leitfaden haben wir ein vollständiges Szenario erstellt und gleichzeitig einige Funktionen unseres Produkts überprüft. Natürlich haben wir nicht alle Funktionen genutzt, und in den kommenden Artikeln werden wir eine detaillierte Übersicht über die Möglichkeiten von TestMace geben. Bleiben Sie dran für Updates!
P.S. Für diejenigen, die nicht alle Schritte nachstellen möchten, haben wir freundlicherweise das Projekt aus dem Artikel erstellt. Es kann geöffnet werden über Datei -> Projekt öffnen und den Ordner Projekt auswählen.
Quelle: habr.com

