

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

# AWS IoT Greengrass 테스트 프레임워크 사용
<a name="gg-testing-framework"></a>

GTF(Greengrass Testing Framework)는 고객의 관점에서 종단 간 자동화를 지원하는 구성 요소 컬렉션입니다. GTF는 [Cucumber](https://cucumber.io)를 기능 드라이버로 사용합니다.는 동일한 구성 요소를 AWS IoT Greengrass 사용하여 다양한 디바이스에서 소프트웨어 변경 사항을 검증합니다. 자세한 내용은 [Greengrass Testing Framework on Github](https://github.com/aws-greengrass/aws-greengrass-testing/tree/dev_v1)를 참조하세요.

GTF는 구성 요소의 BDD(동작 중심 개발)를 장려하기 위해 자동 테스트를 실행하는 데 사용되는 도구인 Cucumber를 사용하여 구현됩니다. Cucumber에서 이 시스템의 기능은 `feature`라는 특수 유형의 파일에 요약되어 있습니다. 각 기능은 사람이 읽을 수 있는 형식인 시나리오로 설명되고, 이는 자동 테스트로 변환할 수 있는 사양입니다. 각 시나리오는 Gherkin이라는 도메인별 언어를 사용하여 테스트 중인 이 시스템의 상호 작용 및 결과를 정의하는 일련의 단계로 설명됩니다. [Gherkin 단계](https://cucumber.io/docs/gherkin/reference/#steps)는 사양을 테스트 흐름에 하드 와이어링하는 단계 정의라는 메서드를 사용하여 프로그래밍 코드에 연결됩니다. GTF의 단계 정의는 Java로 구현됩니다.

**Topics**
+ [작동 방식](#gg-testing-framework-how-gtf-works)
+ [Changelog](#gtf-changelog)
+ [Greengrass Testing Framework 구성 옵션](configuration-options-gtf.md)
+ [자습서: Greengrass 테스트 프레임워크 및 Greengrass 개발 키트를 사용하여 엔드 투 엔드 테스트 실행](run-e2e-tests-tutorial.md)
+ [자습서: 신뢰도 테스트 제품군의 신뢰도 테스트 사용](confidence-tests-tutorial.md)

## 작동 방식
<a name="gg-testing-framework-how-gtf-works"></a>

AWS IoT Greengrass 는 GTF를 여러 Java 모듈로 구성된 독립 실행형 JAR로 배포합니다. 구성 요소의 종단 간 테스트에 GTF를 사용하려면 Java 프로젝트 내에서 테스트를 구현해야 합니다. Java 프로젝트에서 테스트용 JAR을 종속성으로 추가하면 GTF의 기존 기능을 사용하고 자체 사용자 지정 테스트 사례를 작성하면서 기능을 확장할 수 있습니다. 사용자 지정 테스트 사례를 실행하려면 Java 프로젝트를 빌드하고 [Greengrass Testing Framework 구성 옵션](configuration-options-gtf.md)에서 설명하는 구성 옵션을 사용하여 대상 JAR을 실행할 수 있습니다.

### GTF 독립형 JAR
<a name="w2ab1c24c19c25c11b5"></a>

Greengrass는 Cloudfront를 [Maven](https://maven.apache.org/) 리포지토리로 사용하여 다양한 버전의 GTF 독립형 JAR을 호스팅합니다. GTF 버전의 전체 목록은 [GTF 릴리스](https://github.com/aws-greengrass/aws-greengrass-testing/releases)를 참조하세요.

GTF 독립형 JAR에는 다음 모듈이 포함됩니다. 단, 이 모듈에만 국한되지 않습니다. 프로젝트에서 이러한 각 종속성을 개별적으로 선택하거나 [테스트 독립형 JAR 파일](https://github.com/aws-greengrass/aws-greengrass-testing/tree/dev_v1/aws-greengrass-testing-standalone)에 모두 포함할 수 있습니다.
+ `aws-greengrass-testing-resources`:이 모듈은 테스트 과정에서 AWS 리소스의 수명 주기를 관리하기 위한 추상화를 제공합니다. GTF가 해당 AWS 리소스의 생성 및 제거를 처리할 수 있도록 추`ResourceSpec`상화를 사용하여 사용자 지정 리소스를 정의하는 데 사용할 수 있습니다.
+ `aws-greengrass-testing-platform`: 이 모듈은 테스트 수명 주기 동안 테스트 중인 디바이스에 대한 플랫폼 수준 추상화를 제공합니다. 여기에는 플랫폼과 무관하게 OS와 상호 작용하는 데 사용되는 API가 포함되어 있으며 디바이스 쉘에서 실행되는 명령을 시뮬레이션하는 데 사용할 수 있습니다.
+ `aws-greengrass-testing-components`: 이 모듈은 배포, IPC 및 기타 기능과 같은 Greengrass 핵심 기능을 테스트하는 데 사용되는 샘플 구성 요소로 구성됩니다.
+ `aws-greengrass-testing-features`: 이 모듈은 재사용 가능한 일반 단계와 Greengrass 환경 내에서 테스트하는 데 사용되는 정의로 구성됩니다.

**Topics**
+ [작동 방식](#gg-testing-framework-how-gtf-works)
+ [Changelog](#gtf-changelog)
+ [Greengrass Testing Framework 구성 옵션](configuration-options-gtf.md)
+ [자습서: Greengrass 테스트 프레임워크 및 Greengrass 개발 키트를 사용하여 엔드 투 엔드 테스트 실행](run-e2e-tests-tutorial.md)
+ [자습서: 신뢰도 테스트 제품군의 신뢰도 테스트 사용](confidence-tests-tutorial.md)

## Changelog
<a name="gtf-changelog"></a>

다음 표에서는 GTF의 각 릴리스에서 변경된 중요 사항에 대해 설명합니다. 자세한 내용은 GitHub의 [GTF Releases 페이지](https://github.com/aws-greengrass/aws-greengrass-testing/releases)를 참조하세요.


|  **버전**  |  **변경 사항**  | 
| --- | --- | 
| 1.2.0 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/gg-testing-framework.html) [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/gg-testing-framework.html)  | 
|  1.1.0  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/greengrass/v2/developerguide/gg-testing-framework.html)  | 
|  1.0.0  |  초기 버전입니다.  | 

# Greengrass Testing Framework 구성 옵션
<a name="configuration-options-gtf"></a>

## JEG 구성 옵션
<a name="configuration-options-gtf-options"></a>

Greengrass Testing Framework(GTF)를 사용하면 엔드 투 엔드 테스트 프로세스를 시작하는 동안 특정 파라미터를 구성하여 테스트 흐름을 오케스트레이션할 수 있습니다. 이러한 구성 옵션을 GTF 독립 실행형 JAR에 대한 CLI 인수로 지정할 수 있습니다.

<a name="gtf_options"></a>GTF 버전 1.1.0 이상에서는 다음 구성 옵션이 제공됩니다.
+ `additional-plugins` – (선택 사항) 추가 Cucumber 플러그인
+ `aws-region` - AWS 서비스에 대한 특정 리전 엔드포인트를 대상으로 합니다. 기본값은 AWS SDK에서 검색되는 내용입니다.
+ `credentials-path` - 선택적 AWS 프로필 자격 증명 경로입니다. 기본값은 호스트 환경에서 검색된 자격 증명입니다.
+ `credentials-path-rotation` - AWS 자격 증명의 선택적 교체 기간입니다. 기본값은 15분 또는 `PT15M`입니다.
+ `csr-path` - CSR에서 사용되어 디바이스 인증서가 생성되는 경로입니다.
+ `device-mode` - 테스트 중인 대상 디바이스입니다. 기본값은 로컬 디바이스입니다.
+ `env-stage` – Greengrass의 배포 환경을 대상으로 합니다. 기본값은 프로덕션입니다.
+ `existing-device-cert-arn` - Greengrass의 디바이스 인증서로 사용하려는 기존 인증서의 arn입니다.
+ `feature-path` – 추가 특성 파일이 포함된 파일 또는 디렉터리입니다. 기본적으로 추가 특성 파일은 사용되지 않습니다.
+ `gg-cli-version` – Greengrass CLI의 버전을 재정의합니다. 기본값은 `ggc.version`에 있는 값입니다.
+ `gg-component-bucket` - Greengrass 구성 요소가 보관되는 기존 Amazon S3 버킷의 이름입니다.
+ `gg-component-overrides` – Greengrass 구성 요소 재정의 목록입니다.
+ `gg-persist` - 테스트 실행 후 유지할 테스트 요소 목록입니다. 기본 동작은 아무것도 유지하지 않는 것입니다. 허용되는 값은 `aws.resources`, `installed.software` 및 `generated.files`입니다.
+ `gg-runtime` - 테스트가 테스트 리소스와 상호 작용하는 방식에 영향을 미치는 값의 목록입니다. 이러한 값은 `gg.persist` 파라미터를 대체합니다. 기본값이 비어 있는 경우 설치된 Greengrass 런타임을 포함하여 모든 테스트 리소스가 테스트 사례로 관리된다고 가정합니다. 허용되는 값은 `aws.resources`, `installed.software` 및 `generated.files`입니다.
+ `ggc-archive` – 보관된 Greengrass nucleus 구성 요소의 경로입니다.
+ `ggc-install-root` – Greengrass nucleus 구성 요소를 설치하는 디렉터리입니다. 기본값은 test.temp.path 및 테스트 실행 폴더입니다.
+ `ggc-log-level` – 테스트 실행에 대한 Greengrass nucleus 로그 수준을 설정합니다. 기본값은 ‘INFO’입니다.
+ `ggc-tes-rolename` – AWS IoT Greengrass 코어가 AWS 서비스에 액세스하기 위해 맡을 IAM 역할입니다. 지정된 이름의 역할이 없는 경우 역할이 생성되고 기본 액세스 정책이 생성됩니다.
+ `ggc-trusted-plugins` – Greengrass에 추가되어야 하는 신뢰할 수 있는 플러그인의 경로(호스트)를 쉼표로 구분한 목록입니다. DUT 자체의 경로를 제공하려면 경로에 'dut:' 접두사를 붙입니다.
+ `ggc-user-name` – Greengrass nucleus의 user:group posixUser 값입니다. 기본값은 로그인한 현재 사용자 이름입니다.
+ `ggc-version` - 실행 중인 Greengrass nucleus 구성 요소의 버전을 재정의합니다. 기본값은 ggc.archive에 있는 값입니다.
+ `log-level` – 테스트 실행의 로그 수준입니다. 기본값은 ‘INFO’입니다.
+ `parallel-config` - 배치 인덱스 및 배치 수 세트입니다(JSON 문자열). 배치 인덱스의 기본값은 0이고 배치 수는 1입니다.
+ `proxy-url` - 이 URL을 통해 트래픽을 라우팅하도록 모든 테스트를 구성합니다.
+ `tags` – 특성 태그만 실행합니다. '&' 문자와 교차할 수 있습니다.
+ `test-id-prefix` - AWS 리소스 이름 및 태그를 포함하여 모든 테스트별 리소스에 적용되는 일반 접두사입니다. 기본값은 ‘gg’ 접두사입니다.
+ `test-log-path` - 전체 테스트 실행의 결과를 포함하는 디렉터리입니다. 기본값은 ‘testResults’입니다.
+ `test-results-json` - 결과로 나오는 Cucumber JSON 보고서가 디스크에 기록되는지 여부를 결정하는 플래그입니다. 기본값은 true입니다.
+ `test-results-log` - 콘솔 출력이 디스크에 기록되는지 여부를 결정하는 플래그입니다. 기본값은 false입니다.
+ `test-results-xml` - 결과로 나오는 JUnit XML 보고서가 디스크에 기록되는지 여부를 결정하는 플래그입니다. 기본값은 true입니다.
+ `test-temp-path` - 로컬 테스트 아티팩트를 생성하는 디렉터리입니다. 기본적으로 gg 테스트 접두사가 붙은 무작위 임시 디렉터리로 설정됩니다.
+ `timeout-multiplier` - 모든 테스트 제한 시간에 제공되는 승수입니다. 기본값은 1.0.

# 자습서: Greengrass 테스트 프레임워크 및 Greengrass 개발 키트를 사용하여 엔드 투 엔드 테스트 실행
<a name="run-e2e-tests-tutorial"></a>

AWS IoT Greengrass 테스트 프레임워크(GTF) 및 Greengrass 개발 키트(GDK)는 개발자에게 end-to-end 테스트를 실행할 수 있는 방법을 제공합니다. 이 자습서를 완료하여 구성 요소로 GDK 프로젝트를 초기화하고, 엔드 투 엔드 테스트 모듈로 GDK 프로젝트를 초기화하고, 사용자 지정 테스트 사례를 빌드할 수 있습니다. 사용자 지정 테스트 사례를 빌드하면 테스트를 실행할 수 있습니다.

이 자습서에서는 다음을 수행합니다.

1. 구성 요소로 GDK 프로젝트를 초기화합니다.

1. 엔드 투 엔드 테스트 모듈로 GDK 프로젝트를 초기화합니다.

1. 사용자 지정 테스트 사례를 빌드합니다.

1. 새 테스트 사례에 태그를 추가합니다.

1. 테스트 JAR을 빌드합니다.

1.  테스트를 실행합니다.

**Topics**
+ [사전 조건](#run-e2e-tests-tutorial-prerequisites)
+ [1단계: 구성 요소로 GDK 프로젝트 초기화](#init-gdk-with-component)
+ [2단계: 엔드 투 엔드 테스트 모듈로 GDK 프로젝트 초기화](#init-gdk-with-e2e-test)
+ [3단계: 사용자 지정 테스트 사례 빌드](#run-e2e-tests-tutorial-instructions)
+ [4단계: 새 테스트 사례에 태그 추가](#add-tag-to-test-case)
+ [5단계: 테스트 JAR 빌드](#build-test-jar)
+ [6단계: 테스트 실행](#run-test-gtf)
+ [예: 사용자 지정 테스트 사례 빌드](#build-test-case-example)

## 사전 조건
<a name="run-e2e-tests-tutorial-prerequisites"></a>

이 자습서를 완료하려면 다음이 필요합니다.
+ GDK 버전 1.3.0 이상
+ Java
+ Maven
+ Git

## 1단계: 구성 요소로 GDK 프로젝트 초기화
<a name="init-gdk-with-component"></a>
+ GDK 프로젝트로 빈 폴더를 초기화합니다. 다음 명령을 실행하여 Python에서 구현된 `HelloWorld` 구성 요소를 다운로드합니다.

  ```
  gdk component init -t HelloWorld -l python -n HelloWorld
  ```

  이 명령은 현재 디렉터리에 `HelloWorld`라는 이름의 디렉터리를 생성합니다.

## 2단계: 엔드 투 엔드 테스트 모듈로 GDK 프로젝트 초기화
<a name="init-gdk-with-e2e-test"></a>
+ GDK를 사용하면 기능 및 단계 구현으로 구성된 테스트 모듈 템플릿을 다운로드할 수 있습니다. 다음 명령을 실행하여 `HelloWorld` 디렉터리를 열고 테스트 모듈을 사용하여 기존 GDK 프로젝트를 초기화합니다.

  ```
  cd HelloWorld
  gdk test-e2e init
  ```

  이 명령은 `HelloWorld` 디렉터리 내에 `gg-e2e-tests`라는 이름의 디렉터리를 생성합니다. 이 테스트 디렉터리는 Greengrass 테스트 독립 실행형 JAR에 종속된 [Maven](https://maven.apache.org/) 프로젝트입니다.

## 3단계: 사용자 지정 테스트 사례 빌드
<a name="run-e2e-tests-tutorial-instructions"></a>

사용자 지정 테스트 사례 작성은 크게 테스트 시나리오가 포함된 기능 파일을 생성하고 단계 정의를 구현하는 두 단계로 구성됩니다. 사용자 지정 테스트 사례를 빌드하는 예제는 [예: 사용자 지정 테스트 사례 빌드](#build-test-case-example) 섹션을 참조하세요. 다음 단계에 따라 사용자 지정 테스트 사례를 빌드합니다.

1. 테스트 시나리오를 사용하여 기능 파일 생성

   기능은 일반적으로 테스트 중인 소프트웨어의 특정 기능을 설명합니다. Cucumber에서 각 기능은 제목, 자세한 설명, 시나리오라고 하는 특정 사례의 하나 이상의 예제를 포함하는 개별 기능 파일로 지정됩니다. 각 시나리오는 제목, 자세한 설명, 상호 작용, 예상 결과를 정의하는 일련의 단계로 구성됩니다. 시나리오는 “given”, “when”, “then” 키워드를 사용하여 구조화된 형식으로 작성됩니다.

1. 단계 정의 구현

   단계 정의는 일반적인 언어로 작성된 [Gherkin 단계](https://cucumber.io/docs/gherkin/reference/#steps)를 프로그래밍 코드에 연결합니다. Cucumber가 시나리오에서 Gherkin 단계를 식별하면 실행할 일치하는 단계 정의를 찾습니다.

## 4단계: 새 테스트 사례에 태그 추가
<a name="add-tag-to-test-case"></a>
+ 기능 및 시나리오에 태그를 할당하여 테스트 프로세스를 구성할 수 있습니다. 태그를 사용하여 시나리오의 하위 세트를 분류하며 실행할 후크를 조건부로 선택할 수도 있습니다. 특성과 시나리오에는 공백으로 구분된 여러 태그가 있을 수 있습니다.

  이 예제에서는 `HelloWorld` 구성 요소를 사용합니다.

  기능 파일에서 `@Sample` 태그 옆에 `@HelloWorld`라는 이름의 새 태그를 추가합니다.

  ```
  @Sample @HelloWorld
  Scenario: As a developer, I can create a component and deploy it on my device
  ....
  ```

## 5단계: 테스트 JAR 빌드
<a name="build-test-jar"></a>

1. 구성 요소를 빌드합니다. 테스트 모듈을 빌드하기 전에 구성 요소를 빌드해야 합니다.

   ```
   gdk component build
   ```

1. 다음 명령을 사용하여 테스트 모듈을 빌드합니다. 이 명령은 `greengrass-build` 폴더에 테스트 JAR을 빌드합니다.

   ```
   gdk test-e2e build
   ```

## 6단계: 테스트 실행
<a name="run-test-gtf"></a>

사용자 지정 테스트 사례를 실행하면 GTF는 테스트 중에 생성된 리소스를 관리하면서 테스트 수명 주기를 자동화합니다. 먼저 테스트 대상 디바이스(DUT)를 AWS IoT 사물로 프로비저닝하고 Greengrass 코어 소프트웨어를 설치합니다. 그러면 해당 경로에 지정된 레시피를 사용하여 `HelloWorld`라는 새 구성 요소가 생성됩니다. 그런 다음에 `HelloWorld` 구성 요소가 Greengrass 사물 배포를 통해 코어 디바이스에 배포됩니다. 그러면 배포되었는지 확인됩니다. 배포되면 3분 이내에 배포 상태가 `COMPLETED`로 변경됩니다.

1. 프로젝트 디렉터리의 `gdk-config.json` 파일로 이동하여 `HelloWorld` 태그로 테스트를 대상으로 지정합니다. 다음 명령을 사용하여 `test-e2e` 키를 업데이트합니다.

   ```
     "test-e2e":{
       "gtf_options" : { 
            "tags":"HelloWorld"
        }
     }
   ```

1. 테스트를 실행하기 전에 호스트 디바이스에 AWS 자격 증명을 제공해야 합니다. GTF는 이러한 자격 증명을 사용하여 테스트 프로세스 중에 AWS 리소스를 관리합니다. 테스트에 포함된 필수 작업을 자동화할 수 있는 권한이 제공한 역할에 있는지 확인합니다.

   다음 명령을 실행하여 AWS 자격 증명을 제공합니다.

   1. 

------
#### [ Linux or Unix ]

     ```
     export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
     export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
     ```

------
#### [ Windows Command Prompt (CMD) ]

     ```
     set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
     set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
     ```

------
#### [ PowerShell ]

     ```
     $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
     $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
     ```

------

1. 다음 명령을 사용하여 테스트를 실행합니다.

   ```
   gdk test-e2e run
   ```

   이 명령은 `greengrass-build` 폴더에 최신 버전의 Greengrass nucleus를 다운로드하고 이를 사용하여 테스트를 실행합니다. 또한 이 명령에서는 `HelloWorld` 태그가 있는 시나리오만 대상이 되고 해당 시나리오에 대한 보고서가 생성됩니다. 이 테스트 중에 생성된 AWS 리소스는 테스트가 끝날 때 삭제됩니다.

## 예: 사용자 지정 테스트 사례 빌드
<a name="build-test-case-example"></a>

**Example**  
GDK 프로젝트에서 다운로드한 테스트 모듈은 샘플 기능과 단계 구현 파일로 구성되어 있습니다.  
다음 예제에서는 Greengrass 소프트웨어의 사물 배포 기능을 테스트하기 위한 기능 파일을 생성합니다. Greengrass AWS 클라우드를 통해 구성 요소를 배포하는 시나리오를 사용하여 이 특성의 기능을 부분적으로 테스트합니다. 이는 해당 사용 사례의 상호 작용과 예상 결과를 이해하는 데 도움이 되는 일련의 단계입니다.  <a name="build-test-case-example-steps"></a>

1. 

**기능 파일 생성**

   현재 디렉터리의 `gg-e2e-tests/src/main/resources/greengrass/features` 폴더로 이동합니다. 다음 예제처럼 보이는 `component.feature` 샘플을 찾을 수 있습니다.

   이 기능 파일에서 Greengrass 소프트웨어의 사물 배포 기능을 테스트할 수 있습니다. Greengrass 클라우드를 통해 구성 요소를 배포하는 시나리오를 사용하여 이 특성의 기능을 부분적으로 테스트할 수 있습니다. 시나리오는 이 사용 사례의 상호 작용과 예상 결과를 이해하는 데 도움이 되는 일련의 단계입니다.

   ```
   Feature: Testing features of Greengrassv2 component
   
   Background:
       Given my device is registered as a Thing
       And my device is running Greengrass
   
   @Sample
   Scenario: As a developer, I can create a component and deploy it on my device
       When I create a Greengrass deployment with components
           HelloWorld | /path/to/recipe/file
       And I deploy the Greengrass deployment configuration
       Then the Greengrass deployment is COMPLETED on the device after 180 seconds
       And I call my custom step
   ```

   GTF에는 `And I call my custom step`이라는 단계를 제외하고 다음 모든 단계의 단계 정의가 포함되어 있습니다.

1. 

**단계 정의 구현**

   GTF 독립 실행형 JAR에는 `And I call my custom step`이라는 한 단계를 제외하고 모든 단계의 단계 정의가 포함되어 있습니다. 이 단계는 테스트 모듈에서 구현할 수 있습니다.

   테스트 파일의 소스 코드로 이동합니다. 다음 명령으로 단계 정의를 사용하여 사용자 지정 단계를 연결할 수 있습니다.

   ```
   @And("I call my custom step")
   public void customStep() {
       System.out.println("My custom step was called ");
   }
   ```

# 자습서: 신뢰도 테스트 제품군의 신뢰도 테스트 사용
<a name="confidence-tests-tutorial"></a>

AWS IoT Greengrass 테스트 프레임워크(GTF) 및 Greengrass 개발 키트(GDK)는 개발자에게 end-to-end 테스트를 실행할 수 있는 방법을 제공합니다. 이 자습서를 완료하면 구성 요소로 GDK 프로젝트를 초기화하고, 엔드 투 엔드 테스트 모듈로 GDK 프로젝트를 초기화하고, 신뢰도 테스트 제품군의 신뢰도 테스트를 사용할 수 있습니다. 사용자 지정 테스트 사례를 빌드하면 테스트를 실행할 수 있습니다.

신뢰도 테스트는 기본 구성 요소 동작이 검증되는 Greengrass에서 제공되는 일반 테스트입니다. 이러한 테스트는 더 구체적인 구성 요소 요구 사항에 알맞게 수정하거나 확장할 수 있습니다.

이 자습서에서는 HelloWorld 구성 요소를 사용하겠습니다. 다른 구성 요소를 사용한다면 해당 구성 요소로 HelloWorld 구성 요소를 바꿉니다.

이 자습서에서는 다음을 수행합니다.

1. 구성 요소로 GDK 프로젝트를 초기화합니다.

1. 엔드 투 엔드 테스트 모듈로 GDK 프로젝트를 초기화합니다.

1. 신뢰도 테스트 제품군의 테스트를 사용합니다.

1. 새 테스트 사례에 태그를 추가합니다.

1. 테스트 JAR을 빌드합니다.

1.  테스트를 실행합니다.

**Topics**
+ [사전 조건](#confidence-tests-tutorial-prerequisites)
+ [1단계: 구성 요소로 GDK 프로젝트 초기화](#init-gdk-with-component)
+ [2단계: 엔드 투 엔드 테스트 모듈로 GDK 프로젝트 초기화](#init-gdk-with-e2e-test)
+ [3단계: 신뢰도 테스트 제품군의 테스트를 사용합니다.](#confidence-tests-tutorial-instructions)
+ [4단계: 새 테스트 사례에 태그 추가](#add-tag-to-test-case)
+ [5단계: 테스트 JAR 빌드](#build-test-jar)
+ [6단계: 테스트 실행](#run-test-gtf)
+ [예제: 신뢰도 테스트 사용](#build-confidence-test-case-example)

## 사전 조건
<a name="confidence-tests-tutorial-prerequisites"></a>

이 자습서를 완료하려면 다음이 필요합니다.
+ GDK 버전 1.6.0 이상
+ Java
+ Maven
+ Git

## 1단계: 구성 요소로 GDK 프로젝트 초기화
<a name="init-gdk-with-component"></a>
+ GDK 프로젝트로 빈 폴더를 초기화합니다. 다음 명령을 실행하여 Python에서 구현된 `HelloWorld` 구성 요소를 다운로드합니다.

  ```
  gdk component init -t HelloWorld -l python -n HelloWorld
  ```

  이 명령은 현재 디렉터리에 `HelloWorld`라는 이름의 디렉터리를 생성합니다.

## 2단계: 엔드 투 엔드 테스트 모듈로 GDK 프로젝트 초기화
<a name="init-gdk-with-e2e-test"></a>
+ GDK를 사용하면 기능 및 단계 구현으로 구성된 테스트 모듈 템플릿을 다운로드할 수 있습니다. 다음 명령을 실행하여 `HelloWorld` 디렉터리를 열고 테스트 모듈을 사용하여 기존 GDK 프로젝트를 초기화합니다.

  ```
  cd HelloWorld
  gdk test-e2e init
  ```

  이 명령은 `HelloWorld` 디렉터리 내에 `gg-e2e-tests`라는 이름의 디렉터리를 생성합니다. 이 테스트 디렉터리는 Greengrass 테스트 독립 실행형 JAR에 종속된 [Maven](https://maven.apache.org/) 프로젝트입니다.

## 3단계: 신뢰도 테스트 제품군의 테스트를 사용합니다.
<a name="confidence-tests-tutorial-instructions"></a>

신뢰도 테스트 사례 작성은 제공된 특성 파일 사용과 시나리오 수정(필요한 경우)으로 구성됩니다. 이러한 신뢰도 테스트 사용 예제는 [예: 사용자 지정 테스트 사례 빌드](run-e2e-tests-tutorial.md#build-test-case-example) 섹션을 참조하세요. 다음 단계를 사용하여 신뢰도 테스트를 사용합니다.
+ 제공된 특성 파일을 사용합니다.

  현재 디렉터리에서 `gg-e2e-tests/src/main/resources/greengrass/features` 폴더로 이동합니다. 신뢰도 테스트를 사용할 샘플 `confidenceTest.feature` 파일을 엽니다.

## 4단계: 새 테스트 사례에 태그 추가
<a name="add-tag-to-test-case"></a>
+ 기능 및 시나리오에 태그를 할당하여 테스트 프로세스를 구성할 수 있습니다. 태그를 사용하여 시나리오의 하위 세트를 분류하며 실행할 후크를 조건부로 선택할 수도 있습니다. 특성과 시나리오에는 공백으로 구분된 여러 태그가 있을 수 있습니다.

  이 예제에서는 `HelloWorld` 구성 요소를 사용합니다.

  각 시나리오에는 `@ConfidenceTest`라는 태그가 지정됩니다. 테스트 제품군의 하위 세트만 실행하려면 태그를 변경하거나 추가합니다. 각 테스트 시나리오는 각 신뢰도 테스트의 상단에 설명되어 있습니다. 시나리오는 각 테스트 사례의 상호 작용 및 예상 결과를 이해하는 데 도움이 되는 일련의 단계입니다. 원하는 단계를 추가하거나 기존 단계를 수정하여 이러한 테스트를 확장할 수 있습니다.

  ```
  @ConfidenceTest
  Scenario: As a Developer, I can deploy GDK_COMPONENT_NAME to my device and see it is working as expected
  ....
  ```

## 5단계: 테스트 JAR 빌드
<a name="build-test-jar"></a>

1. 구성 요소를 빌드합니다. 테스트 모듈을 빌드하기 전에 구성 요소를 빌드해야 합니다.

   ```
   gdk component build
   ```

1. 다음 명령을 사용하여 테스트 모듈을 빌드합니다. 이 명령은 `greengrass-build` 폴더에 테스트 JAR을 빌드합니다.

   ```
   gdk test-e2e build
   ```

## 6단계: 테스트 실행
<a name="run-test-gtf"></a>

신뢰도 테스트를 실행하면 GTF에서는 테스트의 수명 주기가 테스트 동안 생성된 리소스 관리와 함께 자동화됩니다. 먼저 테스트 대상 디바이스(DUT)를 AWS IoT 사물로 프로비저닝하고 Greengrass 코어 소프트웨어를 설치합니다. 그러면 해당 경로에 지정된 레시피를 사용하여 `HelloWorld`라는 새 구성 요소가 생성됩니다. 그런 다음에 `HelloWorld` 구성 요소가 Greengrass 사물 배포를 통해 코어 디바이스에 배포됩니다. 그러면 배포되었는지 확인됩니다. 배포되면 3분 이내에 배포 상태가 `COMPLETED`로 변경됩니다.

1. 프로젝트 디렉터리에서 `ConfidenceTest` 태그 또는 4단계에서 지정한 태그가 있는 테스트 대상인 `gdk-config.json` 파일로 이동합니다. 다음 명령을 사용하여 `test-e2e` 키를 업데이트합니다.

   ```
     "test-e2e":{
       "gtf_options" : { 
            "tags":"ConfidenceTest"
        }
     }
   ```

1. 테스트를 실행하기 전에 호스트 디바이스에 AWS 자격 증명을 제공해야 합니다. GTF는 이러한 자격 증명을 사용하여 테스트 프로세스 중에 AWS 리소스를 관리합니다. 테스트에 포함된 필수 작업을 자동화할 수 있는 권한이 제공한 역할에 있는지 확인합니다.

   다음 명령을 실행하여 AWS 자격 증명을 제공합니다.

   1. 

------
#### [ Linux or Unix ]

     ```
     export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
     export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
     ```

------
#### [ Windows Command Prompt (CMD) ]

     ```
     set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
     set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
     ```

------
#### [ PowerShell ]

     ```
     $env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
     $env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
     ```

------

1. 다음 명령을 사용하여 테스트를 실행합니다.

   ```
   gdk test-e2e run
   ```

   이 명령은 `greengrass-build` 폴더에 최신 버전의 Greengrass nucleus를 다운로드하고 이를 사용하여 테스트를 실행합니다. 또한 이 명령에서는 `ConfidenceTest` 태그가 있는 시나리오만 대상이 되고 해당 시나리오에 대한 보고서가 생성됩니다. 이 테스트 중에 생성된 AWS 리소스는 테스트가 끝날 때 삭제됩니다.

## 예제: 신뢰도 테스트 사용
<a name="build-confidence-test-case-example"></a>

**Example**  
GDK 프로젝트에서 다운로드된 테스트 모듈은 제공된 특성 파일로 구성됩니다.  
다음 예제에서는 Greengrass 소프트웨어의 사물 배포 특성 테스트에 특성 파일을 사용합니다. Greengrass AWS 클라우드를 통해 구성 요소를 배포하는 시나리오를 사용하여 이 특성의 기능을 부분적으로 테스트합니다. 이는 해당 사용 사례의 상호 작용과 예상 결과를 이해하는 데 도움이 되는 일련의 단계입니다.  <a name="build-confidence-test-case-example-steps"></a>
+ 

**제공된 특성 파일을 사용합니다.**

  현재 디렉터리에서 `gg-e2e-tests/src/main/resources/greengrass/features` 폴더로 이동합니다. 다음 예제처럼 보이는 `confidenceTest.feature` 샘플을 찾을 수 있습니다.

  ```
  Feature: Confidence Test Suite
  
  Background:
      Given my device is registered as a Thing
      And my device is running Greengrass
  
  @ConfidenceTest
  Scenario: As a Developer, I can deploy GDK_COMPONENT_NAME to my device and see it is working as expected
      When I create a Greengrass deployment with components
        | GDK_COMPONENT_NAME | GDK_COMPONENT_RECIPE_FILE |
        | aws.greengrass.Cli | LATEST                    |
      And I deploy the Greengrass deployment configuration
      Then the Greengrass deployment is COMPLETED on the device after 180 seconds
      # Update component state accordingly. Possible states: {RUNNING, FINISHED, BROKEN, STOPPING}
      And I verify the GDK_COMPONENT_NAME component is RUNNING using the greengrass-cli
  ```

  각 테스트 시나리오는 각 신뢰도 테스트의 상단에 설명되어 있습니다. 시나리오는 각 테스트 사례의 상호 작용 및 예상 결과를 이해하는 데 도움이 되는 일련의 단계입니다. 원하는 단계를 추가하거나 기존 단계를 수정하여 이러한 테스트를 확장할 수 있습니다. 각 시나리오에는 이러한 조정을 수행하는 데 도움이 되는 설명이 포함되어 있습니다.