Verwenden Sie den IDT-Kontext - AWS IoT Greengrass

AWS IoT Greengrass Version 1 trat am 30. Juni 2023 in die erweiterte Lebensphase ein. Weitere Informationen finden Sie in der AWS IoT Greengrass V1 Wartungsrichtlinie. Nach diesem Datum AWS IoT Greengrass V1 werden keine Updates mehr veröffentlicht, die Funktionen, Verbesserungen, Bugfixes oder Sicherheitspatches bieten. Geräte, die auf laufen, werden AWS IoT Greengrass V1 nicht gestört und funktionieren weiterhin und stellen eine Verbindung zur Cloud her. Wir empfehlen Ihnen dringend, zu migrieren AWS IoT Greengrass Version 2, da dies wichtige neue Funktionen und Unterstützung für zusätzliche Plattformen bietet.

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.

Verwenden Sie den IDT-Kontext

Wenn IDT eine Testsuite ausführt, kann die Testsuite auf eine Reihe von Daten zugreifen, die verwendet werden können, um zu bestimmen, wie jeder Test ausgeführt wird. Diese Daten werden als IDT-Kontext bezeichnet. Zum Beispiel, Benutzerdatenkonfiguration, die von Testläufern in einemuserdata.jsonwird Test-Suiten im IDT-Kontext zur Verfügung gestellt.

Der IDT-Kontext kann als schreibgeschütztes JSON-Dokument angesehen werden. Test-Suites können Daten aus dem Kontext abrufen und Daten mit Standard-JSON-Datentypen wie Objekten, Arrays, Zahlen usw. in den Kontext schreiben.

Kontextschema

Der IDT-Kontext verwendet das folgende Format:

{ "config": { <config-json-content> "timeoutMultiplier": timeout-multiplier }, "device": { <device-json-device-element> }, "devicePool": { <device-json-pool-element> }, "resource": { "devices": [ { <resource-json-device-element> "name": "<resource-name>" } ] }, "testData": { "awsCredentials": { "awsAccessKeyId": "<access-key-id>", "awsSecretAccessKey": "<secret-access-key>", "awsSessionToken": "<session-token>" }, "logFilePath": "/path/to/log/file" }, "userData": { <userdata-json-content> } }
config

Informationen von derconfig.jsonOrdneraus. Dieconfigenthält auch das folgende zusätzliche Feld:

config.timeoutMultiplier

Der Multiplikator für den von der Testsuite verwendeten Timeout-Wert. Dieser Wert wird vom Testläufer aus der IDT CLI angegeben. Der Standardwert ist 1.

device

Informationen über das für den Testlauf ausgewählte Gerät. Diese Information entsprichtdevicesArray-Element imdevice.jsonOrdnerfür das ausgewählte Gerät.

devicePool

Informationen über den Gerätepool, der für den Testlauf ausgewählt wurde. Diese Information entspricht dem Gerätepool-Array-Element der obersten Ebene, das in derdevice.json-Datei für den ausgewählten Gerätepool.

resource

Informationen über Ressourcengeräte aus demresource.jsonfile.

resource.devices

Diese Information entsprichtdevices-Array definiert imresource.jsonfile. Jederdevices-Element enthält das folgende zusätzliche Feld:

resource.device.name

Der Name des Ressourcengeräts. Dieser Wert wird aufrequiredResource.nameWert imtest.jsonfile.

testData.awsCredentials

DieAWSAnmeldeinformationen, die vom Test verwendet werden, um eine Verbindung mit demAWS-Wolke. Diese Informationen erhalten Sie von derconfig.jsonfile.

testData.logFilePath

Der Pfad zu der Protokolldatei, in die der Testfall Protokollmeldungen schreibt. Die Testsuite erstellt diese Datei, falls sie nicht vorhanden ist.

userData

Informationen, die der Testläufer imuserdata.jsonOrdneraus.

Greifen Sie auf Daten im Kontext zu

Sie können den Kontext mithilfe der JsonPath-Notation aus Ihren JSON-Dateien und aus Ihrer ausführbaren Textdatei mit demGetContextValueundGetContextStringAPIs. Die Syntax für JsonPath-Strings für den Zugriff auf den IDT-Kontext variiert wie folgt:

  • In :suite.jsonundtest.jsonverwenden Sie{{query}}aus. Das heißt, benutze das Wurzelelement nicht$.um deinen Ausdruck zu beginnen.

  • In :statemachine.jsonverwenden Sie{{$.query}}aus.

  • In API-Befehlen verwenden Siequeryoder{{$.query}}, je nach Befehl. Weitere Informationen finden Sie in der Inline-Dokumentation in den SDKs.

In der folgenden Tabelle werden die Operatoren in einem typischen JsonPath-Ausdruck beschrieben:

Operator Description
$ The root element. Because the top-level context value for IDT is an object, you will typically use $. to start your queries.
.childName Accesses the child element with name ChildName from an object. If applied to an array, yields a new array with this operator applied to each element. The element name is case sensitive. For example, the query to access the awsRegion value in the config object is $.config.awsRegion.
[start:end] Filters elements from an array, retrieving items beginning from the Start index and going up to the Ende index, both inclusive.
[index1, index2,..., indexN] Filters elements from an array, retrieving items from only the specified indices.
[? (expr)] Filters elements from an array using the expr expression. This expression must evaluate to a boolean value.

Verwenden Sie die folgende Syntax, um Filterausdrücke zu erstellen:

<jsonpath> | <value> operator <jsonpath> | <value>

In dieser Syntax gilt:

  • jsonpathist ein JsonPath, der die standardmäßige JSON-Syntax verwendet.

  • valueist ein benutzerdefinierter Wert, der die Standard-JSON-Syntax verwendet.

  • operatorist einer der folgenden Operatoren:

    • <(kleiner als)

    • <=(kleiner als oder gleich)

    • ==(Gleich)

      Wenn der JsonPath oder Wert in Ihrem Ausdruck ein Array, ein boolescher Wert oder ein Objektwert ist, ist dies der einzige unterstützte binäre Operator, den Sie verwenden können.

    • >=(größer als oder gleich)

    • >(größer als)

    • =~(Reguläre Ausdrücke stimmen überein). Um diesen Operator in einem Filterausdruck verwenden zu können, muss der JsonPath oder Wert auf der linken Seite Ihres Ausdrucks zu einer Zeichenfolge ausgewertet werden, und die rechte Seite muss ein Musterwert sein, der aufRE2-Syntaxaus.

Sie können JsonPath-Abfragen im Formular verwenden {{abfragen}} als Platzhalterzeichenfolgen innerhalb derargsundenvironmentVariables-Felder intest.jsonDateien und innerhalb derenvironmentVariables-Felder insuite.jsonDateien. IDT führt eine Kontextsuche durch und füllt die Felder mit dem ausgewerteten Wert der Abfrage aus. Zum Beispiel imsuite.jsonkönnen Sie Platzhalterzeichenfolgen verwenden, um Umgebungsvariablenwerte anzugeben, die sich bei jedem Testfall ändern, und IDT füllt die Umgebungsvariablen mit dem richtigen Wert für jeden Testfall. Wenn Sie jedoch Platzhalterzeichenfolgen intest.jsonundsuite.json-Dateien berücksichtigen Sie die folgenden Überlegungen für Ihre Anfragen:

  • Sie müssen jedes Vorkommen desdevicePoolgeben Sie Ihre Anfrage in Kleinbuchstaben ein. Das heißt, benutzedevicepoolStattdessen.

  • Für Arrays können Sie nur Arrays von Strings verwenden. Darüber hinaus verwenden Arrays einen nicht standardmäßigenitem1, item2,...,itemN. Wenn das Array nur ein Element enthält, wird es als serialisiertitem, wodurch es von einem String-Feld nicht zu unterscheiden ist.

  • Sie können keine Platzhalter verwenden, um Objekte aus dem Kontext abzurufen.

Aufgrund dieser Überlegungen empfehlen wir, dass Sie nach Möglichkeit die API verwenden, um auf den Kontext in Ihrer Testlogik zuzugreifen, anstatt auf Platzhalterzeichenfolgen intest.jsonundsuite.jsonDateien. In einigen Fällen ist es jedoch möglicherweise bequemer, JsonPath-Platzhalter zu verwenden, um einzelne Strings abzurufen, die als Umgebungsvariablen festgelegt werden sollen.