Utiliser le contexte IDT - AWS IoT Greengrass

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 à partir du contexte et les écrire à l'aide de types de données JSON standard tels que des objets, des tableaux, des nombres, etc.

Schema 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 àdevicesé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.jsonfichier pour 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 àdevicestableau 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 fichiertest.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, que vous utilisez{{query}}. En d'autres termes, n'utilisez pas l'élément racine$.pour commencer votre expression.

  • Danstest_orchestrator.yaml, que vous utilisez{{query}}.

    Si vous utilisez la machine à état obsolète, alors dansstate_machine.json, que vous utilisez{{$.query}}.

  • Dans les commandes API, vous utilisezqueryou{{$.query}}, en fonction de 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 de l'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'expressions régulières). 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ée en chaîne et le côté droit doit être une valeur de modèle qui suit laSyntaxe 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 leenvironmentVariableschamps 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à la place.

  • 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é en tant queitem, 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.