Scripting
Im Skript-Bereich können Sie Skripte erstellen, die vor, während oder nach der Ausführung eines Testfalls ausgeführt werden.
Das Implementieren von Skripten ist eine Expertenfunktion und sollte nur von erfahrenen Benutzern verwendet werden. Skripte bergen das Risiko eines zusätzlichen Wartungsaufwands und können zu instabilen (flaky) Testergebnissen führen.
Skripte werden generell im Kontext eines laufenden Tests im Browserfenster ausgeführt.
Sie haben daher den gleichen Zugriff wie der aktuell im Testautomatisierungstool angemeldete Benutzer.
Sie haben Zugriff auf das gesamte window-Objekt und können das DOM manipulieren, JavaScript ausführen und mit dem Browser interagieren.
Sie haben keinen direkten Zugriff auf msg.ZenTestAI selbst. Es ist Ihnen daher nicht möglich, Schritte, Testfälle oder Ausführungspläne zu manipulieren. Skripte werden in der isolierten Browser-Umgebung (Sandboxed) ausgeführt.
Die Hauptanwendungsfälle für Skripte sind:
- Sie möchten REST-APIs vor oder nach Tests für Setup- oder Cleanup-Aufgaben aufrufen (z. B. Datenvorbereitung).
- Sie möchten bestimmte technische Bedingungen überprüfen.
- Sie möchten einen spezifischen Anwendungsfall ausführen, der von msg.ZenTestAI nicht unterstützt wird (z. B. Klicken an Pixelpositionen, ...).
- Sie möchten das DOM oder JavaScript-Objekte im Browser manipulieren.
Skripte sollten einmalig entwickelt und in den Testfällen referenziert werden. Verwenden Sie Skripte nicht für testfallspezifische Logik. Falls Sie einen Testfall vollständig skripten müssen, wird empfohlen, diesen in einem traditionellen Testautomatisierungs-Framework zu entwickeln.
Skripte erstellen / bearbeiten

Beim Erstellen eines neuen Skripts können Sie Folgendes festlegen:
- Name: Ein eindeutiger Name für das Skript. Sie verwenden diesen Namen, um das Skript im Testfall zu referenzieren.
- Skript-Typ: Wann wird das Skript ausgeführt? Siehe Details weiter unten.
- Auf jedem Test im Tenant ausführen: Wenn diese Option aktiviert ist, müssen die Skripte nicht mehr manuell referenziert werden, sondern werden automatisch vor bzw. nach jedem Testfall im Tenant ausgeführt.
- Skript: Das eigentliche Skript.
Eine Schaltfläche Nutzungsreferenzen im Skript-Editor listet alle Tests auf, die derzeit auf das Skript verweisen — nützlich vor dem Umbenennen oder Löschen.
Die folgenden Skript-Typen stehen zur Verfügung:
- Before (Davor): Das Skript wird vor einem Test-Element (Schritt, Testfall oder Ausführungsplan) ausgeführt.
- After (Danach): Das Skript wird nach einem Test-Element (Schritt, Testfall oder Ausführungsplan) ausgeführt.
- Instead (Stattdessen): Das Skript wird anstelle des Testschritts ausgeführt (in diesem Fall müssen Sie das Skript in den Details des Testschritts auswählen).
- After All (Execution Plan): Das Skript wird einmalig ausgeführt, nachdem ALLE Testfälle eines Ausführungsplans abgeschlossen wurden. Siehe Teardown-Skripte für Details.
Skripte verwenden
Sie können Skripte in Testfällen, Testfall-Schritten und Ausführungsplänen verwenden. Für Testfälle und Ausführungspläne können Sie die Skripttypen "Before" und "After" verwenden. Skripte für Testfälle werden erst nach erfolgreicher Anmeldung ausgeführt. Es gibt keine Möglichkeit, Skripte vor oder während des Logins auszuführen.
Für Schritte können Sie die auszuführenden Skripte im Menü der Testschritt-Details referenzieren. Sie müssen das Skript nicht in der Beschreibung des Testschritts erwähnen. Das Skript wird automatisch erkannt und ausgeführt.
Sie können mehrere Skripte in einem Testfall oder Testschritt referenzieren. Die Skripte werden in der Reihenfolge ihrer Referenzierung ausgeführt.
Skript-Regeln und Debugging
Beim Schreiben eines Skripts gelten folgende Regeln:
- Sie müssen Standard-TypeScript schreiben und dabei nur auf die bereitgestellte API und Browser-Funktionen zugreifen.
- Sie erhalten volle Autocomplete-Unterstützung durch IntelliJ.
- Sie haben Zugriff auf Teile der msg.ZenTestAI KI-APIs sowie alle Browser-APIs.
- Ihr Code wird im Kontext einer asynchronen Funktion aufgerufen. Sie können daher
async/awaitfür asynchrone Operationen verwenden. Das Skript wird abgeschlossen und der Test wird fortgesetzt, sobald das Skript fertig ist (einschließlich asynchroner Operationen). - Es gibt ein Timeout von 300 Sekunden. Wenn das Skript in dieser Zeit nicht beendet wurde, wird der Test als fehlgeschlagen markiert.
- Sie können das bereitgestellte
api-Objekt verwenden, um innerhalb Ihres Codes auf KI-Funktionalitäten zuzugreifen. - Es gibt keine Debugging-Funktionalität, aber Sie können
api.logverwenden, um Nachrichten zu protokollieren. Alle von Ihrem Code geschriebenen Protokolle sind im Testausführungsprotokoll sichtbar. - Jede unbehandelte Ausnahme (Exception) bzw. jeder Fehler führt zu einer fehlgeschlagenen Testausführung.
Der Startcode sieht immer wie folgt aus:
handle = async (api: ZenTestAPI) => {
// Ihre Skript-Logik hier
};
Ihr gesamter Code sollte innerhalb der handle-Funktion platziert werden. Wie ersichtlich, haben Sie vollen Zugriff auf das API-Objekt, das Ihnen folgende Funktionalitäten bietet:
- Klicken und Eingeben von Elementen per HTMLElement oder Text (im Falle von textbasiertem Zugriff wird das Element durch die KI gesucht).
- Schritte ausführen (per Text).
- Assertionen (Zusicherungen) basierend auf Text.
- Abrufen von Daten vom aktuellen Bildschirm basierend auf KI-Funktionalität.
- Parameter abrufen und setzen.
- Geolokalisierungen festlegen.
- Protokollieren (log) und Fehler auslösen (fail).
Beispielcode:
handle = async (api: ZenTestAPI) => {
// Kommagetrennte Liste aller Menüpunkte oben rechts extrahieren
const allMenuItems = await api.extractData("Comma seperated list of all menu items in the top right");
const allPlants = allMenuItems.value.split(",");
for ( let i=0;i< allPlants.length;i++) {
await api.click(`Menu Item ${ allPlants[i] }`);
await api.assert(`Expect to see the at least part of the menu item title ${ allPlants[i] } in the page title`);
await api.click(`CLick the back button next to the title ${ allPlants[i] }`);
}
};
Derzeit gibt es kein Rückschreiben in die Testausführung selbst. Sie können daher die Testausführung mittels Skripten nicht beeinflussen. Falls Sie interessante Anwendungsfälle hierfür haben, zögern Sie nicht, uns über hello@zentest.ai zu kontaktieren.
Teardown-Skripte
Teardown-Skripte (Skript-Typ: After All (Execution Plan)) sind spezielle Skripte, die einmalig nach Abschluss aller Testfälle in einem Ausführungsplan ausgeführt werden, unabhängig davon, ob einzelne Tests bestanden haben oder fehlgeschlagen sind.
Anwendungsfälle
- Aufräumarbeiten: Testdaten zurücksetzen, temporäre Dateien löschen oder den Systemzustand wiederherstellen.
- Abschließende Überprüfung: Den gesamten Systemzustand nach Durchlauf aller Tests prüfen.
- Reporting: Zusammenfassende Berichte erstellen oder Benachrichtigungen senden.
- Datenaggregation: Daten aus allen Testausführungen sammeln und verarbeiten.
Verwendung von Teardown-Skripten
- Skript erstellen: Erstellen Sie im Skript-Bereich ein neues Skript mit dem Skript-Typ After All (Execution Plan).
- Ausführungsplan zuweisen: Wählen Sie in der Konfiguration des Ausführungsplans (sowohl SIMPLE als auch EXTENDED) Ihr Teardown-Skript aus dem Dropdown-Menü Teardown Script aus.
Im Gegensatz zu Before/After-Skripten können Teardown-Skripte nicht einzelnen Testfällen oder Schritten zugewiesen werden. Sie sind nur für Ausführungspläne verfügbar.
Ausführungsverhalten
- Das Teardown-Skript wird nach allen Testfällen ausgeführt.
- Es wird unabhängig von den Testergebnissen ausgeführt – selbst wenn alle Tests fehlschlagen, wird das Teardown ausgeführt.
- Das Teardown verwendet denselben Agenten und dieselbe Basis-URL wie der erste Test im Ausführungsplan (für die Authentifizierung).
- Alle gemerkten Parameterwerte aus den ausgeführten Tests stehen im Teardown-Skript zur Verfügung.
Zugriff auf Parameter
Das Teardown-Skript hat Zugriff auf alle Parameter, die während der Testausführung "gemerkt" (remembered) wurden. Verwenden Sie die API, um auf diese Werte zuzugreifen:
handle = async (api: ZenTestAPI) => {
// Abrufen eines Parameters, der während der Testausführung gemerkt wurde
const orderId = await api.getParameter("orderId");
// Verwendung für Aufräumarbeiten
await api.log(`Cleaning up order: ${orderId}`);
// Cleanup-API aufrufen. `fetch` verwendet dieselbe Basis-URL wie die Testausführung.
const response = await fetch(`/api/orders/${orderId}`, { method: 'DELETE' });
if (!response.ok) {
await api.fail("Failed to cleanup order");
}
};
Ausführungshistorie
Wenn Sie ein Teardown-Skript aus einem Ausführungsplan entfernen, bleiben die historischen Ausführungsdatensätze erhalten. Sie können vergangene Teardown-Ausführungen weiterhin in der Ausführungshistorie sehen, auch wenn das Teardown-Skript entfernt oder geändert wurde.
Wenn Sie dasselbe Teardown-Skript nach dem Entfernen erneut einem Ausführungsplan hinzufügen, wird ein neuer Teardown-Test erstellt. Die alte Ausführungshistorie bleibt davon getrennt und ist mit dem vorherigen Teardown-Test verknüpft.