Utiliser le contexte IDT - AWS IoT Greengrass

AWS IoT Greengrass Version 1 est entré dans la phase de durée de vie prolongée le 30 juin 2023. Pour plus d'informations, consultez la politique de AWS IoT Greengrass V1 maintenance. Après cette date, AWS IoT Greengrass V1 ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations, des corrections de bogues ou des correctifs de sécurité. Les appareils qui fonctionnent AWS IoT Greengrass V1 sous tension ne seront pas perturbés et continueront à fonctionner et à se connecter au cloud. Nous vous recommandons vivement de migrer vers AWS IoT Greengrass Version 2, qui ajoute de nouvelles fonctionnalités importantes et prend en charge des plateformes supplémentaires.

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Utiliser le contexte IDT

Lorsque IDT exécute une suite de tests, la suite de tests peut accéder à un ensemble de données qui peuvent être utilisées pour déterminer comment chaque test s'exécute. Ces données sont appelées contexte IDT. Par exemple, la configuration des données utilisateur fournie par les exécuteurs de tests dans unuserdata.jsonest mis à la disposition des suites de tests dans le contexte IDT.

Le contexte IDT peut être considéré comme un document JSON en lecture seule. Les suites de tests peuvent extraire des données du contexte et les écrire à l'aide de types de données JSON standard tels que des objets, des tableaux, des nombres, etc.

Schéma contextuel

Le contexte IDT utilise le format suivant :

{ "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

Informations provenant duconfig.jsonfichier. Leconfigcontient également le champ supplémentaire suivant :

config.timeoutMultiplier

Multiplicateur pour toute valeur de délai d'attente utilisée par la suite de tests. Cette valeur est spécifiée par le lanceur de test à partir de l'interface de ligne de commande IDT. La valeur par défaut est 1.

device

Informations sur le périphérique sélectionné pour le test. Ces informations sont équivalentes à l'informationdevicesélément de tableau dans ledevice.jsonfichierpour l'appareil sélectionné.

devicePool

Informations sur le pool de périphériques sélectionné pour le test. Ces informations sont équivalentes à l'élément de tableau de pool de périphériques de niveau supérieur défini dans ledevice.jsonpour le pool de périphériques sélectionné.

resource

Informations sur les périphériques de ressources provenant duresource.jsondans le fichier.

resource.devices

Ces informations sont équivalentes à l'informationdevicestableau défini dans le tableauresource.jsondans le fichier. EACHdevicesinclut le champ supplémentaire suivant :

resource.device.name

Nom du périphérique de ressources. Cette valeur est définie sur le paramètrerequiredResource.namevaleur dans le moduletest.jsondans le fichier.

testData.awsCredentials

LeAWSinformations d'identification utilisées par le test pour se connecter auAWScloud. Ces informations sont obtenues auprès duconfig.jsondans le fichier.

testData.logFilePath

Chemin d'accès au fichier journal dans lequel le scénario de test écrit des messages de journal. S'il n'existe pas, la suite de tests crée ce fichier.

userData

Informations fournies par le coureur de test dans leuserdata.jsonfichier.

Accédez aux données dans le contexte

Vous pouvez interroger le contexte à l'aide de la notation JSONPath à partir de vos fichiers JSON et de votre exécutable de texte avec leGetContextValueetGetContextStringAPI. La syntaxe des chaînes JSONPath pour accéder au contexte IDT varie comme suit :

  • Danssuite.jsonettest.json, vous utilisez{{query}}. En d'autres termes, n'utilisez pas l'élément racine$.pour commencer votre expression.

  • Dansstatemachine.json, vous utilisez{{$.query}}.

  • Dans les commandes API, vous utilisezqueryou{{$.query}}, selon la commande. Pour de plus amples informations, veuillez consulter la documentation en ligne dans les kits SDK.

Le tableau suivant décrit les opérateurs dans une expression JSONPath typique :

Operator Description
$ The root element. Because the top-level context value for IDT is an object, you will typically use $. to start your queries.
.nom d'enfant Accesses the child element with name Nom de l'enfant 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 Région $.config.awsRegion.
[début : fin] Filters elements from an array, retrieving items beginning from the démarrer index and going up to the fin 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.

Pour créer des expressions de filtre, utilisez la syntaxe suivante :

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

Dans cette syntaxe :

  • jsonpathest un JSONPath qui utilise la syntaxe JSON standard.

  • valueest toute valeur personnalisée qui utilise la syntaxe JSON standard.

  • operatorest l'un des opérateurs suivants :

    • <(Inférieur à)

    • <=(Inférieur ou égal à)

    • ==(Egal à)

      Si le JSONPath ou la valeur de votre expression est une valeur de tableau, d'un booléen ou d'un objet, il s'agit du seul opérateur binaire pris en charge que vous pouvez utiliser.

    • >=(Supérieur ou égal à)

    • >(Supérieur à)

    • =~(correspondance d'expression régulière). Pour utiliser cet opérateur dans une expression de filtre, le JSONPath ou la valeur située sur le côté gauche de votre expression doit être évalué en chaîne et le côté droit doit être une valeur de modèle qui suit leSyntaxe RE2.

Vous pouvez utiliser des requêtes JSONPath sous la forme {{requête}} sous forme de chaînes d'espace réservé dans leargsetenvironmentVariableschamps danstest.jsonet dans le dossierenvironmentVariableschamps danssuite.jsonfichiers suivants. IDT effectue une recherche de contexte et remplit les champs avec la valeur évaluée de la requête. Par exemple, dans lesuite.json, vous pouvez utiliser des chaînes d'espace réservé pour spécifier des valeurs de variables d'environnement qui changent avec chaque cas de test et IDT renseignera les variables d'environnement avec la valeur correcte pour chaque cas de test. Toutefois, lorsque vous utilisez des chaînes d'espace réservé danstest.jsonetsuite.json, les considérations suivantes s'appliquent à vos requêtes :

  • Vous devez chaque occurrence dudevicePooldans votre requête en minuscules. C'est-à-dire, utilisezdevicepool.

  • Pour les tableaux, vous ne pouvez utiliser que des tableaux de chaînes. De plus, les baies utilisent un système non standarditem1, item2,...,itemN. Si le tableau ne contient qu'un seul élément, il est sérialisé comme suit :item, ce qui le rend indiscernable d'un champ de chaîne.

  • Vous ne pouvez pas utiliser d'espaces réservés pour récupérer des objets du contexte.

En raison de ces considérations, nous recommandons que, dans la mesure du possible, vous utilisiez l'API pour accéder au contexte de votre logique de test plutôt que des chaînes d'espace réservé danstest.jsonetsuite.jsonfichiers suivants. Cependant, dans certains cas, il peut être plus pratique d'utiliser des espaces réservés JSONPath pour récupérer des chaînes uniques à définir comme variables d'environnement.