

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 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`**  
이 정보는 `resource.json` 파일에 정의된 `devices` 배열과 동일합니다. 각 `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>

`GetContextValue` 및 `GetContextString` API를 사용하여 구성 파일 및 텍스트 실행 파일에서 JSONPath 표기법을 사용해 컨텍스트를 쿼리할 수 있습니다. IDT 컨텍스트에 액세스하기 위한 JSONPath 문자열의 구문은 다음과 같이 다양합니다.
+ `suite.json`와(과) `test.json`에서는 `{{query}}`을(를) 사용합니다. 즉, 루트 요소 `$.`을(를) 사용하여 표현식을 시작하지 마십시오.
+ `statemachine.json`에서는 `{{$.query}}`을(를) 사용합니다.
+ API 명령에서는 명령에 따라 `query` 또는 `{{$.query}}`을(를) 사용합니다. 자세한 내용을 알아보려면 SDK에서 인라인 설명서를 참조하세요.

다음 표에서는 일반적인 foobar JSONPath 표현식의 연산자를 설명합니다.


| 연산자  | 설명  | 
| --- | --- | 
| \$1 | 루트 요소. IDT의 최상위 컨텍스트 값은 객체이므로 일반적으로 \$1.를 사용하여 쿼리를 시작합니다. | 
| .childName | 객체의 이름 childName을 사용하여 하위 요소에 액세스합니다. 배열에 적용하면 이 연산자가 각 요소에 적용된 새 배열이 생성됩니다. 요소 이름은 대/소문자를 구분합니다. 예를 들어, config 객체의 awsRegion 값에 액세스하기 위한 쿼리는 \$1.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)을 따르는 패턴 값이어야 합니다.

\$1\$1*query*\$1\$1 형식의 JSONPath 쿼리를 `test.json` 파일의 `args` 및 `environmentVariables` 필드, `suite.json` 파일의 `environmentVariables` 필드 내에서 자리 표시자 문자열로 사용할 수 있습니다. IDT는 컨텍스트 조회를 수행하고 쿼리의 평가된 값으로 필드를 채웁니다. 예를 들어 `suite.json` 파일에서 자리 표시자 문자열을 사용하여 각 테스트 사례에 따라 변경되는 환경 변수 값을 지정할 수 있으며, IDT는 환경 변수를 각 테스트 사례에 맞는 값으로 채웁니다. 하지만 `test.json` 및 `suite.json` 파일에서 자리 표시자 문자열을 사용하는 경우 쿼리에 다음 사항을 고려해야 합니다.
+ 쿼리에서 나타나는 `devicePool` 키는 모두 소문자로 입력해야 합니다. 즉, `devicepool`을(를) 대신 사용하십시오.
+ 배열의 경우 문자열 배열만 사용할 수 있습니다. 또한 배열은 비표준 `item1, item2,...,itemN` 형식을 사용합니다. 배열에 요소가 하나만 포함된 경우 이 배열은 `item`(으)로 직렬화되어 문자열 필드와 구분할 수 없게 됩니다.
+ 자리 표시자를 사용하여 컨텍스트에서 객체를 검색할 수 없습니다.

이러한 고려 사항 때문에 가능하면 `test.json` 및 `suite.json` 파일의 자리 표시자 문자열 대신 API를 사용하여 테스트 로직의 컨텍스트에 액세스하는 것이 좋습니다. 하지만 경우에 따라 JSONPath 자리 표시자를 사용하여 단일 문자열을 가져와서 환경 변수로 설정하는 것이 더 편리할 수 있습니다.