Makros
Makros sind kleine, benannte Funktionen, die Sie innerhalb jedes Testfeldes aufrufen können (Schrittbeschreibung, Start-URL, Parameterwert, …). Sie nehmen Argumente entgegen, führen eine Logik aus und geben einen einzelnen Wert zurück, der zur Laufzeit in das Feld eingefügt wird.
Typische Anwendungsfälle:
- Berechnung eines Datums relativ zum heutigen Tag (z. B. "morgen", "in 10 Arbeitstagen"),
- Generierung von Zufallsdaten (Zahlen, Namen, Identifikatoren),
- Formatierung oder Umwandlung eines Wertes (Großschreibung eines Parameters, Entfernen von Leerzeichen, …),
- Extrahieren eines Wertes aus einem längeren String,
- Zentralisierung jeglicher kleiner Logikbausteine, die Sie sonst in vielen Tests wiederholen würden.
Wie sich Makros von Parametern und Skriptfunktionen unterscheiden
Es ist leicht, die drei Mechanismen für "dynamische Werte" in msg.ZenTestAI zu verwechseln. Die kürzeste Zusammenfassung:
| Konzept | Syntax | Was es ist |
|---|---|---|
| Parameter | [[parameterName]] | Ein Platzhalter für Testdaten, der pro Variante (oder als Konstante) ausgefüllt wird. Statisch – keine Logik. |
| Makro | ${=keyword(arg1, arg2)} | Eine wiederverwendbare Funktion, die einen berechneten Wert zurückgibt. Kann Parameterreferenzen als Argumente annehmen. |
| Skriptfunktion | Konfiguriert im Tab "Allgemein" | Ein JavaScript-Lifecycle-Hook (vor/nach dem gesamten Test oder als Schritt), der an festen Punkten ausgeführt wird. Kein wertrückgebender Ausdruck. |
Ein Parameter ist Daten. Ein Makro ist eine Funktion. Eine Skriptfunktion ist ein Hook. Makros sind normalerweise die richtige Wahl, wenn Sie "einen im laufenden Betrieb berechneten Wert" benötigen.
Aufrufen eines Makros
Ein Makroaufruf wird mit der speziellen Syntax geschrieben:
${=macroKeyword(argument1, argument2, ...)}
Zum Beispiel mit dem eingebauten global_addDays-Makro:
${=global_addDays(7)} → heute + 7 Tage, formatiert als YYYY-MM-DD
${=global_addDays(-1, DD.MM.YYYY)} → gestern, formatiert als DD.MM.YYYY
${=global_addDays(30, YYYY-MM-DD, [[startDate]])} → 30 Tage nach dem [[startDate]]-Parameter
Makro-Argumente können einfache Werte oder Parameterreferenzen in der [[parameterName]]-Syntax sein – sie werden ersetzt, bevor das Makro ausgeführt wird.
Einfügen per Autocomplete
Normalerweise müssen Sie die Syntax nicht auswendig lernen. Geben Sie in einem beliebigen Eingabefeld, das Makros unterstützt, einfach das Zeichen = ein. Die Autocomplete-Auswahl bietet Ihnen die in Ihrem Tenant verfügbaren Makros (und Parameter) an. Wählen Sie eines aus, füllen Sie die Argumente im erscheinenden Dialog aus, und der Editor fügt den vollständig formatierten ${=...}-Aufruf für Sie ein.
Das Autocomplete zeigt auch die Business-Signatur des Makros an (z. B. "die Summe von $0 und $1"), sodass Sie nach dem auswählen können, was das Makro tut, anstatt nach seinem Schlüsselwort.
Wo Makros verwendet werden können
Makros werden in jedem Feld akzeptiert, das eine Schritt- oder URL-Beschreibung aufnimmt, einschließlich:
- der Start-URL auf dem Tab "Allgemein",
- jeder Schrittbeschreibung auf dem Tab "Schritte",
- schrittspezifischen Feldern wie XPath und Zusätzliche Anweisungen für die KI,
- Parameterwerten in Varianten.
Makros werden zur Ausführungszeit jedes Mal ausgewertet, wenn das Feld gelesen wird – ein Makro, das in vielen Schritten verwendet wird, wird also für jeden Schritt neu ausgewertet.
Makros können keine anderen Makros aufrufen (keine Verschachtelung). Wenn Sie eine Komposition benötigen, implementieren Sie diese innerhalb des Skripts des Makros selbst.
Die Makro-Seite
Alle Makros für den aktuellen Tenant werden unter Zusätzliche Funktionen → Makros verwaltet.

Die Liste gruppiert Makros in Ordnern. Die Symbolleiste bietet:
- Suche – Filtern nach Makroname oder Schlüsselwort.
- Filter – Anzeigen/Ausblenden von Teilmengen (z. B. globale vs. tenant-spezifische Makros).
- Neuer Ordner – Hinzufügen eines Ordners zur Organisation Ihrer Makros.
- Makro erstellen – Erstellen eines neuen Tenant-Makros von Grund auf.
Jede Makrozeile zeigt ihren Namen und ein Global-Badge für eingebaute, systemverwaltete Makros. Tenant-Makros haben einen Ziehpunkt, um sie neu anzuordnen oder zwischen Ordnern zu verschieben. Ordner, die nur globale Makros enthalten, zeigen ein Schloss-Symbol – sie können nicht bearbeitet werden. Die Ordner-Mechanik ist detailliert in Ordner beschrieben.
Eingebaute (Globale) Makros
msg.ZenTestAI wird mit einer kleinen Auswahl globaler Makros ausgeliefert, die jedem Tenant sofort zur Verfügung stehen. Sie können diese nicht bearbeiten oder löschen, aber Sie können sie wie Ihre eigenen aufrufen.
| Schlüsselwort | Ordner | Was es tut |
|---|---|---|
global_addDays | Datumsfunktionen | Addiert (oder subtrahiert, falls negativ) die angegebene Anzahl an Tagen zu einem Datum und gibt das formatierte Ergebnis zurück. Standardmäßig wird das heutige Datum verwendet, wenn kein Eingabedatum angegeben ist; das Standard-Ausgabeformat ist YYYY-MM-DD. |
global_add | Mathefunktionen | Gibt die Summe zweier Zahlen zurück. |
Im Laufe der Zeit können weitere eingebaute Makros hinzugefügt werden – überprüfen Sie die Makro-Seite in Ihrem Tenant auf die aktuelle Liste.
Verwenden Sie die Autocomplete-Auswahl (=), um die in Ihrem Tenant verfügbaren Makros zu entdecken, anstatt sich auf diese Liste zu verlassen.
Tenant-Makros
Sie können Ihre eigenen Makros auf der Makros-Seite über Makro erstellen definieren. Der Editor öffnet sich in einer Seitenleiste:

Allgemein
- Name – der lesbare Name, der in der Liste und der Autocomplete-Auswahl angezeigt wird.
- Beschreibung – was das Makro tut. Wird in der Autocomplete-Auswahl als Hilfetext angezeigt.
- Aufrufkontext – die Business-Signatur, die der KI-Agent bei der Interpretation Ihres Schrittes sieht. Verwenden Sie
$0,$1, … als Platzhalter für die Makro-Argumente. Umschließen Sie ein Fragment mit[? ... ?], um es optional zu machen (z. B.das Datum $0 Tage[? nach $2?][? im Format $1?]rendert die Teile nach / im Format nur, wenn diese Argumente bereitgestellt werden). - Ordner – wo sich das Makro in der Hierarchie der Makro-Seite befindet.
- Parameter – die Argumente des Makros in der richtigen Reihenfolge. Jeder Parameter hat einen Namen, einen Typ (Text, Zahl oder Boolean), eine optionale Beschreibung und ein optionales Flag, ob das Argument beim Aufruf weggelassen werden darf.
Prompt & Generierung
Der Rumpf eines Makros ist JavaScript. Normalerweise schreiben Sie diesen nicht von Hand:
- Makro-Funktionalität – beschreiben Sie in einfacher Sprache, was das Makro tun soll, welche Argumente es entgegennehmen soll und welchen Wert es zurückgeben soll.
- Das System verwendet einen KI-Assistenten, um die Beschreibung in eine funktionierende JavaScript-Funktion zu übersetzen, die in den Bereich Generiertes Skript eingefügt wird.
- Sie können das generierte Skript im Monaco-Editor überprüfen und anpassen oder eine Neugenerierung mit einem verfeinerten Prompt auslösen.
Sie können ein Makro testen, bevor Sie es speichern, indem Sie Beispielargumentwerte bereitstellen und es in einer Sandbox ausführen – nützlich, um zu überprüfen, ob die generierte Logik das tut, was Sie möchten.
Bearbeiten und Löschen
Tenant-Makros können frei bearbeitet und gelöscht werden. Wenn Sie das Schlüsselwort, die Parameter oder das Skript eines Makros ändern, warnt Sie msg.ZenTestAI, falls vorhandene Testschritte darauf verweisen, sodass Sie diese vor dem Speichern auf Kompatibilität prüfen können. Verwenden Sie die Schaltfläche Verwendungsnachweise im Makro-Editor, um alle Tests anzuzeigen, die das Makro derzeit aufrufen.
Berechtigungen
Das Erstellen, Bearbeiten und Löschen von Makros erfordert Bearbeitungsrechte für den Tenant. Jeder, der Zugriff auf den Tenant hat, kann vorhandene Makros in seinen Tests verwenden.
Wie Makros ausgewertet werden
Makros werden zum Zeitpunkt der Testausführung pro Schritt ausgewertet:
- Parameter in Argumenten (
[[...]]) werden durch ihre konkreten Werte ersetzt. - Das Skript des Makros wird ausgeführt und erzeugt einen Rückgabewert.
- Der resultierende Wert ersetzt den
${=...}-Aufruf im Schritt (oder URL oder Parameterwert).
Wenn ein Makro bei der Auswertung einen Fehler verursacht, schlägt der Schritt mit der Fehlermeldung des Makros fehl, die auch in das Ausführungsprotokoll geschrieben wird.
Makroergebnisse werden nicht zwischen Schritten geteilt – jeder Aufruf wird unabhängig ausgewertet. Wenn Sie einen einzelnen Wert benötigen, der über den gesamten Test hinweg stabil ist (z. B. ein Zeitstempel, der von jedem Schritt geteilt wird), speichern Sie ihn stattdessen in einem Parameter.