

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

# チュートリアル: Greengrass テストフレームワークと Greengrass 開発キットを使用してエンドツーエンドのテストを実行する
<a name="run-e2e-tests-tutorial"></a>

AWS IoT Greengrass Testing Framework (GTF) と Greengrass Development Kit (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>

カスタムテストケースの作成は、大きく分けて 2 つのステップで構成されます。テストシナリオを持つ機能ファイルを作成することと、もう 1 つはステップ定義を実装することです。カスタムテストケースの作成例については、[例: カスタムテストケースを構築する](#build-test-case-example) を参照してください。以下の手順でカスタムテストケースを構築してください。

1. テストシナリオを持つ機能ファイルを作成する

   機能は通常、テスト対象のソフトウェアの特定の機能を表します。Cucumber では、各機能はタイトル、詳細な説明、シナリオと呼ばれる特定のケースの 1 つまたは複数の例を含む個別の機能ファイルとして指定されます。各シナリオは、タイトル、詳細な説明、相互作用と期待される結果を定義する一連のステップで構成されています。シナリオは、「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 ");
   }
   ```