

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 教學課程：使用 Greengrass 測試架構和 Greengrass 開發套件執行end-to-end測試
<a name="run-e2e-tests-tutorial"></a>

AWS IoT Greengrass 測試架構 (GTF) 和 Greengrass 開發套件 (GDK) 為開發人員提供執行end-to-end測試的方法。您可以完成此教學課程，以使用元件初始化 GDK 專案、使用end-to-end測試模組初始化 GDK 專案，以及建置自訂測試案例。建置自訂測試案例之後，您就可以執行測試。

在此教學課程中，您將執行下列操作：

1. 使用元件初始化 GDK 專案。

1. 使用end-to-end測試模組初始化 GDK 專案。

1. 建置自訂測試案例。

1. 將標籤新增至新的測試案例。

1. 建置測試 JAR。

1. 執行 測試。

**Topics**
+ [先決條件](#run-e2e-tests-tutorial-prerequisites)
+ [步驟 1：使用元件初始化 GDK 專案](#init-gdk-with-component)
+ [步驟 2：使用end-to-end測試模組初始化 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：使用end-to-end測試模組初始化 GDK 專案
<a name="init-gdk-with-e2e-test"></a>
+ GDK 可讓您下載由功能和步驟實作組成的測試模組範本。執行下列命令以開啟 `HelloWorld` 目錄，並使用測試模組初始化現有的 GDK 專案。

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

  此命令會在 目錄中建立新的名為 `gg-e2e-tests`的`HelloWorld`目錄。此測試目錄是 [Maven](https://maven.apache.org/) 專案，其相依於 Greengrass 測試獨立 JAR。

## 步驟 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`元件。

  在特徵檔案中，在標籤`@HelloWorld`旁新增名為 的新`@Sample`標籤。

  ```
  @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 物件部署部署到核心裝置上。如果部署成功，則會對其進行驗證。如果部署成功，部署狀態會在 `COMPLETED` 3 分鐘內變更為 。

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 核，並使用它執行測試。此命令也會僅以具有 `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 ");
   }
   ```