Schleifen und Bedingungen
Schleifen und Bedingungen ermöglichen es Ihnen, Tests zu erstellen, die sich an Daten und Kontext anpassen, ohne dass Sie benutzerdefinierten Code schreiben müssen. msg.ZenTestAI bietet verschiedene Stellen an, an denen diese Konstrukte eingesetzt werden können – jeweils mit unterschiedlichen Abwägungen in Bezug auf Geltungsbereich (Scope) und Determiniertheit.
Die allgemeine Empfehlung:
- Verwenden Sie für Bedingungen bevorzugt die strukturierten Optionen (Einstellungen auf Aktivitäts-, Snippet- und Schritt-Ebene). Reservieren Sie Inline-„if ...“-Klauseln im Schritt-Prompt nur für wirklich einfache Fälle.
- Verwenden Sie für Schleifen immer die strukturierten Optionen für Aktivitäten oder Snippets. Inline-Schleifen-Hinweise in Schritt-Prompts funktionieren gelegentlich, sind aber für alles, was über eine Handvoll Iterationen hinausgeht, unzuverlässig.
Bedingungen
Eine Bedingung ist ein Ausdruck, der entscheidet, ob ein Teil des Tests überhaupt ausgeführt wird. msg.ZenTestAI wertet Bedingungen an vier Stellen aus, in zunehmender Reihenfolge der Determiniertheit:
1. Bedingung auf Aktivitäts-Ebene
Öffnen Sie die Einstellungs-Sidebar einer Aktivität und verwenden Sie das Feld Condition. Die Bedingung wird in natürlicher Sprache geschrieben und kann Parameter mit [[parameterName]] referenzieren. Beispiele:
[[environment]] != "production"
the cookie banner is visible
[[country]] == "DE" and [[loggedIn]]
Zum Ausführungszeitpunkt wertet der Runner die Bedingung aus. Wenn sie falsch ist, wird jeder Schritt innerhalb der Aktivität übersprungen.
2. Bedingung auf Snippet-Ebene
Eine Bedingung kann an einen Snippet-Referenz-Schritt im aufrufenden Test angehängt werden (nicht an das Snippet selbst). Sie funktioniert genau wie eine Aktivitäts-Bedingung, ihr Geltungsbereich sind jedoch die erweiterten Schritte des Snippets. Konfigurieren Sie dies in der Sidebar des Snippet-Referenz-Schritts, neben den Parameter-Bindungen.
3. Schritt-Ebene: Disable on parameter
In der Einstellungs-Sidebar jedes Schritts gibt es einen Umschalter Disable step. Wenn dieser einfache Schalter aktiviert ist, wird der Schritt immer übersprungen. Die interessantere Variante ist Disable on parameter, die einen Parameter mithilfe eines Vergleichsoperators mit einem Wert vergleicht und den Schritt nur dann überspringt, wenn der Vergleich wahr ist.
Sie konfigurieren drei Dinge:
- Parameter — der zu bewertende Parameter.
- Operator — einer der Operatoren
==,!=,>,<,>=,<=. - Value — der Wert, mit dem verglichen werden soll.
Im Gegensatz zu den oben genannten Bedingungen auf Aktivitäts- und Snippet-Ebene ist Disable on parameter vollständig deterministisch – der KI-Agent ist zur Laufzeit nicht daran beteiligt. Verwenden Sie dies immer dann, wenn ein Schritt durch einen einfachen booleschen Wert oder einen Wertevergleich gesteuert werden muss.
4. Inline-"if ..." im Schritt-Prompt
Sie können eine Bedingung auch direkt in den natürlichsprachigen Prompt eines Schritts schreiben – zum Beispiel: "Geben Sie den Promo-Code nur ein, wenn ein Code bereitgestellt wurde". Dies ist die am wenigsten deterministische Option: Der KI-Agent muss die if-Klausel jedes Mal erkennen und berücksichtigen. Es funktioniert bei einfachen Fällen, sollte aber vermieden werden, wenn Korrektheit wichtig ist; verwenden Sie stattdessen eine der drei oben genannten Optionen.
Reihenfolge der Auswertung und Sichtbarkeit
Wenn ein Schritt zur Ausführungszeit erreicht wird, werden die Steuerungsregeln in dieser Reihenfolge ausgewertet:
- Die eigene Einstellung Disable / Disable on parameter des Schritts.
- Das Disabled-Flag der übergeordneten Aktivität.
- Die Condition der übergeordneten Aktivität.
- Die Condition des übergeordneten Snippet-Referenz-Schritts, falls der Schritt innerhalb eines inlined Snippets liegt.
- Jedes Inline-"if ...", das die KI aus dem Prompt ableitet.
Die erste Regel, die „überspringen“ sagt, gewinnt. Übersprungene Elemente erscheinen in den Ausführungsergebnissen mit einem Skipped-Badge und einem kurzen Grund („disabled by parent activity“, „condition evaluated to false“, …). Der gesamte Test wird trotzdem als erfolgreich gewertet – Skipped ist ein neutraler Status, kein Fehler.
Schleifen
Eine Schleife wiederholt einen Teil des Tests mehrmals – einmal pro Zeile einer Datentabelle, solange eine Bedingung erfüllt ist oder eine feste Anzahl von Malen. Wie bei Bedingungen sind die strukturierten Schleifenoptionen weitaus zuverlässiger als Inline-Optionen.
1. Schleife auf Aktivitäts-Ebene
Öffnen Sie die Einstellungs-Sidebar einer Aktivität und wählen Sie Loop. Ein kleiner Assistent führt Sie durch die Konfiguration:
- Loop type — welche Art von Schleife dies ist (siehe unten).
- Loop condition / data source — die Tabelle, Bedingung oder Anzahl, die die Iteration steuert.
- Parameter mapping — wie Iterationsvariablen an die Parameter gebunden werden, die innerhalb der Schritte der Aktivität verwendet werden (siehe Iterationsvariablen und Parameter-Mapping).
- Review — bestätigen und speichern.
Die verfügbaren Schleifentypen sind:
| Schleifentyp | Verwendung |
|---|---|
| Über eine Datentabelle | Sie haben einen festen Satz von Zeilen (Testdaten) und möchten eine Iteration pro Zeile. Der häufigste Fall. |
| Statische Anzahl | Sie möchten genau N Iterationen, unabhängig von Daten – nützlich für Stresstests oder um eine Aktion eine feste Anzahl von Malen zu wiederholen. |
| Bis / Solange (dynamisch) | Die Anzahl der Iterationen ist nicht im Voraus bekannt; die Schleife läuft weiter, bis die KI feststellt, dass eine Bedingung erfüllt ist (z. B. "bis keine Zeilen mehr vorhanden sind"). |
| Do-until (dynamisch) | Wie Bis / Solange, aber der Körper der Schleife wird immer mindestens einmal ausgeführt, bevor die Bedingung erneut geprüft wird. |
Jede Schleife hat ein eingebautes Sicherheitsnetz von 15 Iterationen. Tests, die darauf angewiesen sind, mehr als das auszuführen, tun in einem Durchlauf fast sicher zu viel – teilen Sie die Arbeit auf oder verfeinern Sie die Datenquelle.
2. Schleife auf Snippet-Ebene
Eine Schleife kann auch einen Snippet-Referenz-Schritt umschließen. Die Konfiguration ist identisch mit einer Aktivitätsschleife (gleicher Assistent, gleiche Optionen), aber die Schleife iteriert über die erweiterten Schritte des Snippets statt über die einer Aktivität. Verwenden Sie dies, wenn das, was Sie wiederholen möchten, ein bestehendes wiederverwendbares Snippet ist – zum Beispiel: Führe für jeden Kunden in dieser Tabelle das Snippet "Kunde anlegen" aus.
3. Inline-Schleifen-Hinweis im Schritt-Prompt
Den Hinweis "für jede Zeile in der Kundentabelle, ..." direkt in einen Schritt-Prompt zu schreiben, funktioniert gelegentlich, ist aber aus den gleichen Gründen wie bei Inline-Bedingungen unzuverlässig. Vermeiden Sie dies. Wenn Sie dazu neigen, einen solchen zu schreiben, ersetzen Sie ihn durch eine Schleife auf Aktivitäts-Ebene und eine Datentabelle.
Iterationsvariablen und Parameter-Mapping
Wenn eine Schleife läuft, erzeugt jede Iteration Werte, die die inneren Schritte benötigen. Das Mapping erfolgt im Schritt Parameter mapping des Schleifenassistenten. Jede Zeile in der Mapping-Tabelle entspricht einem Parameter, der innerhalb der schleifenbildenden Aktivität/des Snippets referenziert wird; für jeden wählen Sie, woher sein Wert in dieser Iteration stammt:
- Spalte der Datentabelle — typisch für Schleifen über eine Tabelle. Die Zelle der aktuellen Zeile in dieser Spalte wird zum Wert des Parameters.
- Iterationsindex — die Iterationsnummer, formatiert als Ordnungszahl (erste, zweite, ...), eine 1-basierte Zahl (
1,2, ...) oder eine 0-basierte Zahl (0,1, ...). - Fester Wert — eine Konstante, die die inneren Schritte verwenden sollen.
- Mapping vom aufrufenden Test — ein Parameter des aufrufenden Tests, der direkt durchgereicht wird.
- Screen-Iterator — für dynamische Schleifen ein Wert, den der KI-Agent auf der Seite als Iterations-Handle identifiziert.
Das Mapping sorgt dafür, dass sich der Schleifenkörper bei jeder Iteration auf „das Richtige“ bezieht – ohne dies würden alle inneren Schritte weiterhin denselben Wert referenzieren.
Datentabellen
Eine Datentabelle ist ein Parameter, dessen Wert eine Tabelle aus Zeilen und Spalten ist und kein einzelner Wert. Siehe Testdaten, wie man eine solche definiert. Kurz: Im Tab Variants fügen Sie einen Parameter vom Typ Tabular hinzu und öffnen dann dessen Editor, um Zeilen und Spalten auszufüllen. Die Spalten sind frei definierbar – es gibt kein festes Schema; die Werte in den Zeilen sind reiner Text.
Sobald eine Tabelle existiert, kann eine Schleife über ihre Zeilen iterieren. Es stehen zwei Strategien für das Zeilen-Matching zur Verfügung:
| Strategie | Funktionsweise |
|---|---|
| Index | Nimm Zeile 1 für Iteration 1, Zeile 2 für Iteration 2, ... Stoppt, wenn die Tabelle keine Zeilen mehr hat. Die Standardwahl und einfachste Option. |
| Lookup | Iteriere nicht der Reihe nach über die Tabelle – finde stattdessen für jede Iteration die Zeile, die zu bestimmten Spaltenwerten passt (z. B. Abgleich nach ID oder nach dem, was aktuell auf dem Bildschirm zu sehen ist). Nützlich, wenn die Iterationsreihenfolge durch etwas anderes bestimmt wird und nicht durch die Reihenfolge der Zeilen. |
Im Lookup-Modus wählen Sie außerdem, was passiert, wenn keine Zeile übereinstimmt: die Iteration überspringen oder fehlschlagen lassen.
Kombination von Schleifen und Bedingungen
Wenn eine Aktivität oder ein Snippet-Referenz-Schritt sowohl eine Bedingung als auch eine Schleife hat, wird die Bedingung zuerst ausgewertet. Wenn die Bedingung falsch ist, läuft die Schleife nie und die enthaltenen Schritte werden übersprungen. Wenn die Bedingung wahr ist, läuft die Schleife wie konfiguriert, und die eigene Bedingung/Datenquelle der Schleife entscheidet, wie viele Iterationen stattfinden.
Sie können auch einzelne Schritte innerhalb des Schleifenkörpers mit Disable on parameter deaktivieren, was nützlich ist, wenn nur bestimmte Iterationen einen bestimmten Schritt ausführen sollen.
Darstellung von Schleifen und übersprungenen Elementen in den Ergebnissen
In den Ausführungsergebnissen wird eine Schleife als ein Block mit einem Abschnitt pro Iteration angezeigt. Die Kopfzeile jeder Iteration enthält die Iterationsnummer und (bei Tabellenschleifen) die Werte der Zeile zur schnellen Übersicht. Innerhalb jeder Iteration sehen Sie die Schritte mit ihrem jeweiligen Status.
Übersprungene Schritte und übersprungene Aktivitäten erscheinen mit dem oben beschriebenen Skipped-Badge, unabhängig davon, welche Regel das Überspringen verursacht hat.
Einige konkrete Beispiele
Bedingung auf Aktivitäts-Ebene
Sie haben eine Aktivität Login-Ablauf, aber wenn der Benutzer bereits angemeldet ist, möchten Sie sich nicht erneut anmelden.
- Aktivität: Login-Ablauf mit vier Schritten (Login-Seite öffnen, Benutzer eingeben, Passwort eingeben, absenden).
- Setzen Sie in der Aktivitäts-Sidebar die Condition auf
the login button is visible.
Zur Laufzeit wertet die KI aus, ob der Login-Button sichtbar ist. Wenn ja, werden die vier Schritte ausgeführt; andernfalls wird die gesamte Aktivität übersprungen.
Schleife auf Aktivitäts-Ebene mit einer Datentabelle
Sie möchten drei Produkte nacheinander erstellen, jedes mit unterschiedlichen Werten.
- Erstellen Sie im Tab Variants einen Parameter
productsvom Typ Tabular. Fügen Sie drei Zeilen mit den Spaltenname,price,categoryhinzu. - Erstellen Sie eine Aktivität Produkt erstellen mit den Schritten, die das Formular ausfüllen und absenden.
- Öffnen Sie die Aktivitäts-Sidebar, klicken Sie auf Loop, wählen Sie Über eine Datentabelle und dann
products. - Binden Sie im Parameter mapping die Parameter der inneren Schritte
[[name]],[[price]],[[category]]an die passenden Tabellenspalten. - Speichern.
Zur Laufzeit wird die Aktivität dreimal ausgeführt, einmal pro Zeile, wobei die Werte der Zeile in die inneren Schritte eingesetzt werden.
Schritt-Ebene Disable on parameter
Sie haben einen Schritt Cache leeren, der nur ausgeführt werden soll, wenn der Test gegen die Staging-Umgebung läuft.
- Aktivieren Sie in der Einstellungs-Sidebar des Schritts Disable step.
- Wählen Sie Parameter =
environment, Operator =!=, Value =staging.
Der Schritt wird übersprungen, es sei denn, [[environment]] entspricht staging. Die Entscheidung ist deterministisch und hängt nicht vom KI-Agenten ab.