Usa il contesto IDT - AWS IoT Greengrass

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Usa il contesto IDT

Quando IDT esegue una suite di test, la suite di test può accedere a un set di dati che è possibile utilizzare per determinare l'esecuzione di ciascun test. Questi dati sono chiamati contesto IDT. Ad esempio, la configurazione dei dati utente fornita dai test runner in unuserdata.jsonil file è reso disponibile per le suite di test nel contesto IDT.

Il contesto IDT può essere considerato un documento JSON di sola lettura. Le suite di test possono recuperare dati e scrivere dati nel contesto utilizzando tipi di dati JSON standard come oggetti, array, numeri e così via.

Schema del contesto

Il contesto IDT utilizza il seguente formato:

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

Informazioni dalconfig.jsondocumento. Laconfigfield contiene anche il seguente campo aggiuntivo:

config.timeoutMultiplier

Il moltiplicatore per il valore di qualsiasi timeout utilizzato dalla suite di test. Questo valore è specificato dal test runner della CLI IDT. Il valore di default è 1.

device

Informazioni sul dispositivo selezionato per l'esecuzione di test. Queste informazioni sono equivalenti aldeviceselemento array neldevice.jsondocumentoper il dispositivo selezionato.

devicePool

Informazioni sul pool di dispositivi selezionato per l'esecuzione del test. Queste informazioni sono equivalenti all'elemento array del pool di dispositivi di livello superiore definito nelladevice.jsonfile per il pool di dispositivi selezionato.

resource

Informazioni sui dispositivi di risorse dalresource.jsonfile.

resource.devices

Queste informazioni sono equivalenti aldevicesarray definito nelresource.jsonfile. Ciascunodevicesinclude il seguente campo aggiuntivo:

resource.device.name

Il nome del dispositivo delle risorse. Questo valore è impostato sulrequiredResource.nameneltest.jsonfile.

testData.awsCredentials

LaAWScredenziali utilizzate dal test per connettersi alAWSnuvola. Queste informazioni sono ottenute dalconfig.jsonfile.

testData.logFilePath

Il percorso del file di log in cui il test case scrive i messaggi di log. Se non esiste, la suite di test crea questo file.

userData

Informazioni fornite dal corridore di prova nellauserdata.jsondocumento.

Accesso ai dati nel contesto

È possibile eseguire query sul contesto utilizzando la notazione JSONPath dai file JSON e dal file eseguibile di testo con ilGetContextValueeGetContextStringAPI. La sintassi per le stringhe JsonPath per accedere al contesto IDT varia come segue:

  • Nello statosuite.jsonetest.json, utilizzi{{query}}. Cioè, non utilizzare l'elemento radice$.per iniziare la tua espressione.

  • Nello statotest_orchestrator.yaml, utilizzi{{query}}.

    Se si utilizza la macchina a stato deprecato, quindi instate_machine.json, utilizzi{{$.query}}.

  • Nei comandi API, utilizziqueryo{{$.query}}, a seconda del comando. Per ulteriori informazioni, consulta la documentazione in linea negli SDK.

Nella tabella seguente vengono descritti gli operatori di un'espressione JSONPath tipica:

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 Nome figlio 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 Regione $.config.aws.
[inizio:fine] Filters elements from an array, retrieving items beginning from the avvio index and going up to the fine 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.

Per creare espressioni di filtro, utilizzare la seguente sintassi:

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

In questa sintassi:

  • jsonpathè un JSONPath che utilizza la sintassi JSON standard.

  • valueè un valore personalizzato che utilizza la sintassi JSON standard.

  • operatorè uno dei seguenti operatori:

    • <(Minore di)

    • <=(Minore di o uguale a)

    • ==(Equal to)

      Se il valore o JsonPath nell'espressione è un valore di array, booleano o oggetto, questo è l'unico operatore binario supportato che è possibile utilizzare.

    • >=(Maggiore di o uguale a)

    • >(Maggiore di)

    • =~(Corrispondenza dell'espressione regolare). Per utilizzare questo operatore in un'espressione di filtro, il valore JsonPath o sul lato sinistro dell'espressione deve essere valutato in una stringa e il lato destro deve essere un valore di pattern che segue ilSintassi RE2.

È possibile utilizzare le query JsonPath nel modulo {{domanda}} come stringhe segnaposto all'interno delargseenvironmentVariablescampi intest.jsonfile e all'interno delenvironmentVariablescampi insuite.jsonfile. IDT esegue una ricerca di contesto e popola i campi con il valore valutato della query. Ad esempio, nelsuite.jsonfile, è possibile utilizzare stringhe segnaposto per specificare i valori delle variabili di ambiente che cambiano con ogni test case e IDT popolerà le variabili di ambiente con il valore corretto per ogni test case. Tuttavia, quando si utilizzano stringhe segnaposto intest.jsonesuite.json, per le tue query si applicano le seguenti considerazioni:

  • È necessario ogni occorrenza deldevicePoolchiave nella tua query in minuscolo. Cioè, usadevicepoolinvece.

  • Per gli array, è possibile utilizzare solo array di stringhe. Inoltre, gli array utilizzano uno standard non standarditem1, item2,...,itemN. Se l'array contiene un solo elemento, viene serializzato comeitem, rendendolo indistinguibile da un campo stringa.

  • Non è possibile utilizzare i segnaposto per recuperare oggetti dal contesto.

A causa di queste considerazioni, ti consigliamo di utilizzare l'API per accedere al contesto nella logica di test invece di stringhe segnaposto intest.jsonesuite.jsonfile. Tuttavia, in alcuni casi potrebbe essere più conveniente utilizzare i segnaposto JsonPath per recuperare stringhe singole da impostare come variabili di ambiente.