View a markdown version of this page

Konfigurieren Sie die IDT-Zustandsmaschine - FreeRTOS

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 Succeed oder seinFail.

Format der Zustandsmaschine

Sie können die folgende Vorlage verwenden, um Ihre eigene <custom-test-suite-folder>/suite/state_machine.json Datei zu konfigurieren:

{ "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 StartAt muss auf einen der im States Objekt 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 States Objekt muss die Fail Status Succeed und 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.

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 TestGroup angegebenen Gruppe. Basierend auf den Werten von TestGroup und TestCases bestimmt IDT das Verhalten der Testausführung wie folgt:

  • Wenn beide TestGroup und angegeben TestCases sind, führt IDT die angegebenen Testfälle aus der Testgruppe aus.

  • Wenn TestCases angegeben, aber nicht angegeben TestGroup ist, führt IDT die angegebenen Testfälle aus.

  • Wenn TestGroup angegeben, aber nicht angegeben TestCases ist, führt IDT alle Testfälle innerhalb der angegebenen Testgruppe aus.

  • Wenn keines TestGroup oder angegeben TestCases ist, 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 beide RunTask und Choice Bundesstaaten in Ihre statemachine.json Datei 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 habenTestGroup. IDT legt den Wert der Variablen, die Sie definieren, auf true oder ResultVar auf der false Grundlage der folgenden Werte fest:

  • Wenn der Variablenname das folgende Format hattext_text_passed, wird der Wert so festgelegt, ob alle Tests in der ersten Testgruppe bestanden oder übersprungen wurden.

  • 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 Choices kann. true

FallthroughOnError

Optional. Gibt das Verhalten an, wenn der Status bei der Auswertung von Ausdrücken auf einen Fehler stößt. Legen Sie diesen true Wert 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 den Default Status über. Wenn der FallthroughOnError Wert nicht angegeben ist, ist er standardmäßig auf false eingestellt.

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 wirdtrue, geht die Zustandsmaschine in den unter definierten Zustand über. Choices.Next Ausdruckszeichenfolgen 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.Expression ausgewertet 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 Default und zusätzliche Choices Blöcke, um den nächsten Status anzugeben.

  • Wenn eine Variable, auf die Sie zugreifen, immer existieren sollte, setzen Sie den Default Status 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 StartAt Succeed ,- und Fail -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.xml Datei angezeigt werden sollen.

Feature

Der Name der Funktion

FeatureValue

Optional. Der benutzerdefinierte Wert, der im Bericht anstelle von verwendet werden sollsupported. Wenn dieser Wert nicht angegeben ist, wird der Feature-Wert auf der Grundlage der Testergebnisse auf supported oder gesetztnot-supported.

Wenn Sie einen benutzerdefinierten Wert für verwendenFeatureValue, 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 das MyFeature Feature 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-supported gesetzt.

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 festfalse, um diese Funktion im Bericht als optionale Funktion zu kennzeichnen. Der Standardwert ist true.

ExecutionMethods

Optional. Eine Reihe von Ausführungsmethoden, die dem in der device.json Datei angegebenen protocol Wert entsprechen. Wenn dieser Wert angegeben ist, müssen Testläufer einen protocol Wert 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 ResultVar den Wert aufgroup-id_test-id_passed.

  • Wenn Sie keine einzelnen Testfall-IDs angegeben haben, setzen Sie ResultVar den Wert aufgroup-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 group-id_passed Variablen im Zustandsmaschinen-Kontext bestimmt.

  • Wenn Sie Testfall-IDs angegeben haben, wird das Ergebnis für jeden der Tests anhand des Werts der group-id_test-id_passed Variablen im Zustandsmaschinenkontext bestimmt.

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.xml awsiotdevicetester_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 group-id_selected Variable auf true im 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.json Datei definiert ist.

userData

Informationen in der userdata.json Datei.

config

Informationen heften Sie die config.json Datei an.

suiteFailed

Der Wert wird auf den false Zeitpunkt gesetzt, zu dem die Zustandsmaschine startet. Wenn eine Testgruppe in einem RunTask Zustand ausfällt, wird dieser Wert true fü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 true fü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. {{$.query}} 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:

  • Der TestCases Wert in RunTask Bundesstaaten.

  • Der Expression Wert Choice State.

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:

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 überCatch.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 entsprichtCatch.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 WerthasExecutionError, und dieser Wert ist erst verfügbar, wenn er von einem bestimmten Status festgelegt wird. Das bedeutet, dass Sie false für die Choice Zustände, die FallthroughOnError auf 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 gesetzttrue, hasExecutionError wird 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 hasExecutionError Wert wird von allen Branch State Machines in diesem Parallel Zustand 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.

Beispiel für eine Zustandsmaschine: Führen Sie eine einzelne Testgruppe aus

Diese Zustandsmaschine:

  • Führt die Testgruppe mit der ID ausGroupA, die in der Suite in einer group.json Datei vorhanden sein muss.

  • Überprüft, ob Ausführungsfehler vorliegen, und wechselt, Fail falls welche gefunden wurden.

  • Generiert einen Bericht und wechselt zu dem, Succeed wenn keine Fehler vorliegen, und auf Fail andere 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 RunTask Bundesstaat.

    • Generiert einen Bericht, nachdem alle Tests ausgeführt und beendet wurden.

  • Wenn keine Testgruppen ausgewählt sind:

    • Führt Tests in der Testgruppe ausGroupA.

    • 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 ausGroupA.

  • Prüft, ob Ausführungsfehler vorliegen, und wechselt, Fail falls welche gefunden wurden.

  • Fügt die FeatureThatDependsOnGroupA Funktion zur awsiotdevicetester_report.xml Datei hinzu:

    • Wenn die GroupA Prüfung erfolgreich ist, wird das Feature auf gesetztsupported.

    • Das Feature ist im Bericht nicht als optional gekennzeichnet.

  • Generiert einen Bericht und wechselt zu diesem, Succeed wenn keine Fehler vorliegen, und auf Fail andere 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 GroupA und GroupB Testgruppen parallel aus. Die ResultVar Variablen, die im Kontext von den RunTask Zuständen im Zweigstatus machines by gespeichert wurden, stehen dem AddProductFeatures Staat zur Verfügung.

  • Prüft, ob Ausführungsfehler vorliegen, und wechselt, Fail falls welche gefunden wurden. Diese Zustandsmaschine verwendet keinen Catch Block, da diese Methode keine Ausführungsfehler in Branch-State-Machines erkennt.

  • Fügt der awsiotdevicetester_report.xml Datei Funktionen hinzu, die auf den übergebenen Gruppen basieren

    • Wenn die GroupA Prüfung bestanden wird, wird das Feature auf gesetztsupported.

    • Das Feature ist im Bericht nicht als optional gekennzeichnet.

  • Generiert einen Bericht und wechselt zu diesem, Succeed wenn keine Fehler vorliegen, und auf Fail andere 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" } } }