Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Konfigurieren Sie die IDT-Zustandsmaschine
Wichtig
Ab IDT v4.5.2 ist diese Zustandsmaschine veraltet. Wir empfehlen dringend, den neuen Test-Orchestrator zu verwenden. Weitere Informationen finden Sie unter Konfigurieren Sie den IDT-Testorchestrator.
Eine Zustandsmaschine ist ein Konstrukt, das den Ausführungsablauf der Testsuite steuert. Sie bestimmt den Startstatus einer Testsuite, verwaltet Zustandsübergänge auf der Grundlage benutzerdefinierter Regeln und durchläuft diese Zustände so lange, bis der Endzustand erreicht ist.
Wenn Ihre Testsuite keine benutzerdefinierte Zustandsmaschine enthält, generiert IDT eine Zustandsmaschine für Sie. Die Standard-Zustandsmaschine erfüllt die folgenden Funktionen:
-
Bietet Testläufern die Möglichkeit, statt der gesamten Testsuite bestimmte Testgruppen auszuwählen und auszuführen.
-
Wenn keine bestimmten Testgruppen ausgewählt sind, wird jede Testgruppe in der Testsuite in zufälliger Reihenfolge ausgeführt.
-
Generiert Berichte und druckt eine Konsolenzusammenfassung, in der die Testergebnisse für jede Testgruppe und jeden Testfall angezeigt werden.
Die Zustandsmaschine für eine IDT-Testsuite muss die folgenden Kriterien erfüllen:
-
Jeder Status entspricht einer Aktion, die IDT ergreifen muss, z. B. das Ausführen einer Testgruppe oder das Erstellen einer Berichtsdatei.
-
Beim Übergang in einen Status wird die mit dem Status verknüpfte Aktion ausgeführt.
-
Jeder Staat definiert die Übergangsregel für den nächsten Staat.
-
Der Endzustand muss entweder
Succeedoder seinFail.
Format der Zustandsmaschine
Sie können die folgende Vorlage verwenden, um Ihre eigene Datei zu konfigurieren: <custom-test-suite-folder>/suite/state_machine.json
{ "Comment": "<description>", "StartAt": "<state-name>", "States": { "<state-name>": { "Type": "<state-type>", // Additional state configuration } // Required states "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail" } } }
Nachfolgend sind alle Pflichtfelder beschrieben:
Comment-
Eine Beschreibung der Zustandsmaschine.
StartAt-
Der Name des Zustands, in dem IDT mit der Ausführung der Testsuite beginnt. Der Wert von
StartAtmuss auf einen der imStatesObjekt aufgeführten Zustände gesetzt werden. States-
Ein Objekt, das benutzerdefinierte Statusnamen gültigen IDT-Zuständen zuordnet. Jeder Staat.
state-nameObjekt enthält die Definition eines gültigen Zustands, der dem zugeordnet iststate-name.Das
StatesObjekt muss dieFailStatusSucceedund enthalten. Hinweise zu gültigen Bundesstaaten finden Sie unterGültige Bundesstaaten und Bundesstaatendefinitionen.
Gültige Bundesstaaten und Bundesstaatendefinitionen
In diesem Abschnitt werden die Zustandsdefinitionen aller gültigen Zustände beschrieben, die in der IDT-Zustandsmaschine verwendet werden können. Einige der folgenden Zustände unterstützen Konfigurationen auf Testfallebene. Wir empfehlen jedoch, Zustandsübergangsregeln auf Testgruppenebene statt auf Testfallebene zu konfigurieren, sofern dies nicht unbedingt erforderlich ist.
Definitionen von Bundesstaaten
RunTask
Der RunTask Staat führt Testfälle aus einer in der Testsuite definierten Testgruppe aus.
{ "Type": "RunTask", "Next": "<state-name>", "TestGroup": "<group-id>", "TestCases": [ "<test-id>" ], "ResultVar": "<result-name>" }
Nachfolgend sind alle Pflichtfelder beschrieben:
Next-
Der Name des Zustands, zu dem nach der Ausführung der Aktionen im aktuellen Status übergegangen werden soll.
TestGroup-
Optional. Die ID der Testgruppe, die ausgeführt werden soll. Wenn dieser Wert nicht angegeben ist, führt IDT die Testgruppe aus, die der Testläufer auswählt.
TestCases-
Optional. Ein Array von Testfall-IDs aus der in
TestGroupangegebenen Gruppe. Basierend auf den Werten vonTestGroupundTestCasesbestimmt IDT das Verhalten der Testausführung wie folgt:-
Wenn beide
TestGroupund angegebenTestCasessind, führt IDT die angegebenen Testfälle aus der Testgruppe aus. -
Wenn
TestCasesangegeben, aber nicht angegebenTestGroupist, führt IDT die angegebenen Testfälle aus. -
Wenn
TestGroupangegeben, aber nicht angegebenTestCasesist, führt IDT alle Testfälle innerhalb der angegebenen Testgruppe aus. -
Wenn keines
TestGroupoder angegebenTestCasesist, führt IDT alle Testfälle aus der Testgruppe aus, die der Testläufer aus der IDT-CLI auswählt. Um die Gruppenauswahl für Testläufer zu ermöglichen, müssen Sie beideRunTaskundChoiceBundesstaaten in Ihrestatemachine.jsonDatei aufnehmen. Ein Beispiel dafür, wie das funktioniert, finden Sie unter Beispiel für eine Zustandsmaschine: Vom Benutzer ausgewählte Testgruppen ausführen.Weitere Informationen zum Aktivieren von IDT-CLI-Befehlen für Testläufer finden Sie unter. Aktivieren Sie IDT-CLI-Befehle
-
ResultVar-
Der Name der Kontextvariablen, die mit den Ergebnissen des Testlaufs festgelegt werden soll. Geben Sie diesen Wert nicht an, wenn Sie keinen Wert für angegeben haben
TestGroup. IDT legt den Wert der Variablen, die Sie definieren, auftrueoderResultVarauf derfalseGrundlage der folgenden Werte fest:-
Wenn der Variablenname das folgende Format hat
, wird der Wert so festgelegt, ob alle Tests in der ersten Testgruppe bestanden oder übersprungen wurden.text_text_passed -
In allen anderen Fällen wird der Wert so festgelegt, ob alle Tests in allen Testgruppen bestanden haben oder übersprungen wurden.
-
In der Regel verwenden Sie RunTask state, um eine Testgruppen-ID anzugeben, ohne einzelne Testfall-IDs anzugeben, sodass IDT alle Testfälle in der angegebenen Testgruppe ausführt. Alle Testfälle, die in diesem Status ausgeführt werden, werden parallel in zufälliger Reihenfolge ausgeführt. Wenn jedoch für alle Testfälle ein Gerät zum Ausführen erforderlich ist und nur ein einziges Gerät verfügbar ist, werden die Testfälle stattdessen sequentiell ausgeführt.
Fehlerbehandlung
Wenn eine der angegebenen Testgruppen oder Testfall-IDs nicht gültig ist, gibt dieser Status den RunTaskError Ausführungsfehler aus. Wenn der Status auf einen Ausführungsfehler stößt, setzt er auch die hasExecutionError Variable im Zustandsmaschinenkontext auftrue.
Choice
Mit dem Choice Status können Sie anhand benutzerdefinierter Bedingungen dynamisch den nächsten Status festlegen, zu dem der Übergang erfolgen soll.
{ "Type": "Choice", "Default": "<state-name>", "FallthroughOnError": true | false, "Choices": [ { "Expression": "<expression>", "Next": "<state-name>" } ] }
Nachfolgend sind alle Pflichtfelder beschrieben:
Default-
Der Standardzustand, in den übergegangen wird, wenn keiner der in definierten Ausdrücke ausgewertet werden
Choiceskann.true FallthroughOnError-
Optional. Gibt das Verhalten an, wenn der Status bei der Auswertung von Ausdrücken auf einen Fehler stößt. Legen Sie diesen
trueWert auf fest, wenn Sie einen Ausdruck überspringen möchten, wenn die Auswertung zu einem Fehler führt. Wenn keine Ausdrücke übereinstimmen, geht die Zustandsmaschine in denDefaultStatus über. Wenn derFallthroughOnErrorWert nicht angegeben ist, ist er standardmäßig auffalseeingestellt. Choices-
Eine Reihe von Ausdrücken und Zuständen, um zu bestimmen, in welchen Zustand der Übergang erfolgen soll, nachdem die Aktionen im aktuellen Status ausgeführt wurden.
Choices.Expression-
Eine Ausdruckszeichenfolge, die zu einem booleschen Wert ausgewertet wird. Wenn der Ausdruck als ausgewertet wird
true, geht die Zustandsmaschine in den unter definierten Zustand über.Choices.NextAusdruckszeichenfolgen rufen Werte aus dem Zustandsmaschinen-Kontext ab und führen dann Operationen mit ihnen durch, um zu einem booleschen Wert zu gelangen. Hinweise zum Zugriff auf den Zustandsmaschinenkontext finden Sie unter. Kontext der Zustandsmaschine Choices.Next-
Der Name des Zustands, zu dem der Übergang erfolgen soll, wenn der in definierte Ausdruck als
Choices.Expressionausgewertet wird.true
Fehlerbehandlung
Der Choice Status kann in den folgenden Fällen eine Fehlerbehandlung erfordern:
-
Einige Variablen in den Auswahlausdrücken existieren im Kontext der Zustandsmaschine nicht.
-
Das Ergebnis eines Ausdrucks ist kein boolescher Wert.
-
Das Ergebnis einer JSON-Suche ist keine Zeichenfolge, Zahl oder boolescher Wert.
Sie können einen Catch Block nicht verwenden, um Fehler in diesem Zustand zu behandeln. Wenn Sie die Ausführung der Zustandsmaschine beenden möchten, wenn sie auf einen Fehler stößt, müssen Sie FallthroughOnError auf setzenfalse. Wir empfehlen jedoch, dass Sie FallthroughOnError diese true Option wählen und je nach Anwendungsfall eine der folgenden Aktionen ausführen:
-
Wenn in einigen Fällen davon ausgegangen wird, dass eine Variable, auf die Sie zugreifen, nicht existiert, verwenden Sie den Wert von
Defaultund zusätzlicheChoicesBlöcke, um den nächsten Status anzugeben. -
Wenn eine Variable, auf die Sie zugreifen, immer existieren sollte, setzen Sie den
DefaultStatus aufFail.
Parallel
Mit dem Parallel Status können Sie neue Zustandsautomaten definieren und parallel zueinander ausführen.
{ "Type": "Parallel", "Next": "<state-name>", "Branches": [<state-machine-definition>] }
Nachfolgend sind alle Pflichtfelder beschrieben:
Next-
Der Name des Zustands, zu dem nach Ausführung der Aktionen im aktuellen Status übergegangen werden soll.
Branches-
Eine Reihe von State-Machine-Definitionen, die ausgeführt werden sollen. Jede Zustandsmaschinen-Definition muss ihre eigenen
StartAtSucceed,- undFail-Zustände enthalten. Die Zustandsmaschinendefinitionen in diesem Array können nicht auf Zustände verweisen, die außerhalb ihrer eigenen Definition liegen.Anmerkung
Da jeder Branch-State-Machine denselben Zustandsmaschinen-Kontext verwendet, kann das Setzen von Variablen in einem Zweig und das anschließende Lesen dieser Variablen aus einem anderen Zweig zu unerwartetem Verhalten führen.
Der Parallel Status wechselt erst in den nächsten Zustand, nachdem alle Branch State Machines ausgeführt wurden. Jeder Status, für den ein Gerät erforderlich ist, wartet mit der Ausführung, bis das Gerät verfügbar ist. Wenn mehrere Geräte verfügbar sind, führt dieser Status Testfälle aus mehreren Gruppen parallel aus. Wenn nicht genügend Geräte verfügbar sind, werden die Testfälle sequentiell ausgeführt. Da Testfälle in zufälliger Reihenfolge ausgeführt werden, wenn sie parallel ausgeführt werden, können verschiedene Geräte verwendet werden, um Tests derselben Testgruppe auszuführen.
Fehlerbehandlung
Stellen Sie sicher, dass sowohl der Branch State Machine als auch der Parent State Machine in den Fail Zustand übergehen, in dem Ausführungsfehler behandelt werden können.
Da Branch State Machines keine Ausführungsfehler an den übergeordneten State Machine übertragen, können Sie keinen Catch Block verwenden, um Ausführungsfehler in Branch State Machines zu behandeln. Verwenden Sie stattdessen den hasExecutionErrors Wert im Shared State Machine-Kontext. Ein Beispiel dafür, wie das funktioniert, finden Sie unterBeispiel für eine Zustandsmaschine: Führen Sie zwei Testgruppen parallel aus.
AddProductFeatures
Mit dem AddProductFeatures Status können Sie der von IDT generierten awsiotdevicetester_report.xml Datei Produktfunktionen hinzufügen.
Eine Produktfunktion besteht aus benutzerdefinierten Informationen zu bestimmten Kriterien, die ein Gerät möglicherweise erfüllt. Die MQTT Produktfunktion kann beispielsweise angeben, dass das Gerät MQTT-Nachrichten ordnungsgemäß veröffentlicht. Im Bericht werden Produktmerkmale als oder als benutzerdefinierter Wert festgelegt supportednot-supported, je nachdem, ob die angegebenen Tests bestanden wurden.
Anmerkung
Der AddProductFeatures Staat generiert selbst keine Berichte. Dieser Zustand muss in den Report Zustand übergehen, in dem Berichte generiert werden können.
{ "Type": "Parallel", "Next": "<state-name>", "Features": [ { "Feature": "<feature-name>", "Groups": [ "<group-id>" ], "OneOfGroups": [ "<group-id>" ], "TestCases": [ "<test-id>" ], "IsRequired": true | false, "ExecutionMethods": [ "<execution-method>" ] } ] }
Nachfolgend sind alle Pflichtfelder beschrieben:
Next-
Der Name des Zustands, in den nach Ausführung der Aktionen im aktuellen Status übergegangen werden soll.
Features-
Eine Reihe von Produktfunktionen, die in der
awsiotdevicetester_report.xmlDatei angezeigt werden sollen.Feature-
Der Name der Funktion
FeatureValue-
Optional. Der benutzerdefinierte Wert, der im Bericht anstelle von verwendet werden soll
supported. Wenn dieser Wert nicht angegeben ist, wird der Feature-Wert auf der Grundlage der Testergebnisse aufsupportedoder gesetztnot-supported.Wenn Sie einen benutzerdefinierten Wert für verwenden
FeatureValue, können Sie dasselbe Feature mit unterschiedlichen Bedingungen testen, und IDT verkettet die Feature-Werte für die unterstützten Bedingungen. Der folgende Auszug zeigt beispielsweise dasMyFeatureFeature mit zwei separaten Feature-Werten:... { "Feature": "MyFeature", "FeatureValue": "first-feature-supported", "Groups": ["first-feature-group"] }, { "Feature": "MyFeature", "FeatureValue": "second-feature-supported", "Groups": ["second-feature-group"] }, ...Wenn beide Testgruppen erfolgreich sind, wird der Merkmalswert auf
first-feature-supported, second-feature-supportedgesetzt. Groups-
Optional. Ein Array von Testgruppen-IDs. Alle Tests innerhalb jeder angegebenen Testgruppe müssen bestanden werden, damit die Funktion unterstützt wird.
OneOfGroups-
Optional. Ein Array von Testgruppen-IDs. Alle Tests in mindestens einer der angegebenen Testgruppen müssen bestanden werden, damit die Funktion unterstützt wird.
TestCases-
Optional. Ein Array von Testfall-IDs. Wenn Sie diesen Wert angeben, gilt Folgendes:
-
Alle angegebenen Testfälle müssen bestanden werden, damit die Funktion unterstützt wird.
-
Groupsdarf nur eine Testgruppen-ID enthalten. -
OneOfGroupsdarf nicht angegeben werden.
-
IsRequired-
Optional. Legen Sie diese Option auf fest
false, um diese Funktion im Bericht als optionale Funktion zu kennzeichnen. Der Standardwert isttrue. ExecutionMethods-
Optional. Eine Reihe von Ausführungsmethoden, die dem in der
device.jsonDatei angegebenenprotocolWert entsprechen. Wenn dieser Wert angegeben ist, müssen Testläufer einenprotocolWert angeben, der einem der Werte in diesem Array entspricht, um das Feature in den Bericht aufzunehmen. Wenn dieser Wert nicht angegeben wird, wird das Feature immer in den Bericht aufgenommen.
Um den AddProductFeatures Status zu verwenden, müssen Sie den Wert von ResultVar in the RunTask state auf einen der folgenden Werte setzen:
-
Wenn Sie einzelne Testfall-IDs angegeben haben, setzen Sie
ResultVarden Wert auf.group-id_test-id_passed -
Wenn Sie keine einzelnen Testfall-IDs angegeben haben, setzen Sie
ResultVarden Wert auf.group-id_passed
Der AddProductFeatures Staat prüft auf folgende Weise, ob Testergebnisse vorliegen:
-
Wenn Sie keine Testfall-IDs angegeben haben, wird das Ergebnis für jede Testgruppe anhand des Werts der
Variablen im Zustandsmaschinen-Kontext bestimmt.group-id_passed -
Wenn Sie Testfall-IDs angegeben haben, wird das Ergebnis für jeden der Tests anhand des Werts der
Variablen im Zustandsmaschinenkontext bestimmt.group-id_test-id_passed
Fehlerbehandlung
Wenn eine in diesem Status angegebene Gruppen-ID keine gültige Gruppen-ID ist, führt dieser Status zu einem AddProductFeaturesError Ausführungsfehler. Wenn der Status auf einen Ausführungsfehler stößt, wird auch die hasExecutionErrors Variable im Zustandsmaschinenkontext auf gesetzttrue.
Bericht
Der Report Status generiert die suite-name_Report.xmlawsiotdevicetester_report.xml Und-Dateien. Dieser Status streamt den Bericht auch an die Konsole.
{ "Type": "Report", "Next": "<state-name>" }
Nachfolgend sind alle Pflichtfelder beschrieben:
Next-
Der Name des Zustands, in den nach Ausführung der Aktionen im aktuellen Status übergegangen werden soll.
Sie sollten immer gegen Ende der Testausführung in den Report Status wechseln, damit die Testläufer die Testergebnisse sehen können. In der Regel ist der nächste Status nach diesem StatusSucceed.
Fehlerbehandlung
Wenn bei diesem Status Probleme beim Generieren der Berichte auftreten, wird der ReportError Ausführungsfehler ausgegeben.
LogMessage
Der LogMessage Status generiert die test_manager.log Datei und streamt die Protokollnachricht an die Konsole.
{ "Type": "LogMessage", "Next": "<state-name>" "Level": "info | warn | error" "Message": "<message>" }
Nachfolgend sind alle Pflichtfelder beschrieben:
Next-
Der Name des Zustands, zu dem nach Ausführung der Aktionen im aktuellen Status übergegangen werden soll.
Level-
Die Fehlerstufe, auf der die Protokollnachricht erstellt werden soll. Wenn Sie eine Ebene angeben, die nicht gültig ist, generiert dieser Status eine Fehlermeldung und verwirft sie.
Message-
Die zu protokollierende Nachricht.
SelectGroup
Der SelectGroup Status aktualisiert den Zustandsmaschinen-Kontext, um anzuzeigen, welche Gruppen ausgewählt sind. Die von diesem Status festgelegten Werte werden von allen nachfolgenden Choice Zuständen verwendet.
{ "Type": "SelectGroup", "Next": "<state-name>" "TestGroups": [<group-id>" ] }
Nachfolgend sind alle Pflichtfelder beschrieben:
Next-
Der Name des Zustands, zu dem nach Ausführung der Aktionen im aktuellen Status übergegangen werden soll.
TestGroups-
Eine Reihe von Testgruppen, die als ausgewählt markiert werden. Für jede Testgruppen-ID in diesem Array wird die
Variable aufgroup-id_selectedtrueim Kontext gesetzt. Stellen Sie sicher, dass Sie gültige Testgruppen-IDs angeben, da IDT nicht überprüft, ob die angegebenen Gruppen existieren.
Fehler
Der Fail Status gibt an, dass die Zustandsmaschine nicht korrekt ausgeführt wurde. Dies ist ein Endzustand für die Zustandsmaschine, und jede Zustandsmaschinendefinition muss diesen Zustand enthalten.
{ "Type": "Fail" }
Succeed
Der Succeed Status gibt an, dass die Zustandsmaschine korrekt ausgeführt wurde. Dies ist ein Endzustand für die Zustandsmaschine, und jede Zustandsmaschinendefinition muss diesen Zustand enthalten.
{ "Type": "Succeed" }
Kontext der Zustandsmaschine
Der Zustandsmaschinenkontext ist ein schreibgeschütztes JSON-Dokument, das Daten enthält, die der Zustandsmaschine während der Ausführung zur Verfügung stehen. Auf den Zustandsmaschinen-Kontext kann nur von der Zustandsmaschine aus zugegriffen werden. Er enthält Informationen, die den Testablauf bestimmen. Sie können beispielsweise Informationen verwenden, die von Testläufern in der userdata.json Datei konfiguriert wurden, um zu ermitteln, ob ein bestimmter Test ausgeführt werden muss.
Der State-Machine-Kontext verwendet das folgende Format:
{ "pool": {<device-json-pool-element>}, "userData": {<userdata-json-content>}, "config": {<config-json-content>}, "suiteFailed": true | false, "specificTestGroups": [ "<group-id>" ], "specificTestCases": [ "<test-id>" ], "hasExecutionErrors": true }
pool-
Informationen über den Gerätepool, der für den Testlauf ausgewählt wurde. Für einen ausgewählten Gerätepool werden diese Informationen aus dem entsprechenden Gerätepool-Array-Element der obersten Ebene abgerufen, das in der
device.jsonDatei definiert ist. userData-
Informationen in der
userdata.jsonDatei. config-
Informationen heften Sie die
config.jsonDatei an. suiteFailed-
Der Wert wird auf den
falseZeitpunkt gesetzt, zu dem die Zustandsmaschine startet. Wenn eine Testgruppe in einemRunTaskZustand ausfällt, wird dieser Werttruefür die verbleibende Dauer der Ausführung der Zustandsmaschine auf gesetzt. specificTestGroups-
Wenn der Testläufer statt der gesamten Testsuite bestimmte Testgruppen zur Ausführung auswählt, wird dieser Schlüssel erstellt und enthält die Liste der spezifischen Testgruppen-IDs.
specificTestCases-
Wenn der Testläufer anstelle der gesamten Testsuite bestimmte Testfälle zur Ausführung auswählt, wird dieser Schlüssel erstellt und enthält die Liste der spezifischen Testfall-IDs.
hasExecutionErrors-
Wird nicht beendet, wenn die Zustandsmaschine gestartet wird. Treten bei einem Status Ausführungsfehler auf, wird diese Variable erstellt und
truefür die verbleibende Dauer der Zustandsmaschinen-Ausführung auf sie gesetzt.
Sie können den Kontext mithilfe der JSONPath-Notation abfragen. Die Syntax für JSONPath-Abfragen in Zustandsdefinitionen lautet. {{$. In einigen Bundesstaaten können Sie JSONPath-Abfragen als Platzhalterzeichenfolgen verwenden. IDT ersetzt die Platzhalterzeichenfolgen durch den Wert der ausgewerteten JSONPath-Abfrage aus dem Kontext. Sie können Platzhalter für die folgenden Werte verwenden:query}}
-
Der
TestCasesWert inRunTaskBundesstaaten. -
Der
ExpressionWertChoiceState.
Wenn Sie auf Daten aus dem Zustandsmaschinenkontext zugreifen, stellen Sie sicher, dass die folgenden Bedingungen erfüllt sind:
-
Ihre JSON-Pfade müssen beginnen mit
$. -
Jeder Wert muss zu einer Zeichenfolge, einer Zahl oder einem booleschen Wert ausgewertet werden.
Weitere Hinweise zur Verwendung der JSONPath-Notation für den Zugriff auf Daten aus dem Kontext finden Sie unter. Verwenden Sie den IDT-Kontext
Ausführungsfehler
Ausführungsfehler sind Fehler in der Zustandsmaschinen-Definition, auf die die Zustandsmaschine bei der Ausführung eines Zustands stößt. IDT protokolliert Informationen zu jedem Fehler in der test_manager.log Datei und streamt die Protokollnachricht an die Konsole.
Sie können die folgenden Methoden verwenden, um Ausführungsfehler zu behandeln:
-
Fügen Sie der Statusdefinition einen Catch Block hinzu.
-
Überprüfen Sie den hasExecutionErrors Wert des Werts im Kontext der Zustandsmaschine.
Fangen
Um es zu verwendenCatch, fügen Sie Ihrer Zustandsdefinition Folgendes hinzu:
"Catch": [ { "ErrorEquals": [ "<error-type>" ] "Next": "<state-name>" } ]
Nachfolgend sind alle Pflichtfelder beschrieben:
Catch.ErrorEquals-
Ein Array der Fehlertypen, die abgefangen werden sollen. Wenn ein Ausführungsfehler mit einem der angegebenen Werte übereinstimmt, geht die Zustandsmaschine in den unter angegebenen Zustand über
Catch.Next. In den einzelnen Statusdefinitionen finden Sie Informationen über die Art des Fehlers, den sie verursacht. Catch.Next-
Der nächste Status, zu dem übergegangen wird, wenn im aktuellen Status ein Ausführungsfehler auftritt, der einem der unter angegebenen Werte entspricht
Catch.ErrorEquals.
Catch-Blöcke werden sequentiell verarbeitet, bis einer der Blöcke entspricht. Wenn die Fehler „Keine“ mit den in den Catch-Blöcken aufgeführten übereinstimmen, werden die State-Maschinen weiter ausgeführt. Da Ausführungsfehler auf falsche Zustandsdefinitionen zurückzuführen sind, empfehlen wir, in den Status Fail überzugehen, wenn in einem Zustand ein Ausführungsfehler auftritt.
hat ExecutionError
Treten bei einigen Staaten Ausführungsfehler auf, geben sie nicht nur den Fehler aus, sondern setzen den hasExecutionError Wert auch true im Kontext der Zustandsmaschine auf. Sie können diesen Wert verwenden, um zu erkennen, wann ein Fehler auftritt, und dann einen Choice Status verwenden, um die Zustandsmaschine in den Fail Status zu überführen.
Diese Methode weist die folgenden Merkmale auf.
-
Die Zustandsmaschine beginnt mit keinem zugewiesenen Wert
hasExecutionError, und dieser Wert ist erst verfügbar, wenn er von einem bestimmten Status festgelegt wird. Das bedeutet, dass Siefalsefür dieChoiceZustände, dieFallthroughOnErrorauf diesen Wert zugreifen, explizit den Wert auf setzen müssen, um zu verhindern, dass die Zustandsmaschine stoppt, wenn keine Ausführungsfehler auftreten. -
Ist der Wert einmal auf gesetzt
true,hasExecutionErrorwird er niemals auf „False“ gesetzt oder aus dem Kontext entfernt. Das bedeutet, dass dieser Wert nur nützlich ist, wenn er zum ersten Mal auf gesetzt wirdtrue, und für alle nachfolgenden Zustände liefert er keinen aussagekräftigen Wert. -
Der
hasExecutionErrorWert wird von allen Branch State Machines in diesemParallelZustand gemeinsam genutzt, was je nach Reihenfolge, in der auf den Wert zugegriffen wird, zu unerwarteten Ergebnissen führen kann.
Aufgrund dieser Eigenschaften wird die Verwendung dieser Methode nicht empfohlen, wenn Sie stattdessen einen Catch-Block verwenden können.
Beispiel für Zustandsautomaten
Dieser Abschnitt enthält einige Beispiele für State-Machine-Konfigurationen.
Beispiele
Beispiel für eine Zustandsmaschine: Führen Sie eine einzelne Testgruppe aus
Beispiel für eine Zustandsmaschine: Führen Sie vom Benutzer ausgewählte Testgruppen aus
Beispiel für eine Zustandsmaschine: Führen Sie eine einzelne Testgruppe mit Produktfunktionen aus
Beispiel für eine Zustandsmaschine: Führen Sie zwei Testgruppen parallel aus
Beispiel für eine Zustandsmaschine: Führen Sie eine einzelne Testgruppe aus
Diese Zustandsmaschine:
-
Führt die Testgruppe mit der ID aus
GroupA, die in der Suite in einergroup.jsonDatei vorhanden sein muss. -
Überprüft, ob Ausführungsfehler vorliegen, und wechselt,
Failfalls welche gefunden wurden. -
Generiert einen Bericht und wechselt zu dem,
Succeedwenn keine Fehler vorliegen, und aufFailandere Weise.
{ "Comment": "Runs a single group and then generates a report.", "StartAt": "RunGroupA", "States": { "RunGroupA": { "Type": "RunTask", "Next": "Report", "TestGroup": "GroupA", "Catch": [ { "ErrorEquals": [ "RunTaskError" ], "Next": "Fail" } ] }, "Report": { "Type": "Report", "Next": "Succeed", "Catch": [ { "ErrorEquals": [ "ReportError" ], "Next": "Fail" } ] }, "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail" } } }
Beispiel für eine Zustandsmaschine: Führen Sie vom Benutzer ausgewählte Testgruppen aus
Diese Zustandsmaschine:
-
Prüft, ob der Testläufer bestimmte Testgruppen ausgewählt hat. Die Zustandsmaschine sucht nicht nach bestimmten Testfällen, da Testläufer keine Testfälle auswählen können, ohne auch eine Testgruppe auszuwählen.
-
Wenn Testgruppen ausgewählt sind:
-
Führt die Testfälle innerhalb der ausgewählten Testgruppen aus. Zu diesem Zweck spezifiziert die Zustandsmaschine nicht explizit Testgruppen oder Testfälle im
RunTaskBundesstaat. -
Generiert einen Bericht, nachdem alle Tests ausgeführt und beendet wurden.
-
-
Wenn keine Testgruppen ausgewählt sind:
-
Führt Tests in der Testgruppe aus
GroupA. -
Generiert Berichte und beendet das Programm.
-
{ "Comment": "Runs specific groups if the test runner chose to do that, otherwise runs GroupA.", "StartAt": "SpecificGroupsCheck", "States": { "SpecificGroupsCheck": { "Type": "Choice", "Default": "RunGroupA", "FallthroughOnError": true, "Choices": [ { "Expression": "{{$.specificTestGroups[0]}} != ''", "Next": "RunSpecificGroups" } ] }, "RunSpecificGroups": { "Type": "RunTask", "Next": "Report", "Catch": [ { "ErrorEquals": [ "RunTaskError" ], "Next": "Fail" } ] }, "RunGroupA": { "Type": "RunTask", "Next": "Report", "TestGroup": "GroupA", "Catch": [ { "ErrorEquals": [ "RunTaskError" ], "Next": "Fail" } ] }, "Report": { "Type": "Report", "Next": "Succeed", "Catch": [ { "ErrorEquals": [ "ReportError" ], "Next": "Fail" } ] }, "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail" } } }
Beispiel für eine Zustandsmaschine: Führen Sie eine einzelne Testgruppe mit Produktfunktionen aus
Diese Zustandsmaschine:
-
Führt die Testgruppe aus
GroupA. -
Prüft, ob Ausführungsfehler vorliegen, und wechselt,
Failfalls welche gefunden wurden. -
Fügt die
FeatureThatDependsOnGroupAFunktion zurawsiotdevicetester_report.xmlDatei hinzu:-
Wenn die
GroupAPrüfung erfolgreich ist, wird das Feature auf gesetztsupported. -
Das Feature ist im Bericht nicht als optional gekennzeichnet.
-
-
Generiert einen Bericht und wechselt zu diesem,
Succeedwenn keine Fehler vorliegen, und aufFailandere Weise
{ "Comment": "Runs GroupA and adds product features based on GroupA", "StartAt": "RunGroupA", "States": { "RunGroupA": { "Type": "RunTask", "Next": "AddProductFeatures", "TestGroup": "GroupA", "ResultVar": "GroupA_passed", "Catch": [ { "ErrorEquals": [ "RunTaskError" ], "Next": "Fail" } ] }, "AddProductFeatures": { "Type": "AddProductFeatures", "Next": "Report", "Features": [ { "Feature": "FeatureThatDependsOnGroupA", "Groups": [ "GroupA" ], "IsRequired": true } ] }, "Report": { "Type": "Report", "Next": "Succeed", "Catch": [ { "ErrorEquals": [ "ReportError" ], "Next": "Fail" } ] }, "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail" } } }
Beispiel für eine Zustandsmaschine: Führen Sie zwei Testgruppen parallel aus
Diese Zustandsmaschine:
-
Führt die Gruppen
GroupAundGroupBTestgruppen parallel aus. DieResultVarVariablen, die im Kontext von denRunTaskZuständen im Zweigstatus machines by gespeichert wurden, stehen demAddProductFeaturesStaat zur Verfügung. -
Prüft, ob Ausführungsfehler vorliegen, und wechselt,
Failfalls welche gefunden wurden. Diese Zustandsmaschine verwendet keinenCatchBlock, da diese Methode keine Ausführungsfehler in Branch-State-Machines erkennt. -
Fügt der
awsiotdevicetester_report.xmlDatei Funktionen hinzu, die auf den übergebenen Gruppen basieren-
Wenn die
GroupAPrüfung bestanden wird, wird das Feature auf gesetztsupported. -
Das Feature ist im Bericht nicht als optional gekennzeichnet.
-
-
Generiert einen Bericht und wechselt zu diesem,
Succeedwenn keine Fehler vorliegen, und aufFailandere Weise
Wenn zwei Geräte im Gerätepool konfiguriert sind, GroupB können beide GroupA gleichzeitig ausgeführt werden. Wenn jedoch einer GroupA oder mehrere Tests GroupB enthält, können beide Geräte diesen Tests zugewiesen werden. Wenn nur ein Gerät konfiguriert ist, werden die Testgruppen sequentiell ausgeführt.
{ "Comment": "Runs GroupA and GroupB in parallel", "StartAt": "RunGroupAAndB", "States": { "RunGroupAAndB": { "Type": "Parallel", "Next": "CheckForErrors", "Branches": [ { "Comment": "Run GroupA state machine", "StartAt": "RunGroupA", "States": { "RunGroupA": { "Type": "RunTask", "Next": "Succeed", "TestGroup": "GroupA", "ResultVar": "GroupA_passed", "Catch": [ { "ErrorEquals": [ "RunTaskError" ], "Next": "Fail" } ] }, "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail" } } }, { "Comment": "Run GroupB state machine", "StartAt": "RunGroupB", "States": { "RunGroupA": { "Type": "RunTask", "Next": "Succeed", "TestGroup": "GroupB", "ResultVar": "GroupB_passed", "Catch": [ { "ErrorEquals": [ "RunTaskError" ], "Next": "Fail" } ] }, "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail" } } } ] }, "CheckForErrors": { "Type": "Choice", "Default": "AddProductFeatures", "FallthroughOnError": true, "Choices": [ { "Expression": "{{$.hasExecutionErrors}} == true", "Next": "Fail" } ] }, "AddProductFeatures": { "Type": "AddProductFeatures", "Next": "Report", "Features": [ { "Feature": "FeatureThatDependsOnGroupA", "Groups": [ "GroupA" ], "IsRequired": true }, { "Feature": "FeatureThatDependsOnGroupB", "Groups": [ "GroupB" ], "IsRequired": true } ] }, "Report": { "Type": "Report", "Next": "Succeed", "Catch": [ { "ErrorEquals": [ "ReportError" ], "Next": "Fail" } ] }, "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail" } } }