使用 IDT 上下文 - Amazon IoT Greengrass
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

您正在查看Amazon IoT Greengrass Version 1.Amazon IoT Greengrass Version 2是最新的主要版本Amazon IoT Greengrass. 有关使用Amazon IoT Greengrass V2,请参阅Amazon IoT Greengrass Version 2开发人员指南.

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用 IDT 上下文

IDT 运行测试套件时,测试套件可以访问一组可用于确定每个测试运行方式的数据。此数据称为 IDT 上下文。例如,测试运行者在userdata.json文件可供 IDT 上下文中的测试套件使用。

IDT 上下文可视为只读 JSON 文档。测试套件可以使用标准 JSON 数据类型(如对象、数组、数字等)从上下文检索数据并将数据写入上下文。

上下文架构

IDT 上下文采用以下格式:

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

信息来自config.jsonfile. 这些区域有:config字段还包含以下附加字段:

config.timeoutMultiplier

测试套件使用的任何超时值的乘数。此值由 IDT CLI 中的测试运行者指定。默认值为 1

device

有关为测试运行选定的设备的信息。此信息等效于devices数组元素device.jsonfile对于所选设备。

devicePool

有关为测试运行选定的设备池的信息。此信息等效于在device.json文件中的所选设备池。

resource

有关资源设备的信息resource.json文件。

resource.devices

此信息等效于devices数组中定义的resource.json文件。EACHdevices元素包括以下其他字段:

resource.device.name

资源设备的名称。该值设置为requiredResource.name中的值test.json文件。

testData.awsCredentials

这些区域有:Amazon凭据,测试用于连接到Amazon云。此信息可从config.json文件。

testData.logFilePath

测试用例将日志消息写入到的日志文件的路径。如果此文件不存在,则测试套件会创建它。

userData

测试运行者在userdata.jsonfile.

访问上下文中的数据

您可以使用 JSON 文件和文本可执行文件中的 JSONPath 符号来查询上下文GetContextValueGetContextStringAPI。用于访问 IDT 上下文的 JSONPath 字符串的语法如下所示:

  • Insuite.jsontest.json,您将{{query}}. 也就是说,不要使用根元素$.开始你的表达式。

  • Instatemachine.json,您将{{$.query}}.

  • 在 API 命令中,您可以使用query或者{{$.query}},具体取决于命令。有关更多信息,请参阅开发工具包中的内联文档。

下表描述了典型 JSONPath 表达式中的运算符:

Operator Description
$ The root element. Because the top-level context value for IDT is an object, you will typically use $. to start your queries.
. 子名称 Accesses the child element with name 儿童名称 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 配置 object is $.配置.AWS区域.
[开始:结束] Filters elements from an array, retrieving items beginning from the start index and going up to the End index, both inclusive.
[索引 1、索引 2、...、索引数据 N] Filters elements from an array, retrieving items from only the specified indices.
[? (分段)] Filters elements from an array using the expr expression. This expression must evaluate to a boolean value.

要创建筛选表达式,请使用以下语法:

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

在此语法中:

  • jsonpath是一个使用标准 JSON 语法的 JSON 路径。

  • value是任何使用标准 JSON 语法的自定义值。

  • operator是以下运算符之一:

    • <(小于)

    • <=(小于或等于)

    • ==(等于)

      如果表达式中的 JSONPath 或值是数组、布尔值或对象值,则这是您可以使用的唯一受支持的二进制运算符。

    • >=(大于或等于)

    • >(大于)

    • =~(正则表达式匹配)。要在筛选器表达式中使用此运算符,表达式左侧的 JSONPath 或值必须计算为字符串,右侧必须是RE2 语法.

您可以使用 {{query}} 作为占位符字符串argsenvironmentVariables中的字段test.json文件和environmentVariables中的字段suite.json文件。IDT 执行上下文查找并使用查询的评估值填充字段。例如,在suite.json文件中,您可以使用占位符字符串指定随每个测试用例而变化的环境变量值,IDT 将使用每个测试用例的正确值填充环境变量。但是,当您在test.jsonsuite.json文件,查询应注意以下事项:

  • 您必须每次出现devicePool键全部为小写。也就是说,使用devicepool相反。

  • 对于数组,您只能使用字符串数组。此外,数组使用非标准item1, item2,...,itemN格式的日期和时间。如果数组只包含一个元素,则它被序列化为item,使其与字符串字段无法区分。

  • 不能使用占位符从上下文中检索对象。

出于这些考虑因素,我们建议尽可能使用 API 访问测试逻辑中的上下文,而不是test.jsonsuite.json文件。但是,在某些情况下,使用 JSONPath 占位符检索单个字符串以设置为环境变量可能会更方便。