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

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

使用 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

此值是 IDT 绝对路径值的占位符,同时配置userdata.json文件。这被构建命令和 flash 命令使用。

device

有关为测试运行选择的设备的信息。此信息等效于devices中的数组元素device.json文件对于所选设备。

devicePool

有关为测试运行选择的设备池的信息。此信息等同于中定义的顶级设备池阵列元素device.json所选设备池的文件。

resource

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

resource.devices

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

resource.device.name

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

testData.awsCredentials

这些区域有:Amazon测试用于连接到Amazon云。此信息来自config.json文件。

testData.logFilePath

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

userData

测试运行者在userdata.json文件.

在上下文中访问数据

您可以使用配置文件和文本可执行文件中的 jsonPath 表示法查询上下文,并使用GetContextValueGetContextStringAPI。JsonPath 字符串访问 IDT 上下文的语法如下所示:

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

  • Instatemachine.json,您使用{{$.query}}.

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

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

操作符 描述
$ 根元素。由于 IDT 的顶级上下文值是对象,因此您通常会使用$.开始查询。
.childName 使用名称访问子元素childName从对象中。如果应用于数组,则生成一个新的数组,并将此运算符应用于每个元素。元素名称区分大小写。例如,用于访问awsRegion中的值config对象是$.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 语法.

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

  • 你必须每次出现devicePool在你的查询中都是小写的。也就是说,使用devicepool相反。

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

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

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