

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

# 長期テスト
<a name="device-advisor-tests-long-duration"></a>

長期テストは、デバイスが長期間動作しているときの動作を監視する新しいテストスイートです。デバイスの特定の動作に焦点を当てた個別のテストを実行する場合と比較して、長期テストでは、デバイスの寿命全体にわたるさまざまな現実世界のシナリオにおけるデバイスの動作を調べます。Device Advisor は、可能な限り効率的な順序でテストを調整します。テストでは、テスト中のデバイスのパフォーマンスに関する有用なメトリクスを含む概要ログを含む結果とログが生成されます。

## MQTT 長期テストケース
<a name="long-duration-test-case"></a>

MQTT の長期テストケースでは、MQTT Connect、サブスクライブ、発行、再接続などのハッピーケースシナリオでデバイスの動作が最初に確認されます。次に、デバイスが MQTT 再接続バックオフ、長期のサーバー切断、断続的な接続など、複数の複雑な障害シナリオに見舞われます。

## MQTT 長期テストケース実行フロー
<a name="long-duration-test-case-execution-flow"></a>

MQTT 長期テストケースの実行には、次の 3 つのフェーズがあります。

![\[基本テストの実行、高度なテストの実行、追加の実行時間を示す「MQTT 長時間テストの実行」。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/mqtt-execution-flow.png)


### 基本テストの実行
<a name="basic-tests-execution"></a>

このフェーズでは、テストケースは簡単なテストを並行して実行します。このテストでは、設定で選択したオペレーションがデバイスにあるかどうかを検証します。

基本テストのセットには、選択したオペレーションに基づいて次の内容が含まれる場合があります。

#### CONNECT
<a name="basic-tests-execution-connect"></a>

このシナリオでは、デバイスがブローカーと正常に接続できるかどうかを検証します。

![\[デバイスが CONNECT メッセージを送信し、ブローカーが正常なリターンコードを含む CONNACK メッセージで応答する基本的な接続フロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/basic-connect.png)


#### 発行
<a name="basic-tests-execution-publish"></a>

このシナリオでは、デバイスがブローカーに対して正常に発行されているかどうかを検証します。

##### QoS 0
<a name="publish-qos0"></a>

このテストケースは、QoS 0 での発行中に、デバイスがブローカーに `PUBLISH` メッセージを正常に送信するかどうかを検証します。このテストでは、デバイスが `PUBACK` メッセージを受信するまで待ちません。

![\[デバイスが QoS 0 レベルで PUBLISH メッセージを送信するの PUBLISH QoS 0 フロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/Qos0.png)


##### QoS 1
<a name="publish-qos1"></a>

このテストケースでは、デバイスは QoS 1 で 2 つの `PUBLISH` メッセージをブローカーに送信することが想定されます。最初の `PUBLISH` メッセージの後、ブローカーは最大 15 秒待ってから、応答します。デバイスは、15 秒以内に同じパケット ID を使用して元の `PUBLISH` メッセージを再試行する必要があります。その場合、ブローカーは `PUBACK` メッセージを返し、テストが検証します。デバイスが `PUBLISH` を再試行しない場合、元の `PUBACK` がデバイスに送信され、テストはシステムメッセージとともに**警告付きで合格**とマークされます。テスト実行中にデバイスが接続を失って再接続した場合、テストシナリオは失敗することなくリセットされます。そのため、デバイスはテストシナリオのステップを再実行する必要があります。

![\[デバイスが QoS 1 レベルとブローカーとの複数のインタラクションで PUBLISH メッセージを送信する PUBLISH QoS 1 フロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/Qos1.png)


#### サブスクライブ
<a name="basic-tests-execution-subscribe"></a>

このシナリオでは、デバイスがブローカーに対して正常にサブスクライブしているかどうかを検証します。

##### QoS 0
<a name="subscribe-qos0"></a>

このテストケースは、QoS 0 でのサブスクライブ中にデバイスがブローカーに `SUBSCRIBE` メッセージを正常に送信するかどうかを検証します。このテストでは、デバイスが SUBACK メッセージを受信するまで待ちません。

![\[デバイスが QoS 0 レベルの SUBSCRIBE メッセージを送信し、ブローカーが SUBACK メッセージと Success Maximum QoS 0 コードで応答する SUBSCRIBE QoS 0 フロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/subscribe-Qos0.png)


##### QoS 1
<a name="subscribe-qos1"></a>

このテストケースでは、デバイスは QoS 1 で 2 つの `SUBSCRIBE` メッセージをブローカーに送信することが想定されます。最初の `SUBSCRIBE` メッセージの後、ブローカーは最大 15 秒待ってから、応答します。デバイスは、15 秒以内に同じパケット ID を使用して元の `SUBSCRIBE` メッセージを再試行する必要があります。その場合、ブローカーは `SUBACK` メッセージを返し、テストが検証します。デバイスが `SUBSCRIBE` を再試行しない場合、元の `SUBACK` がデバイスに送信され、テストはシステムメッセージとともに**警告付きで合格**とマークされます。テスト実行中にデバイスが接続を失って再接続した場合、テストシナリオは失敗することなくリセットされます。そのため、デバイスはテストシナリオのステップを再実行する必要があります。

![\[デバイスが QoS 1 レベルとブローカーとの複数のインタラクションで SUBSCRIBE メッセージを送信する SUBSCRIBE QoS 1 フロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/subscribe-Qos1.png)


#### 再接続
<a name="basic-tests-execution-reconnect"></a>

このシナリオでは、デバイスが正常に接続から切断された後に、デバイスがブローカーと正常に再接続するかどうかを検証します。テストスイート中にデバイスを複数回接続しても、Device Advisor はデバイスを切断しません。代わりに、テストを **[Pass]** (合格) としてマークします。

![\[DUT とブローカー間の RECONNECT フロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/reconnect.png)


### 高度なテストの実行
<a name="advanced-tests-execution"></a>

このフェーズでは、テストケースはより複雑なテストを連続して実行し、デバイスがベストプラクティスに従っているかどうかを検証します。これらの高度なテストは選択可能で、必要ない場合はオプトアウトできます。それぞれの高度なテストには、シナリオの要求に応じて独自のタイムアウト値があります。

#### QoS 1 サブスクリプションで PUBACK を返す
<a name="advanced-tests-execution-return-puback"></a>

**注記**  
このシナリオは、デバイスが QoS 1 サブスクリプションを実行できる場合にのみ選択してください。

このシナリオでは、デバイスがトピックをサブスクライブしてブローカーから `PUBLISH` メッセージを受信した後に `PUBACK` メッセージを返すかどうかを検証します。

![\[DUT とブローカー間の RETURN PUBACK ON QoS 1 SUBSCTIPTION。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/return-puback.png)


#### 大きなペイロードを受け取る
<a name="advanced-tests-execution-receive-large-payload"></a>

**注記**  
このシナリオは、デバイスが QoS 1 サブスクリプションを実行できる場合にのみ選択してください。

このシナリオでは、ペイロードが大きい QoS 1 トピックの `PUBLISH` メッセージをブローカーから受信した後、デバイスが `PUBACK` メッセージで応答するかどうかを検証します。想定されるペイロードの形式は、`LONG_PAYLOAD_FORMAT` オプションを使用して設定できます。

![\[DUT とブローカー間の RECEIVE LARGE PAYLOAD フロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/large-payload.png)


#### 永続セッション
<a name="advanced-tests-execution-persistent-session"></a>

**注記**  
このシナリオは、デバイスが QoS 1 サブスクリプションを実行でき、永続セッションを維持できる場合にのみ選択してください。

このシナリオは、永続セッションを維持する際のデバイスの動作を検証します。以下の条件が満たされると、テストは検証されます。
+ デバイスは、アクティブな QoS 1 サブスクリプションと永続セッションが有効になっているブローカーに接続します。
+ デバイスはセッション中にブローカーから正常に切断されます。
+ デバイスはブローカーに再接続し、そのトリガートピックへのサブスクリプションを再開します。これらのトピックを明示的に再サブスクライブする必要はありません。
+ デバイスは、サブスクライブされたトピックについてブローカーに保存されたメッセージを正常に受信し、想定どおりに動作します。

 永 AWS IoT 続セッションの詳細については、[「MQTT 永続セッションの使用](https://docs.aws.amazon.com//iot/latest/developerguide/mqtt.html#mqtt-persistent-sessions)」を参照してください。

![\[DUT とブローカー間の PERSISTENT SESSION フロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/persistent-session.png)


#### KEEP ALIVE
<a name="advanced-tests-execution-keep-alive"></a>

このシナリオでは、デバイスがブローカーから ping 応答を受信しない後に正常に切断されるかどうかを検証します。接続には有効なキープアライブタイマーが設定されている必要があります。このテストの一環として、ブローカーは、`PUBLISH`、`SUBSCRIBE`、および `PINGREQ` メッセージに送信されるすべての応答をブロックします。テスト対象のデバイスが、MQTT 接続を切断しているかどうかも検証します。

![\[DUT とブローカー間の KEEP ALIVE フロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/keep-alive.png)


#### 断続的な接続
<a name="advanced-tests-execution-intermittent-connectivity"></a>

このシナリオでは、ブローカーがデバイスをランダムな間隔で一定時間切断した後に、デバイスがブローカーに再び接続できるかどうかを検証します。

![\[DUT とブローカー間の INTERMITTENT CONNECTIVITY フロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/intermittent.png)


#### 再接続のバックオフ
<a name="advanced-tests-execution-reconnect-backoff"></a>

このシナリオでは、ブローカーが複数回接続を切断したときに、デバイスにバックオフメカニズムが実装されているかどうかを検証します。Device Advisor は、バックオフタイプを指数関数、ジッター、線形、または定数として報告します。バックオフの試行回数は、`BACKOFF_CONNECTION_ATTEMPTS` オプションを使用して設定できます。デフォルト値は 5 です。この値は 5～10 の間で設定できます。

このテストに合格するには、テスト対象のデバイスに、[エクスポネンシャルバックオフとジッター](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/)メカニズムを実装することをお勧めします。

![\[DUT とブローカー間の RECONNECT BACKOFF フロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/reconnect-backoff.png)


#### 長期のサーバー切断
<a name="advanced-tests-execution-longserver-disconnect"></a>

このシナリオでは、ブローカーがデバイスを長時間 (最大 120 分) 切断した後に、デバイスが正常に再接続できるかどうかを検証します。サーバーを切断する時間は、`LONG_SERVER_DISCONNECT_TIME` オプションを使用して設定できます。デフォルト値は 120 分です。この値は 30 分から 120 分まで設定できます。

![\[DUT とブローカー間の LONG SERVER DISCONNECT フロー。\]](http://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/images/longserver-disconnect.png)


### 追加実行時間
<a name="additional-execution-time"></a>

追加実行時間は、上記のすべてのテストを完了してからテストケースを終了するまでにテストが待機する時間です。顧客はこの追加時間を利用して、デバイスとブローカーとの間のすべての通信を監視および記録します。追加実行時間は、`ADDITIONAL_EXECUTION_TIME` オプションを使用して設定できます。デフォルトでは、このオプションは 0 分に設定されており、0～120 分に設定できます。

## MQTT 長期テスト設定オプション
<a name="long-duration-test-case-config-options"></a>

MQTT 長期テストで提供される設定オプションはすべてオプションです。以下のオプションが利用できます。

**オペレーション**  
デバイスが実行するオペレーションのリスト (`CONNECT`、`PUBLISH` および `SUBSCRIBE` など)。テストケースは、指定されたオペレーションに基づいてシナリオを実行します。指定されていないオペレーションは有効とみなされます。  

```
{                                
"OPERATIONS": ["PUBLISH", "SUBSCRIBE"]
//by default the test assumes device can CONNECT   
}
```

**シナリオ**  
選択したオペレーションに基づいて、テストケースはシナリオを実行してデバイスの動作を検証します。シナリオには、次の 2 つのタイプがあります。  
+ **基本シナリオ**は、デバイスが設定の一部として上記で選択したオペレーションを実行できるかどうかを検証する簡単なテストです。これらは、構成で指定されたオペレーションに基づいて事前に選択されています。設定に追加の入力は必要ありません。
+ **高度なシナリオ**は、デバイスに対して実行されるより複雑なシナリオで、デバイスが実際の条件を満たしたときにベストプラクティスに従っているかどうかを検証します。これらはオプションで、シナリオの配列としてテストスイートの設定入力に渡すことができます。

```
{                                
    "SCENARIOS": [      // list of advanced scenarios
                "PUBACK_QOS_1",
                "RECEIVE_LARGE_PAYLOAD",
                "PERSISTENT_SESSION",
                "KEEP_ALIVE",
                "INTERMITTENT_CONNECTIVITY",
                "RECONNECT_BACK_OFF",
                "LONG_SERVER_DISCONNECT"
    ]  
}
```

**BASIC\$1TESTS\$1EXECUTION\$1TIME\$1OUT:**  
すべての基本テストが完了するまでのテストケースの最大待機時間。デフォルト値は 60 分です。この値は 30 分から 120 分まで設定できます。

**LONG\$1SERVER\$1DISCONNECT\$1TIME:**  
長期のサーバー切断テスト中に、テストケースがデバイスを切断して再接続するまでにかかった時間。デフォルト値は 60 分です。この値は 30 分から 120 分まで設定できます。

**ADDITIONAL\$1EXECUTION\$1TIME:**  
このオプションを設定すると、すべてのテストが完了した後、デバイスとブローカー間のイベントを監視するための時間ウィンドウが設けられます。デフォルト値は 0 分です。この値は 0 から 120 分まで設定できます。

**BACKOFF\$1CONNECTION\$1ATTEMPTS:**  
このオプションは、テストケースによってデバイスが切断される回数を設定します。これは再接続バックオフテストで使用されます。デフォルト値は 5 回です。この値は 5～10 の間で設定できます。

**LONG\$1PAYLOAD\$1FORMAT:**  
デバイスがサブスクライブしている QoS 1 トピックにテストケースを発行するときにデバイス想定するメッセージペイロードの形式。

**API テストケースの定義:**

```
{                                
"tests":[
   {
      "name":"my_mqtt_long_duration_test",
      "configuration": {
         // optional
         "OPERATIONS": ["PUBLISH", "SUBSCRIBE"], 
         "SCENARIOS": [      
            "LONG_SERVER_DISCONNECT", 
            "RECONNECT_BACK_OFF",
            "KEEP_ALIVE",
            "RECEIVE_LARGE_PAYLOAD",
            "INTERMITTENT_CONNECTIVITY",
            "PERSISTENT_SESSION",   
         ],
         "BASIC_TESTS_EXECUTION_TIMEOUT": 60, // in minutes (60 minutes by default)
         "LONG_SERVER_DISCONNECT_TIME": 60,   // in minutes (120 minutes by default)
         "ADDITIONAL_EXECUTION_TIME": 60,     // in minutes (0 minutes by default)
         "BACKOFF_CONNECTION_ATTEMPTS": "5",
         "LONG_PAYLOAD_FORMAT":"{"message":"${payload}"}"
      },
      "test":{
         "id":"MQTT_Long_Duration",
         "version":"0.0.0"
      }
   }
 ]      
}
```

## MQTT 長期テストケース概要ログ
<a name="long-duration-test-case-summary-log"></a>

MQTT 長期テストケースは、通常のテストケースよりも長時間実行されます。実行中のデバイス接続、発行、サブスクライブなどの重要なイベントを一覧表示する概要ログが別途提供されます。詳細には、テストされた内容、テストされなかったもの、失敗したものが含まれます。ログの最後には、テストケースの実行中に発生したすべてのイベントの概要がテストに含まれます。これには、以下が含まれます。
+ *デバイスに設定されているキープアライブタイマー。*
+ *デバイスに設定された永続セッションフラグ。*
+ *テスト実行中のデバイス接続数。*
+ *デバイス再接続バックオフタイプ (再接続バックオフテストで検証された場合)。*
+ *テストケースの実行中にデバイスが発行したトピック。*
+ *テストケースの実行中にデバイスがサブスクライブしたトピック。*