Amazon IoT Greengrass Version 12023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅Amazon IoT Greengrass V1维护政策。在此日期之后,Amazon IoT Greengrass V1不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上运行的设备Amazon IoT Greengrass V1不会受到干扰,将继续运行并连接到云端。我们强烈建议你迁移到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.json文件. 这些区域有:
config
字段还包含以下附加字段:config.timeoutMultiplier
-
测试套件使用的任何超时值的乘数。该值由 IDT CLI 中的测试运行器指定。原设定值为
1
。
device
-
有关为测试运行选择的设备的信息。此信息等效于
devices
中的数组元素device.json文件对于所选设备。 devicePool
-
有关为测试运行选择的设备池的信息。此信息等同于中定义的顶级设备池阵列元素
device.json
所选设备池的文件。 resource
-
有关资源设备的信息
resource.json
文件。resource.devices
-
此信息等效于
devices
数组中定义resource.json
文件。EADdevices
元素包括以下附加字段:resource.device.name
-
资源设备名称。此值设置为
requiredResource.name
值中的值test.json
文件。
testData.awsCredentials
-
这些区域有:Amazon测试用于连接到Amazon云。此信息来自
config.json
文件。 testData.logFilePath
-
测试用例将日志消息写入的日志文件的路径。如果此文件不存在,则测试套件将创建此文件。
userData
-
测试运行者在userdata.json文件.
在上下文中访问数据
您可以使用 JSON 文件和文本可执行文本中的 jsonPath 表示法查询上下文GetContextValue
和GetContextString
API。JsonPath 字符串访问 IDT 上下文的语法如下所示:
-
In
suite.json
和test.json
您使用{{
. 也就是说,不要使用根元素query
}}$.
开始你的表情。 -
In
statemachine.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. |
.childname |
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 config object is
$.config.aws 区域 . |
[开始:结束] |
Filters elements from an array, retrieving items
beginning from the 启动 index and going up to the
结束 index, both inclusive. |
[index1、index 2、...、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. |
要创建过滤器表达式,请使用以下语法:
<jsonpath>
|<value>
operator
<jsonpath>
|<value>
在此语法中:
-
jsonpath
是一个使用标准 JSON 语法的 jsonPath。 -
value
是使用标准 JSON 语法的任何自定义值。 -
operator
是以下操作员之一:-
<
小于) -
<=
(小于或等于) -
==
等于)如果表达式中的 jsonPath 或值是数组、布尔值或对象值,那么这是唯一可以使用的受支持的二进制运算符。
-
>=
(大于或等于) -
>
大于) -
=~
(正则表达式匹配)。要在过滤器表达式中使用此运算符,表达式左侧的 jsonPath 或值必须计算为字符串,右侧必须是跟随RE2 语法.
-
你可以使用表格 {{{询问
} 作为占位符字符串在args
和environmentVariables
中的字段test.json
文件和environmentVariables
中的字段suite.json
文件。IDT 执行上下文查找,并使用查询的评估值填充字段。例如,在suite.json
文件中,您可以使用占位符字符串来指定随每个测试用例而更改的环境变量值,IDT 将使用每个测试用例的正确值填充环境变量。但是,当你在中使用占位符字符串时test.json
和suite.json
文件时,请注意以下事项:
-
你必须每次出现
devicePool
在你的查询中都是小写的。也就是说,使用devicepool
相反。 -
对于数组,你只能使用字符串数组。此外,阵列使用非标准
item1, item2,...,itemN
格式的日期和时间。如果数组只包含一个元素,那么它将被序列化为item
,使其与字符串字段无法区分。 -
不能使用占位符从上下文中检索对象。
出于这些考虑因素,我们建议尽可能使用 API 访问测试逻辑中的上下文,而不是中的占位符字符串test.json
和suite.json
文件。但是,在某些情况下,使用 jsonPath 占位符检索单个字符串以设置为环境变量可能更方便。