Usar o contexto IDT - AWS IoT Greengrass

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usar o contexto IDT

Quando o IDT executa um conjunto de testes, o conjunto de testes pode acessar um conjunto de dados que pode ser usado para determinar como cada teste é executado. Esses dados são chamados de contexto IDT. Por exemplo, configuração de dados do usuário fornecida por corredores de teste em umuserdata.jsonarquivo é disponibilizado para suítes de teste no contexto IDT.

O contexto IDT pode ser considerado um documento JSON somente leitura. Os conjuntos de testes podem recuperar dados e gravar dados no contexto usando tipos de dados JSON padrão, como objetos, matrizes, números e assim por diante.

Esquema de contexto

O contexto IDT usa o formato a seguir:

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

Informações daconfig.jsonarquivo. Oconfigtambém contém o seguinte campo adicional:

config.timeoutMultiplier

O multiplicador para o valor de tempo limite qualquer usado pelo conjunto de testes. Esse valor é especificado pelo executor de teste da IDT CLI. O valor padrão é 1.

device

Informações sobre o dispositivo selecionado para a execução de teste. Essas informações são equivalentes aodeviceselemento de matriz nodevice.jsonarquivopara o dispositivo selecionado.

devicePool

Informações sobre o pool de dispositivos selecionado para a execução de teste. Essas informações são equivalentes ao elemento de matriz de pool de dispositivos de nível superior definido nadevice.jsonarquivo para o pool de dispositivos selecionado.

resource

Informações sobre dispositivos de recursos doresource.jsonfile.

resource.devices

Essas informações são equivalentes aodevicesarray definido naresource.jsonfile. EACHdeviceselemento inclui o seguinte campo adicional:

resource.device.name

O nome do dispositivo de recursos. Esse valor é configurado como orequiredResource.namevalor natest.jsonfile.

testData.awsCredentials

OAWScredenciais usadas pelo teste para se conectar aoAWSnuvem. Essas informações são obtidas a partir doconfig.jsonfile.

testData.logFilePath

O caminho para o arquivo de log no qual o caso de teste grava mensagens de log. Se ele não existir, o conjunto de testes cria esse arquivo.

userData

Informações fornecidas pelo executor de teste nouserdata.jsonarquivo.

Acesse dados no contexto

Você pode consultar o contexto usando a notação JSONPath de seus arquivos JSON e do executável de texto com oGetContextValueeGetContextStringAPIs. A sintaxe das strings JSONPath para acessar o contexto IDT varia da seguinte forma:

  • Dentrosuite.jsonetest.json, você usa{{query}}. Ou seja, não use o elemento raiz$.para iniciar sua expressão.

  • Dentrotest_orchestrator.yaml, você usa{{query}}.

    Se você usar a máquina de estado obsoleta, então emstate_machine.json, você usa{{$.query}}.

  • Nos comandos da API, você usaqueryou{{$.query}}, dependendo do comando. Para obter mais informações, consulte a documentação em linha nos SDKs.

A tabela a seguir descreve os operadores em uma expressão JSONPath típica:

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 fim 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.

Para criar expressões de filtro, use a seguinte sintaxe:

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

Nesta sintaxe:

  • jsonpathé um JSONPath que usa sintaxe JSON padrão.

  • valueé qualquer valor personalizado que usa sintaxe JSON padrão.

  • operatoré um dos seguintes operadores:

    • <(Menor que)

    • <=(Menor ou igual a)

    • ==(Igual a)

      Se o JSONPath ou valor em sua expressão for um valor de matriz, booleano ou objeto, esse será o único operador binário suportado que você pode usar.

    • >=(Maior ou igual a)

    • >(Maior que)

    • =~(Correspondência de expressões regulares). Para usar esse operador em uma expressão de filtro, o JSONPath ou valor no lado esquerdo da expressão deve ser avaliado para uma string e o lado direito deve ser um valor padrão que segue oSintaxe RE2.

Você pode usar consultas JSONPath no formulário {{interrogação}} como cadeias de espaço reservado dentro doargseenvironmentVariablescampos emtest.jsonarquivos e dentro doenvironmentVariablescampos emsuite.jsonarquivos. O IDT executa uma pesquisa de contexto e preenche os campos com o valor avaliado da consulta. Por exemplo, nasuite.json, você pode usar strings de espaço reservado para especificar valores de variáveis de ambiente que mudam com cada caso de teste e o IDT preencherá as variáveis de ambiente com o valor correto para cada caso de teste. No entanto, quando você usa cadeias de espaço reservado notest.jsonesuite.jsonarquivos, as seguintes considerações se aplicam às suas consultas:

  • Você deve cada ocorrência dodevicePoolchave em sua consulta em todas as minúsculas. Ou seja, usedevicepoolEm vez disso.

  • Para matrizes, você pode usar somente matrizes de strings. Além disso, os arrays usam um não-padrãoitem1, item2,...,itemNformat. Se a matriz contiver apenas um elemento, ela será serializada comoitem, tornando-o indistinguível de um campo de string.

  • Você não pode usar espaços reservados para recuperar objetos do contexto.

Devido a essas considerações, recomendamos que, sempre que possível, você use a API para acessar o contexto em sua lógica de teste em vez de cadeias de espaço reservado notest.jsonesuite.jsonarquivos. No entanto, em alguns casos, pode ser mais conveniente usar espaços reservados JSONPath para recuperar cadeias de caracteres individuais para definir como variáveis de ambiente.