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

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

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

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

devicePool

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

resource

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

resource.devices

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

resource.device.name

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

testData.awsCredentials

测试用于连接到 AWS 云的 AWS 凭证。此信息从 config.json 文件获取。

testData.logFilePath

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

userData

测试运行程序在 userdata.json 文件中提供的信息。

访问上下文中的数据

您可以通过 JSONPath 和 GetContextValue GetContextString,使用 JSON 文件和文本可执行文件中的 APIs 表示法查询上下文。 用于访问 IDT 上下文的 JSONPath 字符串的语法如下所示:

  • suite.jsontest.json 中,使用 {{query}}。 也就是说,请勿使用根元素 $. 启动您的表达式。

  • statemachine.json 中,您可以使用 {{$.query}}

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

下表介绍了典型 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 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 配置 object is $.config。awsRegion.
[开始:结束] Filters elements from an array, retrieving items beginning from the start index and going up to the 结束 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.

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

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

在此语法中:

  • jsonpath 是使用标准 JSON 语法的 JSONPath。

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

  • operator 是下列运算符之一:

    • <(小于)

    • <=(小于或等于)

    • ==(等于)

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

    • >= (大于或等于)

    • > (大于)

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

您可以使用 JSONPath 格式 {{ 的查询query}} 作为占位符字符串,位于 args 文件的 environmentVariablestest.json 字段中以及 environmentVariables 文件的 suite.json 字段中。IDT 执行上下文查找并使用查询的计算值填充字段。例如,在 suite.json 文件中,您可以使用占位符字符串指定随每个测试用例更改的环境变量值,IDT 将使用每个测试用例的正确值填充环境变量。但是,当您在 test.jsonsuite.json 文件中使用占位符字符串时,以下注意事项适用于您的查询:

  • 在查询中,必须每次都会以小写形式显示 devicePool 键。也就是说,请改用 devicepool

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

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

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