Device Advisor ワークフロー - AWS IoT Core

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Device Advisor ワークフロー

このチュートリアルでは、カスタムテストスイートを作成し、コンソールでテストするデバイスに対してテストを実行する方法について説明します。テストが完了したら、テスト結果と詳細ログを表示できます。

前提条件

このチュートリアルを開始する前に、「設定」で説明されている手順を完了してください。

テストスイート定義を作成する

まず、 AWS SDK をインストールします

rootGroup の構文

ルートグループは、テストスイートに含めるテストケースを指定する JSON 文字列です。また、これらのテストケースに必要な構成も指定します。ルートグループを使用して、テストスイートを任意の態様で構造化し、順序付けます。テストスイートの階層は次のとおりです。

test suite → test group(s) → test case(s)

テストスイートには少なくとも 1 つのテストグループがなければならず、各テストグループには少なくとも 1 つのテストケースが必要です。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": "" } }] }] }

ルートグループでは、グループに含まれる nameconfiguration、および tests を使用してテストスイートを定義します。tests グループには、個々のテストの定義が含まれています。各テストは、nameconfiguration およびそのテストのテストケースを定義する test ブロックを使用して定義します。最後に、各テストケースは idversion で定義されます。

各テストケース (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") .deviceRoleArn("your-device-role-arn") //if using SigV4 for MQTT over WebSocket .build() ) .rootGroup("your-root-group-configuration") .devicePermissionRoleArn("your-device-permission-role-arn") .protocol("MqttV3_1_1 || MqttV5 || MqttV3_1_1_OverWebSocket || MqttV5_OverWebSocket") .build() ) .build() )

テストスイート定義を取得する

テストスイート定義を作成した後、CreateSuiteDefinition API オペレーションの応答オブジェクトで suiteDefinitionId を受け取ります。

オペレーションが suiteDefinitionId を返すと、各グループ内に新しい id フィールドが表示され、ルートグループ内にテストケース定義が表示される場合があります。これらの ID を使用してテストスイート定義のサブセットを実行できます。

Java SDK の例:

response = iotDeviceAdvisorClient.GetSuiteDefinition( GetSuiteDefinitionRequest.builder() .suiteDefinitionId("your-suite-definition-id") .build() )

テストエンドポイントを取得する

GetEndpoint API オペレーションを使用して、デバイスで使用されるテストエンドポイントを取得できます。テストに最適なエンドポイントを選択します。複数のテストスイートを同時に実行する場合は、thing ARNcertificate ARN、または device role ARN を指定してデバイスレベルのエンドポイントを使用します。単一のテストスイートを実行するには、アカウントレベルのエンドポイントを選択するための引数を GetEndpoint オペレーションに指定しません。

SDK の例:

response = iotDeviceAdvisorClient.getEndpoint(GetEndpointRequest.builder() .certificateArn("your-test-device-certificate-arn") .thingArn("your-test-device-thing-arn") .deviceRoleArn("your-device-role-arn") //if using SigV4 for MQTT over WebSocket .build())

テストスイートの実行を開始する

テストスイートの定義を作成し、Device Advisor のテストエンドポイントに接続するためにテストデバイスを設定したら、StartSuiteRun API を使用してテストスイートを実行します。

MQTT のお客様は、certificateArn または thingArn を使用してテストスイートを実行します。両方が設定されている場合、証明書がモノに属している場合は証明書が使用されます。

MQTT over WebSocket のお客様は、 deviceRoleArn を使用してテストスイートを実行します。指定されたロールがテストスイート定義で指定されたロールと異なる場合、指定されたロールは定義されたロールよりも優先されます。

.parallelRun() の場合、デバイスレベルのエンドポイントを使用して、1 つの AWS アカウント アカウントで複数のテストスイートを並列して実行する場合、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") .deviceRoleArn("your-device-role-arn") //if using SigV4 for MQTT over WebSocket .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 オペレーションを呼び出すと、サービスはクリーンアッププロセスを開始します。サービスがクリーンアップ処理を実行している間、テストスイートの実行ステータスが 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 オペレーションを使用して認定レポートを取得できます。この認定レポートを使用して、 AWS IoT Core 認定プログラムでデバイスを認定します。テストスイートが認定テストスイートであるかどうかを判断するには、intendedForQualification パラメータが true に設定されているかどうかを確認します。GetSuiteRunReport API オペレーションを呼び出した後、返された URL からレポートを最大 90 秒間ダウンロードできます。GetSuiteRunReport API オペレーションを最後に呼び出してから 90 秒を超える時間が経過した場合は、そのオペレーションを再度呼び出して有効な 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() )