IDT コンテキストを使用する - AWS IoT Greengrass

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

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

テスト実行用に選択されたデバイスに関する情報。この情報は、選択されたデバイスの device.json ファイルdevices 配列要素に相当します。

devicePool

テスト実行用に選択されたデバイスプールに関する情報。この情報は、選択されたデバイスプールの device.json ファイルに定義されている最上位レベルのデバイスプール配列要素に相当します。

resource

resource.json ファイルからのリソースデバイスに関する情報。

resource.devices

この情報は、devices ファイルに定義されている resource.json 配列に相当します。各 devices 要素には、以下の追加フィールドが含まれています。

resource.device.name

リソースデバイスの名前。この値は、test.json ファイルで requiredResource.name 値に設定されます。

testData.awsCredentials

AWS クラウドに接続するためにテストによって使用される AWS 認証情報。この情報は、config.json ファイルから取得されます。

testData.logFilePath

テストケースがログメッセージを書き込むログファイルへのパス。このファイルは、存在しない場合、テストスイートによって作成されます。

userData

テストの実行者によって userdata.json ファイル に提供された情報。

コンテキスト内のデータにアクセスする

コンテキストは、JSONPath 表記を使用して JSON ファイルからクエリすることも、GetContextValue および GetContextString API を使用してテキスト実行可能ファイルからクエリすることもできます。IDT コンテキストにアクセスするための JSONPath 文字列の構文は、次のように異なります。

  • suite.json および test.json では、{{query}} を使用します。つまり、式を開始するためにルート要素 $. を使用しません。

  • test_orchestrator.yaml では {{query}} を使用します。

    非推奨のステートマシンを使用する場合、state_machine.json では {{$.query}} を使用します。

  • API コマンドでは、コマンドに応じて query または {{$.query}} を使用します。詳細については、SDK のインラインドキュメントを参照してください。

次の表に、一般的な 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 config object is $.config.awsRegion.
[start:end] Filters elements from an array, retrieving items beginning from the start index and going up to the end 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 構文 に従ったパターン値である必要があります。

{{query}} 形式の JSONPath クエリは、プレースホルダ文字列として、test.json ファイルの args および environmentVariables フィールド内と、suite.json ファイルの environmentVariables フィールド内で使用できます。IDT はコンテキスト検索を実行し、クエリの評価値をフィールドに入力します。例えば、suite.json ファイルでは、プレースホルダー文字列を使用して、各テストケースとともに変化する環境変数の値を指定できます。IDT は、環境変数に各テストケースの正しい値を入力します。ただし、test.json ファイルおよび suite.json ファイルでプレースホルダー文字列を使用する場合は、クエリに次の考慮事項が適用されます。

  • クエリに含まれる各 devicePool キーは、すべて小文字にする必要があります。つまり、代わりに devicepool を使用します。

  • 配列には、文字列の配列のみを使用できます。さらに、配列は非標準の item1, item2,...,itemN の形式を使用します。配列は、要素が 1 つしか含まれていない場合、item としてシリアル化され、文字列フィールドと区別がつかなくなります。

  • プレースホルダーを使用してコンテキストからオブジェクトを取得することはできません。

これらの事項を考慮して、テストロジックのコンテキストへのアクセスには、test.json ファイルおよび suite.json ファイルのプレースホルダー文字列ではなく、可能な限り API を使用することをお勧めします。ただし、環境変数として設定する単一の文字列を取得するときは、JSONPath プレースホルダーを使用する方が便利な場合があります。