本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 IDT 上下文
当 IDT 运行测试套件时,测试套件可以访问一组数据,这些数据可用于确定每个测试的运行方式。这些数据被称为 IDT 上下文。例如,测试运行器在userdata.json
文件中提供的用户数据配置可用于 IDT 上下文中的测试套件。
IDT 上下文可以被视为只读 JSON 文档。测试套件可以使用标准 JSON 数据类型(如对象、数组、数字等)从上下文检索数据并将数据写入上下文。
上下文架构
IDT 上下文采用以下格式:
{ "config": { <config-json-content> "timeoutMultiplier": timeout-multiplier, "idtRootPath": <path/to/IDT/root> }, "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
。 config.idRootPath
-
此值是配置
userdata.json
文件时 IDT 绝对路径值的占位符。这由编译和 flash 命令使用。
device
-
有关选定进行测试的设备的信息。此信息等同于所选设备device.json文件中的
devices
数组元素。 devicePool
-
有关为测试运行选择的设备池的信息。此信息等同于在
device.json
文件中为选定设备池定义的顶级设备池数组元素。 resource
-
resource.json
文件中有关资源设备的信息。resource.devices
-
此信息等同于
resource.json
文件中定义的devices
数组。每个devices
元素都包含以下附加字段:resource.device.name
-
资源设备的名称。此值设置为
test.json
文件中的requiredResource.name
值。
testData.awsCredentials
-
测试用于连接到Amazon云的Amazon证书。此信息是从
config.json
文件中获取的。 testData.logFilePath
-
测试用例写入日志消息的日志文件的路径。如果该文件不存在,则测试套件会创建该文件。
userData
-
测试运行器在userdata.json文件中提供的信息。
在上下文中访问数据
您可以使用配置文件中的 JSONPath 表示法查询上下文,也可以使用GetContextValue
和GetContextString
API 从文本可执行文件中查询上下文。访问 IDT 上下文的 jsonPath 字符串的语法各不相同,如下所示:
-
在
suite.json
和中test.json
,你使用{{
。也就是说,不要使用根元素query
}}$.
来启动表达式。 -
在
statemachine.json
,你使用{{$.
。query
}} -
在 API 命令中
{{$.
,根据命令使用query
}}
或。有关更多信息,请参阅开发工具包中的内联文档。query
下表介绍了典型的 Fooar 中的运算符:
操作符 | 描述 |
---|---|
$ |
根元素。由于 IDT 的顶级上下文值是一个对象,因此您通常会使用它$. 来启动查询。 |
.childName |
使用childName 来自对象的名称访问子元素。如果应用于数组,则生成一个新数组,并将此运算符应用于每个元素。元素名称区分大小写。例如,访问config 对象中awsRegion 值的查询是$.config.awsRegion 。 |
[start:end] |
过滤数组中的元素,从索引开始检start 索到索end 引的项目,包括两者。 |
[index1, index2, ... , indexN] |
过滤数组中的元素,仅从指定索引中检索项目。 |
[?(expr)] |
使用expr 表达式过滤数组中的元素。该表达式的计算结果必须为布尔值的计算结果必须为布尔值的。 |
要创建过滤器表达式,请使用以下语法:
<jsonpath>
|<value>
operator
<jsonpath>
|<value>
在此语法中:
-
jsonpath
是一个使用标准 JSON 语法的 JSONPath。 -
value
是任何使用标准 JSON 语法的自定义值。 -
operator
是以下运算符之一:-
<
(小于) -
<=
(小于或等于) -
==
(等于)如果表达式中的 JSONPath 或值是数组、布尔值或对象值,则这是您可以使用的唯一支持的二进制运算符。
-
>=
(大于或等于) -
>
(大于) -
=~
(正则表达式匹配)。要在过滤器表达式中使用此运算符,表达式左侧的 jsonPath 或值的计算结果必须为字符串,右侧必须是遵循 RE2 语法的模式值。
-
您可以使用 {{query}} 形式的 JSONPath 查询
作为文件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 占位符检索要设置为环境变量的单个字符串可能会更方便。