

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

# 为测试运行者配置设置
<a name="set-custom-idt-config"></a>

要运行自定义测试套件，测试运行器必须根据他们要运行的测试套件配置设置。设置是根据位于该 `<device-tester-extract-location>/configs/` 文件夹中的配置文件模板指定的。如果需要，测试运行器还必须设置 IDT 用于连接 AWS 云的 AWS 凭证。

作为测试编写者，您需要配置这些文件来[调试您的测试套件](run-debug-custom-tests.md)。您必须向测试运行器提供说明，以便他们可以根据需要配置以下设置来运行您的测试套件。

## 配置 device.json
<a name="device-config-custom"></a>

`device.json` 文件包含有关运行测试的设备的信息（例如，IP 地址、登录信息、操作系统和 CPU 架构）。

测试运行器可以使用位于 `<device-tester-extract-location>/configs/` 文件夹中的以下模板 `device.json` 文件来提供此信息。

```
[
    {
        "id": "<pool-id>",
        "sku": "<pool-sku>",
        "features": [
            {
                "name": "<feature-name>",             
                "value": "<feature-value>",                
                "configs": [
                    {
                        "name": "<config-name>",                    
                        "value": "<config-value>"
                    }
                ],
            }
        ],     
        "devices": [
            {
                "id": "<device-id>",              
                "connectivity": {
                    "protocol": "ssh | uart | docker",                   
                    // ssh
                    "ip": "<ip-address>",
                    "port": <port-number>,
                    "auth": {
                        "method": "pki | password",
                        "credentials": {
                            "user": "<user-name>", 
                            // pki
                            "privKeyPath": "/path/to/private/key",
                                         
                            // password
                            "password": "<password>",
                        }
                    },
                    
                    // uart
                    "serialPort": "<serial-port>",
                    
                    // docker
                    "containerId": "<container-id>",
                    "containerUser": "<container-user-name>",
                }
            }
        ]
    }
]
```

包含值的所有字段都为必填字段，如下所述：

`id`  
一个用户定义的字母数字 ID，用于唯一地标识称作*设备池*的设备集合。属于池的设备必须具有相同的硬件。运行一组测试时，池中的设备将用于对工作负载进行并行化处理。多个设备用于运行不同测试。

`sku`  
唯一标识所测试设备的字母数字值。该 SKU 用于跟踪符合条件的设备。  
如果需要在 AWS Partner 设备目录中列出您的主板，在此处指定的 SKU 必须与在列表过程中使用的 SKU 相匹配。

`features`  
可选。包含设备支持的功能的数组。设备功能是您在测试套件中配置的用户定义值。您必须向测试运行器提供有关要包含在 `device.json` 文件中的功能名称和值的信息。例如，如果您想测试一台可充当其他设备的 MQTT 服务器的设备，则可以配置测试逻辑来验证名为 `MQTT_QOS` 的功能的特定支持级别。测试运行器提供此功能名称，并将该功能值设置为其设备支持的 QOS 级别。您可以通过 `devicePool.features` 查询从 [IDT 上下文](idt-context.md)中检索所提供的信息，也可以通过 `pool.features` 查询从[测试编排工具上下文](idt-state-machine.md#state-machine-context)中检索所提供的信息。    
`features.name`  
特征的名称。  
`features.value`  
支持的功能值。  
`features.configs`  
该功能的配置设置（如果需要）。    
`features.config.name`  
配置设置的名称。  
`features.config.value`  
支持的设置值。

`devices`  
池中待测试的设备阵列。至少需要选择一个设备。  <a name="device-array-fields"></a>  
`devices.id`  
用户定义的测试的设备的唯一标识符。  
`connectivity.protocol`  
用于与此设备通信的通信协议。池中的每台设备都必须使用相同的协议。  
目前，唯一支持的值，对于物理设备为 `ssh` 和 `uart`，对于 Docker 容器为 `docker`。  
`connectivity.ip`  
测试的设备 IP 地址。  
此属性仅在 `connectivity.protocol` 设置为 `ssh` 时适用。  
`connectivity.port`  
可选。用于 SSH 连接的端口号。  
默认值为 22。  
此属性仅在 `connectivity.protocol` 设置为 `ssh` 时适用。  
`connectivity.auth`  
连接的身份验证信息。  
此属性仅在 `connectivity.protocol` 设置为 `ssh` 时适用。    
`connectivity.auth.method`  
用于通过给定的连接协议访问设备的身份验证方法。  
支持的值为：  
+ `pki`
+ `password`  
`connectivity.auth.credentials`  
用于身份验证的凭证。    
`connectivity.auth.credentials.password`  
该密码用于登录到正在测试的设备。  
此值仅在 `connectivity.auth.method` 设置为 `password` 时适用。  
`connectivity.auth.credentials.privKeyPath`  
用于登录所测试设备的私有密钥的完整路径。  
此值仅在 `connectivity.auth.method` 设置为 `pki` 时适用。  
`connectivity.auth.credentials.user`  
用于登录所测试设备的用户名。  
`connectivity.serialPort`  
可选。设备所连接的串行端口。  
此属性仅在 `connectivity.protocol` 设置为 `uart` 时适用。  
`connectivity.containerId`  
所测试的 Docker 容器的容器 ID 或名称。  
此属性仅在 `connectivity.protocol` 设置为 `ssh` 时适用。  
`connectivity.containerUser`  
可选。容器内用户对用户的名称。默认值为 Dockerfile 中提供的用户。  
默认值为 22。  
此属性仅在 `connectivity.protocol` 设置为 `ssh` 时适用。
要检查测试运行器是否为测试配置了错误的设备连接，可以从测试编排工具上下文中检索 `pool.Devices[0].Connectivity.Protocol`，并将其与 `Choice` 状态下的预期值进行比较。如果使用的协议不正确，则使用 `LogMessage` 状态打印一条消息并过渡到 `Fail` 状态。  
或者，您可以使用错误处理代码来报告错误设备类型的测试失败。

## （可选）配置 userdata.json
<a name="userdata-config-custom"></a>

`userdata.json` 文件包含测试套件所需但 `device.json` 文件中未指定的任何其他信息。此文件的格式取决于测试套件中定义的[`userdata_scheme.json`文件](idt-json-config.md#userdata-schema-json)。如果您是测试编写者，请务必将此信息提供给将运行您编写的测试套件的用户。

## （可选）配置 resource.json
<a name="resource-config-custom"></a>

`resource.json` 文件包含有关将用作资源设备的所有设备的信息。资源设备是测试被测设备的某些功能所需的设备。例如，要测试设备的蓝牙功能，您可以使用资源设备来测试您的设备能否成功连接到该设备。资源设备是可选的，您可以根据需要任意数量的资源设备。作为测试编写者，您可以使用 [test.json 文件](idt-json-config.md#test-json)来定义测试所需的资源设备功能。然后，测试运行器使用 `resource.json` 文件提供具有所需功能的资源设备池。请务必将此信息提供给将运行您编写的测试套件的用户。

测试运行器可以使用位于 `<device-tester-extract-location>/configs/` 文件夹中的以下模板 `resource.json` 文件来提供此信息。

```
[
    {
        "id": "<pool-id>",
        "features": [
            {
                "name": "<feature-name>",             
                "version": "<feature-version>",                
                "jobSlots": <job-slots>
            }
        ],     
        "devices": [
            {
                "id": "<device-id>",              
                "connectivity": {
                    "protocol": "ssh | uart | docker",                   
                    // ssh
                    "ip": "<ip-address>",
                    "port": <port-number>,
                    "auth": {
                        "method": "pki | password",
                        "credentials": {
                            "user": "<user-name>", 
                            // pki
                            "privKeyPath": "/path/to/private/key",
                                         
                            // password
                            "password": "<password>",
                        }
                    },
                    
                    // uart
                    "serialPort": "<serial-port>",
                    
                    // docker
                    "containerId": "<container-id>",
                    "containerUser": "<container-user-name>",
                }
            }
        ]
    }
]
```

包含值的所有字段都为必填字段，如下所述：

`id`  
一个用户定义的字母数字 ID，用于唯一地标识称作*设备池*的设备集合。属于池的设备必须具有相同的硬件。运行一组测试时，池中的设备将用于对工作负载进行并行化处理。多个设备用于运行不同测试。

`features`  
可选。包含设备支持的功能的数组。此字段中所需的信息在测试套件的 [test.json 文件](idt-json-config.md#test-json)中定义，这些信息用于确定要运行哪些测试以及如何运行这些测试。如果测试套件不需要任何功能，则此字段不是必填字段。    
`features.name`  
功能的名称。  
`features.version`  
功能版本。  
`features.jobSlots`  
用于指明可以同时使用该设备的测试次数的设置。默认值为 `1`。

`devices`  <a name="device-array"></a>
池中待测试的设备阵列。至少需要选择一个设备。  <a name="device-array-fields"></a>  
`devices.id`  
用户定义的测试的设备的唯一标识符。  
`connectivity.protocol`  
用于与此设备通信的通信协议。池中的每台设备都必须使用相同的协议。  
目前，唯一支持的值，对于物理设备为 `ssh` 和 `uart`，对于 Docker 容器为 `docker`。  
`connectivity.ip`  
测试的设备 IP 地址。  
此属性仅在 `connectivity.protocol` 设置为 `ssh` 时适用。  
`connectivity.port`  
可选。用于 SSH 连接的端口号。  
默认值为 22。  
此属性仅在 `connectivity.protocol` 设置为 `ssh` 时适用。  
`connectivity.auth`  
连接的身份验证信息。  
此属性仅在 `connectivity.protocol` 设置为 `ssh` 时适用。    
`connectivity.auth.method`  
用于通过给定的连接协议访问设备的身份验证方法。  
支持的值为：  
+ `pki`
+ `password`  
`connectivity.auth.credentials`  
用于身份验证的凭证。    
`connectivity.auth.credentials.password`  
该密码用于登录到正在测试的设备。  
此值仅在 `connectivity.auth.method` 设置为 `password` 时适用。  
`connectivity.auth.credentials.privKeyPath`  
用于登录所测试设备的私有密钥的完整路径。  
此值仅在 `connectivity.auth.method` 设置为 `pki` 时适用。  
`connectivity.auth.credentials.user`  
用于登录所测试设备的用户名。  
`connectivity.serialPort`  
可选。设备所连接的串行端口。  
此属性仅在 `connectivity.protocol` 设置为 `uart` 时适用。  
`connectivity.containerId`  
所测试的 Docker 容器的容器 ID 或名称。  
此属性仅在 `connectivity.protocol` 设置为 `ssh` 时适用。  
`connectivity.containerUser`  
可选。容器内用户对用户的名称。默认值为 Dockerfile 中提供的用户。  
默认值为 22。  
此属性仅在 `connectivity.protocol` 设置为 `ssh` 时适用。

## （可选）配置 config.json
<a name="config-json-custom"></a>

`config.json` 文件包含 IDT 的配置信息。通常，测试运行器无需修改此文件，除非提供他们的 IDT AWS 用户凭证和 AWS 区域（可选）。如果提供了具有所需权限的 AWS 凭证，则 AWS IoT Device Tester 会收集使用情况指标并将其提交给 AWS。这是一项可选功能，用来改进 IDT 功能。有关更多信息，请参阅 [IDT 使用量指标](idt-usage-metrics.md)。

测试运行器可以通过以下方式之一配置 AWS 凭证：
+ **凭证文件**

  IDT 使用与 AWS CLI 相同的凭证文件。有关更多信息，请参阅[配置和凭证文件](https://docs.aws.amazon.com/cli/latest/userguide/cli-config-files.html)。

  凭证文件的位置因您使用的操作系统而异：
  + macOS、Linux：`~/.aws/credentials`
  + Windows：`C:\Users\UserName\.aws\credentials`
+ **环境变量**：

  环境变量是由操作系统维护且由系统命令使用的变量。在 SSH 会话期间定义的变量在该会话关闭后不可用。IDT 可使用 `AWS_ACCESS_KEY_ID` 和 `AWS_SECRET_ACCESS_KEY` 环境变量来存储 AWS 凭证

  要在 Linux、macOS 或 Unix 上设置这些变量，请使用 **export**：

  ```
  export AWS_ACCESS_KEY_ID=<your_access_key_id>
  export AWS_SECRET_ACCESS_KEY=<your_secret_access_key>
  ```

  要在 Windows 上设置这些变量，请使用 **set**：

  ```
  set AWS_ACCESS_KEY_ID=<your_access_key_id>
  set AWS_SECRET_ACCESS_KEY=<your_secret_access_key>
  ```

要配置 IDT 的 AWS 凭证，测试运行器需要编辑 `<device-tester-extract-location>/configs/` 文件夹中 `config.json` 文件中的 `auth` 部分。

```
{
    "log": {
        "location": "logs"
    },
    "configFiles": {
        "root": "configs",
        "device": "configs/device.json"
    },
    "testPath": "tests",
    "reportPath": "results",
    "awsRegion": "<region>",
    "auth": {
        "method": "file | environment",
        "credentials": {
            "profile": "<profile-name>"
        }
    }
}
]
```

包含值的所有字段都为必填字段，如下所述：

**注意**  
此文件中的所有路径都是相对于 *<device-tester-extract-location>* 定义的。

`log.location`  
*<device-tester-extract-location>* 中日志文件夹的路径。

`configFiles.root`  
包含配置文件的文件夹的路径。

`configFiles.device`  
`device.json` 文件的路径。

`testPath`  
包含测试套件的文件夹的路径。

`reportPath`  
IDT 运行测试套件后将包含测试结果的文件夹的路径。

`awsRegion`  
可选。测试套件将使用的 AWS 区域。如果未设置，则测试套件将使用每个测试套件中指定的默认区域。

`auth.method`  
IDT 用于检索 AWS 凭证的方法。支持的值是用于从凭证文件中检索凭证的 `file`，以及使用环境变量检索凭证的 `environment`。

`auth.credentials.profile`  
要从凭证文件中使用的凭证配置文件。此属性仅在 `auth.method` 设置为 `file` 时适用。