View a markdown version of this page

IDT コンテキストを使用する - FreeRTOS

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

IDT コンテキストを使用する

IDT がテストスイートを実行するとき、テストスイートは、各テストの実行方法の決定に使用できる一連のデータにアクセスできます。このデータは IDT コンテキストと呼ばれます。例えば、テストの実行者によって userdata.json ファイルに提供されるユーザーデータ設定は、IDT コンテキスト内でテストスイートに提供されます。

IDT コンテキストは、読み取り専用の JSON ドキュメントと考えることができます。テストスイートは、オブジェクト、配列、数値などの標準 JSON データ型を使用して、コンテキストからデータを取得することや、コンテキストにデータを書き込むことができます。

コンテキストスキーマ

IDT コンテキストは次の形式を使用します。

{ "config": { <config-json-content> "timeoutMultiplier": timeout-multiplier, "idtRootPath": <path/to/IDT/root> }, "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 です。

config.idRootPath

この値は、userdata.json ファイルを設定する際の IDT の絶対パス値のプレースホルダーです。この値はビルドコマンドとフラッシュコマンドで使用されます。

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

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

  • statemachine.json では {{$.query}} を使用します。

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

次の表に、一般的な foobar JSONPath 式の演算子を示します。

演算子 説明
$ ルート要素。IDT の最上位レベルのコンテキスト値はオブジェクトであるため、通常は $. を使用してクエリを開始します。
.childName オブジェクトから、名前 childName を使用して子要素にアクセスします。配列に適用されると、この演算子が各要素に適用された新しい配列が生成されます。この要素名は、大文字と小文字が区別されます。例えば、config オブジェクトの awsRegion 値にアクセスするクエリは $.config.awsRegion です。
[start:end] 配列から要素をフィルターし、start インデックスから end インデックスまでの項目を取得します (ともに境界値を含む)。
[index1, index2, ... , indexN] 配列から要素をフィルターし、指定されたインデックスのみから項目を取得します。
[?(expr)] expr 式を使用して配列から要素をフィルターします。この式は、ブール値に評価される必要があります。

フィルター式を作成するには、次の構文を使用します。

<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 プレースホルダーを使用する方が便利な場合があります。