

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 教程：使用置信度测试套件中的置信度测试
<a name="confidence-tests-tutorial"></a>

Amazon IoT Greengrass 测试框架 (GTF) 和 Greengrass 开发套件 (GDK) 为开发人员提供了运行测试的方法。 end-to-end完成本教程后，您可以使用组件初始化 GDK 项目，使用 end-to-end测试模块初始化 GDK 项目，以及使用置信度测试套件中的置信度测试。生成自定义测试用例后，就可以运行测试了。

置信度测试是 Greengrass 提供的通用测试，用于验证基本组件行为。可以修改或扩展这些测试以适应更具体的组件需求。

在本教程中，我们将使用一个 HelloWorld 组件。如果您使用的是其他组件，请用您的 HelloWorld 组件替换该组件。

在本教程中，您将执行以下操作：

1. 使用组件初始化 GDK 项目。

1. 使用 end-to-end测试模块初始化 GDK 项目。

1. 使用置信度测试套件中的测试。

1. 向新测试用例中添加标签。

1. 生成测试 JAR。

1. 运行测试。

**Topics**
+ [

## 先决条件
](#confidence-tests-tutorial-prerequisites)
+ [

## 步骤 1：使用组件初始化 GDK 项目
](#init-gdk-with-component)
+ [

## 步骤 2：使用 end-to-end测试模块初始化 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：使用 end-to-end测试模块初始化 GDK 项目
<a name="init-gdk-with-e2e-test"></a>
+ GDK 允许您下载由功能和步骤实现组成的测试模块模板。运行以下命令打开 `HelloWorld` 目录并使用测试模块初始化现有的 GDK 项目。

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

  此命令将在 `HelloWorld` 目录中创建一个名为 `gg-e2e-tests` 的新目录。这个测试目录是一个 [Maven](https://maven.apache.org/) 项目，它依赖于 Greengrass 测试独立 JAR。

## 步骤 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) 配置为一个 Amazon IoT 东西，然后在其上安装 Greengrass 核心软件。然后使用该路径中指定的配方创建一个名为 `HelloWorld` 的新组件。然后通过 Greengrass 事物部署将该 `HelloWorld` 组件部署至核心设备上。然后验证部署是否成功。如果部署成功，部署状态将在 3 分钟内更改为 `COMPLETED`。

1. 转至项目目录中的 `gdk-config.json` 文件，使用 `ConfidenceTest` 标签或步骤 4 中指定的任何标签来定位测试。使用以下命令更新 `test-e2e` 密钥：

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

1. 在运行测试之前，必须向主机设备提供 Amazon 凭据。在测试过程中，GTF 使用这些凭证来管理 Amazon 资源。确保您提供的角色有权自动执行测试中包含的必要操作。

   运行以下命令以提供 Amazon 凭据。

   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` 标签的场景，并为这些场景生成报告。您将看到在此测试期间创建的 Amazon 资源在测试结束时被丢弃。

## 示例：使用置信度测试
<a name="build-confidence-test-case-example"></a>

**Example**  
GDK 项目中下载的测试模块由提供的功能文件组成。  
在以下示例中，我们使用功能文件来测试 Greengrass 软件的事物部署功能。我们使用一个通过 Greengrass Amazon Web Services 云执行组件部署的场景对该功能进行了部分测试。这一系列步骤有助于我们了解每个测试用例的交互作用和预期结果。  <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
  ```

  每个测试场景的描述均可见于每个置信度测试顶部。该场景包含一系列步骤，有助于了解每个测试用例的交互作用和预期结果。您可以通过添加自己的步骤或修改现有步骤来扩展这些测试。每个场景都包含可帮助您进行这些调整的注释。