

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

# IDT コンテキストを使用する
<a name="idt-context"></a>

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

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

## コンテキストスキーマ
<a name="idt-context-schema"></a>

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` ファイル](set-config-custom.md#config-json-custom) からの情報。`config` フィールドには、次の追加フィールドも含まれます。    
**`config.timeoutMultiplier`**  
テストスイートによって使用される任意のタイムアウト値の乗数。この値は、IDT CLI からテストの実行者によって指定されます。デフォルト値は `1` です。  
**`config.idRootPath`**  
この値は、`userdata.json` ファイルを設定する際の IDT の絶対パス値のプレースホルダーです。この値はビルドコマンドとフラッシュコマンドで使用されます。

**`device`**  
テスト実行用に選択されたデバイスに関する情報。この情報は、選択されたデバイスの [`device.json` ファイル](set-config-custom.md#device-config-custom) の `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` ファイル](set-config-custom.md#userdata-config-custom) に提供された情報。

## コンテキスト内のデータにアクセスする
<a name="accessing-context-data"></a>

コンテキストは、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 構文](https://github.com/google/re2/wiki/Syntax) に従ったパターン値である必要があります。

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