教程:使用 Greengrass end-to-end 测试框架和 Greengrass 开发套件运行测试 - AWS IoT Greengrass

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

教程:使用 Greengrass end-to-end 测试框架和 Greengrass 开发套件运行测试

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

在本教程中,您将执行以下操作:

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

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

  3. 构建自定义测试用例。

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

  5. 生成测试JAR。

  6. 运行测试。

先决条件

要完成本教程,您需要:

  • GDK版本 1.3.0 或更高版本

  • Java

  • Maven

  • Git

步骤 1:使用组件初始化GDK项目

  • 用GDK项目初始化一个空文件夹。通过运行以下命令下载 Python 中实现的 HelloWorld 组件。

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

    此命令将在当前目录中创建一个名为 HelloWorld 的新目录。

步骤 2:使用 end-to-end测试模块初始化GDK项目

  • GDK允许您下载由功能和步骤实现组成的测试模块模板。运行以下命令打开HelloWorld目录并使用测试模块初始化现有GDK项目。

    cd HelloWorld gdk test-e2e init

    此命令将在 HelloWorld 目录中创建一个名为 gg-e2e-tests 的新目录。这个测试目录是一个 Maven 项目,它依赖于 Greengrass 独立测试。JAR

步骤 3:构建自定义测试用例

编写自定义测试用例大致包括两个步骤:创建包含测试场景的功能文件和实现步骤定义。有关构建自定义测试用例的示例,请参阅 示例:构建自定义测试用例。使用以下步骤构建自定义测试用例:

  1. 根据测试场景创建功能文件

    功能通常描述正在测试的软件的特定功能。在 Cucumber 中,每个功能都指定为一个单独的功能文件,其中包含标题、详细描述以及一个或多个称为场景的特定案例示例。每个场景都由标题、详细描述以及一系列定义交互和预期结果的步骤组成。场景以结构化格式编写,使用“given”、“when”和“then”关键字。

  2. 实现步骤定义

    步骤定义以简明的语言将 Gherkin 步骤链接到编程代码。当 Cucumber 在场景中识别 Gherkin 步骤时,它将寻找要运行的匹配步骤定义。

步骤 4:向新测试用例中添加标签

  • 您可以为功能和场景分配标签以组织测试过程。您可以使用标签对场景的子集进行分类,也可以有条件地选择要运行的挂钩。功能和场景可以有多个标签,以空格分隔。

    在本例中,我们使用的是 HelloWorld 组件。

    在功能文件中,在 @Sample 标签旁边添加一个名为 @HelloWorld 的新标签。

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

第 5 步:构建测试 JAR

  1. 生成组件。在生成测试模块之前,必须先生成组件。

    gdk component build
  2. 使用以下命令生成该测试模块。此命令将在该greengrass-build文件夹JAR中生成测试。

    gdk test-e2e build

步骤 6:运行测试

当您运行自定义测试用例时,GTF会自动执行测试的生命周期并管理在测试期间创建的资源。它首先将正在测试的设备 (DUT) 配置为一个 AWS IoT 东西,然后在上面安装 Greengrass 核心软件。然后使用该路径中指定的配方创建一个名为 HelloWorld 的新组件。然后通过 Greengrass 事物部署将该 HelloWorld 组件部署至核心设备上。然后验证部署是否成功。如果部署成功,部署状态将在 3 分钟内更改为 COMPLETED

  1. 转至项目目录中的 gdk-config.json 文件,使用 HelloWorld 标签来定位测试。使用以下命令更新 test-e2e 密钥:

    "test-e2e":{ "gtf_options" : { "tags":"HelloWorld" } }
  2. 在运行测试之前,必须向主机设备提供 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"
  3. 使用以下命令运行测试。

    gdk test-e2e run

    该命令下载 greengrass-build 文件夹中最新版本的 Greengrass Nucleus,并使用它运行测试。该命令也仅针对带有 HelloWorld 标签的场景,并为这些场景生成报告。您将看到在此测试期间创建的 AWS 资源在测试结束时被丢弃。

示例:构建自定义测试用例

GDK项目中下载的测试模块由一个示例功能和一个步骤实现文件组成。

在以下示例中,我们创建一个功能文件来测试 Greengrass 软件的事物部署功能。我们使用一个通过 Greengrass AWS Cloud执行组件部署的场景对该功能进行了部分测试。这一系列步骤有助于我们了解每个测试用例的交互作用和预期结果。

  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

  2. 实现步骤定义

    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 "); }