

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

# IDT 테스트 오케스트레이터 구성
<a name="idt-test-orchestrator"></a>

IDT v4.5.2부터 IDT에는 새로운 *테스트 오케스트레이터* 구성 요소가 포함됩니다. 테스트 오케스트레이터는 테스트 제품군 실행 흐름을 제어하고 IDT가 모든 테스트 실행을 완료한 후 테스트 보고서를 생성하는 IDT 구성 요소입니다. 테스트 오케스트레이터는 사용자 정의 규칙을 기반으로 테스트 선택 및 테스트 실행 순서를 결정합니다.

테스트 제품군에 사용자 정의 테스트 오케스트레이터가 포함되어 있지 않은 경우 IDT가 테스트 오케스트레이터를 생성합니다.

기본 테스트 오케스트레이터는 다음 기능을 수행합니다.
+ 테스트 실행기에 전체 테스트 제품군 대신 특정 테스트 그룹을 선택하고 실행할 수 있는 기능을 제공합니다.
+ 특정 테스트 그룹을 선택하지 않은 경우, 테스트 제품군의 모든 테스트 그룹을 무작위 순서로 실행합니다.
+ 보고서를 생성하고 각 테스트 그룹 및 테스트 사례의 테스트 결과를 보여주는 콘솔 요약을 인쇄합니다.

테스트 오케스트레이터는 IDT 상태 시스템을 대체합니다. 테스트 제품군을 개발할 때 IDT 상태 시스템 대신 테스트 오케스트레이터를 사용하는 것이 좋습니다. 테스트 오케스트레이터는 다음과 같은 향상된 기능을 제공합니다.
+ IDT 상태 시스템이 사용하는 명령형 형식이 아닌 선언적 형식을 사용합니다. 이를 통해 실행할 테스트 및 실행 시기를 지정할 수 있습니다.
+ 특정 그룹 처리, 보고서 생성, 오류 처리 및 결과 추적을 관리하므로 이러한 작업을 수동으로 관리할 필요가 없습니다.
+ 기본적으로 주석을 지원하는 YAML 형식을 사용합니다.
+ 동일한 워크플로를 정의하는 데 테스트 오케스트레이터보다 80% 적은 디스크 공간이 필요합니다.
+ 사전 테스트 검증을 추가하여 워크플로 정의에 잘못된 테스트 ID 또는 순환 종속성이 포함되어 있지 않은지 확인합니다.

## 테스트 오케스트레이터 형식
<a name="idt-test-orchestrator-format"></a>

다음 템플릿을 사용하여 `{{custom-test-suite-folder}}/suite/test_orchestrator.yaml` 파일을 직접 구성할 수 있습니다.

```
Aliases:
  {{string}}: {{context-expression}}

ConditionalTests:
  - Condition: {{context-expression}}
    Tests:
      - {{test-descriptor}}

Order:
  - - {{group-descriptor}}
    - {{group-descriptor}}

Features:
  - Name: {{feature-name}}
    Value: {{support-description}}
    Condition: {{context-expression}}
    Tests:
        - {{test-descriptor}}
    OneOfTests:
        - {{test-descriptor}}
    IsRequired: {{boolean}}
```

여기 설명된 것처럼 값이 포함된 모든 필드는 필수입니다.

`Aliases`  
선택 사항. 컨텍스트 표현식에 매핑되는 사용자 정의 문자열입니다. 별칭을 사용하면 테스트 오케스트레이터 구성의 컨텍스트 표현식을 식별하기 위한 표시 이름을 생성할 수 있습니다. 이는 복잡한 컨텍스트 표현식이나 여러 위치에서 사용하는 표현식을 생성할 때 특히 유용합니다.  
컨텍스트 표현식을 사용하여 다른 IDT 구성의 데이터에 액세스할 수 있는 컨텍스트 쿼리를 저장할 수 있습니다. 자세한 내용은 [컨텍스트에서 데이터 액세스](idt-context.md#accessing-context-data) 단원을 참조하십시오.  

**Example**  
**예제**  

```
Aliases:
    FizzChosen: "'{{$pool.features[?(@.name == 'Fizz')].value[0]}}' == 'yes'"    
    BuzzChosen: "'{{$pool.features[?(@.name == 'Buzz')].value[0]}}' == 'yes'"    
    FizzBuzzChosen: "'{{$aliases.FizzChosen}}' && '{{$aliases.BuzzChosen}}'"
```

`ConditionalTests`  
선택 사항. 조건 목록 및 각 조건이 충족될 때 실행되는 해당 테스트 사례입니다. 각 조건에는 여러 테스트 사례가 있을 수 있지만 특정 테스트 사례를 하나의 조건에만 할당할 수 있습니다.  
기본적으로 IDT는 이 목록의 조건에 할당되지 않은 테스트 사례를 모두 실행합니다. 이 섹션을 지정하지 않으면 IDT가 테스트 제품군의 모든 테스트 그룹을 실행합니다.  
`ConditionalTests` 목록의 각 항목에는 다음 파라미터가 포함되어 있습니다.    
`Condition`  
부울 값으로 평가되는 컨텍스트 표현식입니다. 평가된 값이 true인 경우 IDT는 `Tests` 파라미터에 지정된 테스트 사례를 실행합니다.  
`Tests`  
테스트 설명자의 목록입니다.  
각 테스트 설명자는 테스트 그룹 ID와 하나 이상의 테스트 사례 ID를 사용하여 특정 테스트 그룹에서 실행할 개별 테스트를 식별합니다. 테스트 설명자는 다음 형식을 사용합니다.  

```
GroupId: {{group-id}}
CaseIds: [{{test-id}}, {{test-id}}] # optional
```

**Example**  
**예제**  
다음 예제에서는 `Aliases`와 같이 정의할 수 있는 일반 컨텍스트 표현식을 사용합니다.  

```
ConditionalTests:
    - Condition: "{{$aliases.Condition1}}"
      Tests:
          - GroupId: A
          - GroupId: B
    - Condition: "{{$aliases.Condition2}}"
      Tests:
          - GroupId: D
    - Condition: "{{$aliases.Condition1}} || {{$aliases.Condition2}}"
      Tests:
          - GroupId: C
```

IDT는 정의된 조건에 따라 다음과 같이 테스트 그룹을 선택합니다.
+ `Condition1`이 true인 경우 IDT는 테스트 그룹 A, B 및 C의 테스트를 실행합니다.
+ `Condition2`이 true인 경우 IDT는 테스트 그룹 C 및 D의 테스트를 실행합니다.

`Order`  
선택 사항. 테스트를 실행하는 순서입니다. 테스트 순서는 테스트 그룹 수준에서 지정합니다. 이 섹션을 지정하지 않으면 IDT는 해당하는 모든 테스트 그룹을 무작위 순서로 실행합니다. `Order`의 값은 그룹 설명자 목록의 목록입니다. `Order` 목록에 없는 모든 테스트 그룹은 나열된 다른 테스트 그룹과 병렬로 실행할 수 있습니다.  

각 그룹 설명자 목록에는 하나 이상의 그룹 설명자가 포함되며 각 설명자에 지정된 그룹을 실행하는 순서를 식별합니다. 다음 형식을 사용하여 개별 그룹 설명자를 정의할 수 있습니다.
+ `{{group-id}}` - 기존 테스트 그룹의 그룹 ID입니다.
+ `[{{group-id}}, {{group-id}}]` - 서로 임의의 순서로 실행할 수 있는 테스트 그룹의 목록입니다.
+ `"*"` - 와일드카드 이는 현재 그룹 설명자 목록에 아직 지정되지 않은 모든 테스트 그룹의 목록과 동일합니다.

`Order`의 값은 다음 요구 사항도 충족해야 합니다.
+ 그룹 설명자에서 지정하는 테스트 그룹 ID가 테스트 제품군에 있어야 합니다.
+ 각 그룹 설명자 목록에는 테스트 그룹이 하나 이상 포함되어야 합니다.
+ 각 그룹 설명자 목록에는 고유한 그룹 ID가 포함되어야 합니다. 개별 그룹 설명자 내에서 테스트 그룹 ID를 반복해서 사용할 수 없습니다.
+ 그룹 설명자 목록에는 와일드카드 그룹 설명자가 최대 하나만 포함될 수 있습니다. 와일드카드 그룹 설명자는 목록의 첫 번째 또는 마지막 항목이어야 합니다.

**Example**  
**예제**  
테스트 그룹 A, B, C, D, E가 포함된 테스트 제품군의 경우 다음 예제 목록은 IDT가 먼저 테스트 그룹 A 및 테스트 그룹 B를 순서대로 실행한 다음 테스트 그룹 C, D, E를 순서에 상관없이 실행하도록 지정하는 다양한 방법을 보여줍니다.  
+ 

  ```
  Order:
      - - A
        - B
        - [C, D, E]
  ```
+ 

  ```
  Order:
      - - A
        - B
        - "*"
  ```
+ 

  ```
  Order:
      - - A
        - B
      
      - - B
        - C
      
      - - B
        - D
      
      - - B
        - E
  ```

`Features`  
선택 사항. IDT가 `awsiotdevicetester_report.xml` 파일에 추가하려는 제품 기능의 목록입니다. 이 섹션을 지정하지 않으면 IDT는 보고서에 제품 기능을 추가하지 않습니다.  
제품 기능은 디바이스가 충족할 수 있는 특정 기준에 대한 사용자 정의 정보입니다. 예를 들어, MQTT 제품 기능은 디바이스가 MQTT 메시지를 올바르게 게시하도록 지정할 수 있습니다. `awsiotdevicetester_report.xml`에서는 지정된 테스트의 통과 여부에 따라 제품 기능이 `supported`, `not-supported` 또는 사용자 정의 값으로 설정됩니다.  
`Features` 목록의 각 항목은 다음 파라미터로 구성됩니다.    
`Name`  
기능의 이름입니다.  
`Value`  
선택 사항. 보고서에서 `supported` 대신 사용할 사용자 지정 값입니다. 이 값을 지정하지 않으면 IDT가 테스트 결과에 따라 기능 값을 `supported` 또는 `not-supported`로 설정합니다. 동일한 기능을 다른 조건으로 테스트하는 경우, `Features` 목록에 있는 기능의 각 인스턴스에 대해 사용자 지정 값을 사용할 수 있으며, IDT는 지원되는 조건에 대해 기능 값을 연결합니다. 자세한 내용을 알아보려면 다음 섹션을 참조하세요.  
`Condition`  
부울 값으로 평가되는 컨텍스트 표현식입니다. 평가된 값이 true인 경우 IDT는 테스트 제품군 실행을 완료한 후 테스트 보고서에 기능을 추가합니다. 평가된 값이 false인 경우 테스트가 보고서에 포함되지 않습니다.  
`Tests`  
선택 사항. 테스트 설명자의 목록입니다. 기능이 지원되려면 이 목록에 지정된 모든 테스트를 통과해야 합니다.  
이 목록의 각 테스트 설명자는 테스트 그룹 ID와 하나 이상의 테스트 사례 ID를 사용하여 특정 테스트 그룹에서 실행할 개별 테스트를 식별합니다. 테스트 설명자는 다음 형식을 사용합니다.  

```
GroupId: {{group-id}}
CaseIds: [{{test-id}}, {{test-id}}] # optional
```
`Features` 목록의 각 기능에 대해 `Tests` 또는 `OneOfTests` 중 하나를 지정해야 합니다.  
`OneOfTests`  
선택 사항. 테스트 설명자의 목록입니다. 기능이 지원되려면 이 목록에 지정된 테스트를 하나 이상 통과해야 합니다.  
이 목록의 각 테스트 설명자는 테스트 그룹 ID와 하나 이상의 테스트 사례 ID를 사용하여 특정 테스트 그룹에서 실행할 개별 테스트를 식별합니다. 테스트 설명자는 다음 형식을 사용합니다.  

```
GroupId: {{group-id}}
CaseIds: [{{test-id}}, {{test-id}}] # optional
```
`Features` 목록의 각 기능에 대해 `Tests` 또는 `OneOfTests` 중 하나를 지정해야 합니다.  
`IsRequired`  
테스트 보고서에서 기능이 필요한지 여부를 정의하는 부울 값입니다. 기본값은 `false`입니다.

## 테스트 오케스트레이터 컨텍스트
<a name="idt-test-orchestrator-context"></a>

테스트 오케스트레이터 컨텍스트는 실행 중에 테스트 오케스트레이터가 사용할 수 있는 데이터가 포함된 읽기 전용 JSON 문서입니다. 테스트 오케스트레이터 컨텍스트는 테스트 오케스트레이터에서만 액세스할 수 있으며 테스트 흐름을 결정하는 정보를 포함합니다. 예를 들어 `userdata.json` 파일에서 테스트 실행기가 구성한 정보를 사용하여 특정 테스트 실행이 필요한지 여부를 결정할 수 있습니다.

테스트 오케스트레이터 컨텍스트는 다음 형식을 사용합니다.

```
{
    "pool": {
        {{<device-json-pool-element>}}
    },
    "userData": {
        {{<userdata-json-content>}}
    },
    "config": {
        {{<config-json-content>}}
    }
}
```

`pool`  
테스트 실행을 위해 선택한 디바이스 풀에 대한 정보입니다. 선택한 디바이스 풀의 경우 이 정보는 `device.json` 파일에 정의된 해당 최상위 디바이스 풀 배열 요소에서 검색됩니다.

`userData`  
`userdata.json` 파일에 있는 정보입니다.

`config`  
`config.json` 파일에 있는 정보입니다.

JSONPath 표기법을 사용하여 컨텍스트를 쿼리할 수 있습니다. 상태 정의의 JSONPath 쿼리 구문은 `{{{{query}}}}`입니다. 테스트 오케스트레이터 컨텍스트에서 데이터에 액세스할 때는 각 값이 문자열, 숫자 또는 부울로 평가되어야 합니다.

JSONPath 표기법을 사용하여 컨텍스트에서 데이터에 액세스하는 방법에 대한 자세한 내용은 [IDT 컨텍스트 사용](idt-context.md) 섹션을 참조하십시오.