本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Device Advisor 工作流
本教程将教您如何创建自定义测试套件,以及如何对要在控制台中测试的设备运行测试。测试完成后,您可以查看测试结果和详细日志。
先决条件
要完成本教程,请完成 设置 中概述的步骤。
创建测试套件定义
首先,安装 Amazon SDK。
rootGroup 语法
根组是 JSON 字符串,用于指定测试套件中包含哪些测试用例以及这些测试用例的任何必要配置。使用根组以您喜欢的任何方式构建并排列测试套件。测试套件的层次结构如下:
test suite → test group(s) → test case(s)
测试套件必须至少有一个测试组,并且每个测试组必须至少有一个测试用例。Device Advisor 将按照定义的测试组和测试用例顺序运行测试。
每个根组都遵循此基本结构:
{ "configuration": { // for all tests in the test suite "": "" } "tests": [{ "name": "" "configuration": { // for all sub-groups in this test group "": "" }, "tests": [{ "name": "" "configuration": { // for all test cases in this test group "": "" }, "test": { "id": "" "version": "" } }] }] }
一个包含 "name"、"configuration" 和 "tests" 的数据块被称为“组定义”。一个包含 "name"、"configuration" 和 "test" 的数据库被称为“测试用例定义”。每个包含 "id" 和 "version" 的 "test" 数据块都被称为“测试用例”。
有关如何填写每个测试用例("test" 数据块)中 "id" 和 "version" 字段的信息,请参阅 Device Advisor 测试用例。该部分还包含有关可用 "configuration" 设置的信息。
以下是根组配置的示例,该示例指定了“MQTT Connect Happy Case”和“MQTT Connect Exponential Backoff Retries”测试用例,以及配置字段的说明。
{ "configuration": {}, // Suite-level configuration "tests": [ // Group definitions should be provided here { "name": "My_MQTT_Connect_Group", // Group definition name "configuration": {} // Group definition-level configuration, "tests": [ // Test case definitions should be provided here { "name": "My_MQTT_Connect_Happy_Case", // Test case definition name "configuration": { "EXECUTION_TIMEOUT": 300 // Test case definition-level configuration, in seconds }, "test": { "id": "MQTT_Connect", // test case id "version": "0.0.0" // test case version } }, { "name": "My_MQTT_Connect_Jitter_Backoff_Retries", // Test case definition name "configuration": { "EXECUTION_TIMEOUT": 600 // Test case definition-level configuration, in seconds }, "test": { "id": "MQTT_Connect_Jitter_Backoff_Retries", // test case id "version": "0.0.0" // test case version } }] }] }
创建测试套件定义时,您必须提供根组配置。保存在响应对象中返回的 suiteDefinitionId。此 ID 用于检索测试套件定义信息和运行测试套件。
以下是一个 Java SDK 示例:
response = iotDeviceAdvisorClient.createSuiteDefinition( CreateSuiteDefinitionRequest.builder() .suiteDefinitionConfiguration(SuiteDefinitionConfiguration.builder() .suiteDefinitionName("your-suite-definition-name") .devices( DeviceUnderTest.builder() .thingArn("your-test-device-thing-arn") .certificateArn("your-test-device-certificate-arn") .build() ) .rootGroup("your-root-group-configuration") .devicePermissionRoleArn("your-device-permission-role-arn") .protocol("MqttV3_1_1 || MqttV5"") .build() ) .build() )
获取测试套件定义
创建测试套件定义后,您会在 CreateSuiteDefinition API 的响应对象中收到 suiteDefinitionId。
您可能会看到返回的根组的各个组和测试用例定义中都有新的 id 字段。这是预期的结果,您可以使用这些 ID 来运行测试套件定义中的子集。
Java SDK 示例:
response = iotDeviceAdvisorClient.GetSuiteDefinition( GetSuiteDefinitionRequest.builder() .suiteDefinitionId("your-suite-definition-id") .build() )
获取测试终端节点
使用 GetEndpoint API 获取设备使用的测试端点。选择终端节点时,请选择最适合情况的终端节点。要同时运行多个测试套件,请通过提供 thing ARN 或 certificate ARN 使用设备级端节。要运行单个测试套件,不提供参数选择账户级终端节点。
SDK 示例:
response = iotDeviceAdvisorClient.getEndpoint(GetEndpointRequest.builder() .certificateArn("your-test-device-certificate-arn") .thingArn("your-test-device-thing-arn") .build())
启动测试套件运行
在成功创建测试套件定义并配置测试设备以连接到 Device Advisor 测试终端节点之后,请使用 StartSuiteRun API 运行您的测试套件。使用 certificateArn 或者 thingArn 运行测试套件。如果两者都完成了配置,如果证书属于该事物,则将使用该证书。
对于 .parallelRun(),如果通过一个 Amazon 帐户使用设备级终端节点并行运行多个测试套件,使用 true。
SDK 示例:
response = iotDeviceAdvisorClient.startSuiteRun(StartSuiteRunRequest.builder() .suiteDefinitionId("your-suite-definition-id") .suiteRunConfiguration(SuiteRunConfiguration.builder() .primaryDevice(DeviceUnderTest.builder() .certificateArn("your-test-device-certificate-arn") .thingArn("your-test-device-thing-arn") .build()) .parallelRun(true | false) .build()) .build())
保存在响应中返回的 suiteRunId。您会用此来检索此测试套件运行的结果。
运行一个测试套件
启动测试套件运行后,您可以使用 GetSuiteRun API 检查其进度及结果。
SDK 示例:
// Using the SDK, call the GetSuiteRun API. response = iotDeviceAdvisorClient.GetSuiteRun( GetSuiteRunRequest.builder() .suiteDefinitionId("your-suite-definition-id") .suiteRunId("your-suite-run-id") .build())
停止测试套件运行
要停止仍在运行的测试套件,可以调用 StopSuiteRun API。在您调用 StopSuiteRun API 后,则该服务将启动清理程序。当服务运行清理程序时,测试套件运行状态将会升级到 Stopping。清理程序需要几分钟时间,一旦完成,测试套件运行状态将会升级到 Stopped 状态。测试运行完全停止后,您将能够启动另一个测试套件运行。您可以使用 GetSuiteRun API 定期检查套件运行状态,如上一节所示。
SDK 示例:
// Using the SDK, call the StopSuiteRun API. response = iotDeviceAdvisorClient.StopSuiteRun( StopSuiteRun.builder() .suiteDefinitionId("your-suite-definition-id") .suiteRunId("your-suite-run-id") .build())
获取成功的资格测试套件运行的资格报告
如果您运行的资格测试套件已完成,则可以使用 GetSuiteRunReport API 检索资格报告。您可以使用此资格报告来使用 Amazon IoT Core 资格计划为您的设备获取资格。要确定测试套件是否为合资格测试套件,请检查 intendedForQualification 参数是否设置为 true。在您调用 GetSuiteRunReport API 后,返回的下载 URL 可在 90 秒内供您下载。如果从上次调用 GetSuiteRunReport API 之后超过 90 秒,请再次调用该 API 以检索有效的 URL。
SDK 示例:
// Using the SDK, call the getSuiteRunReport API. response = iotDeviceAdvisorClient.getSuiteRunReport( GetSuiteRunReportRequest.builder() .suiteDefinitionId("your-suite-definition-id") .suiteRunId("your-suite-run-id") .build() )