本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:使用 Greengrass end-to-end 测试框架和 Greengrass 开发套件运行测试
AWS IoT Greengrass 测试框架 (GTF) 和 Greengrass 开发套件 GDK () 为开发人员提供了运行测试的方法。 end-to-end完成本教程后,您可以使用组件初始化GDK项目、使用 end-to-end测试模块初始化GDK项目以及生成自定义测试用例。生成自定义测试用例后,就可以运行测试了。
在本教程中,您将执行以下操作:
-
使用组件初始化GDK项目。
-
使用 end-to-end测试模块初始化GDK项目。
-
构建自定义测试用例。
-
向新测试用例中添加标签。
-
生成测试JAR。
-
运行测试。
主题
先决条件
要完成本教程,您需要:
-
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:构建自定义测试用例
编写自定义测试用例大致包括两个步骤:创建包含测试场景的功能文件和实现步骤定义。有关构建自定义测试用例的示例,请参阅 示例:构建自定义测试用例。使用以下步骤构建自定义测试用例:
-
根据测试场景创建功能文件
功能通常描述正在测试的软件的特定功能。在 Cucumber 中,每个功能都指定为一个单独的功能文件,其中包含标题、详细描述以及一个或多个称为场景的特定案例示例。每个场景都由标题、详细描述以及一系列定义交互和预期结果的步骤组成。场景以结构化格式编写,使用“given”、“when”和“then”关键字。
-
实现步骤定义
步骤定义以简明的语言将 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
-
生成组件。在生成测试模块之前,必须先生成组件。
gdk component build
-
使用以下命令生成该测试模块。此命令将在该
greengrass-build
文件夹JAR中生成测试。gdk test-e2e build
步骤 6:运行测试
当您运行自定义测试用例时,GTF会自动执行测试的生命周期并管理在测试期间创建的资源。它首先将正在测试的设备 (DUT) 配置为一个 AWS IoT 东西,然后在上面安装 Greengrass 核心软件。然后使用该路径中指定的配方创建一个名为 HelloWorld
的新组件。然后通过 Greengrass 事物部署将该 HelloWorld
组件部署至核心设备上。然后验证部署是否成功。如果部署成功,部署状态将在 3 分钟内更改为 COMPLETED
。
-
转至项目目录中的
gdk-config.json
文件,使用HelloWorld
标签来定位测试。使用以下命令更新test-e2e
密钥:"test-e2e":{ "gtf_options" : { "tags":"HelloWorld" } }
-
在运行测试之前,必须向主机设备提供 AWS 凭据。 GTF在测试过程中使用这些凭证来管理 AWS 资源。确保您提供的角色有权自动执行测试中包含的必要操作。
运行以下命令以提供 AWS 凭据。
-
-
使用以下命令运行测试。
gdk test-e2e run
该命令下载
greengrass-build
文件夹中最新版本的 Greengrass Nucleus,并使用它运行测试。该命令也仅针对带有HelloWorld
标签的场景,并为这些场景生成报告。您将看到在此测试期间创建的 AWS 资源在测试结束时被丢弃。
示例:构建自定义测试用例
GDK项目中下载的测试模块由一个示例功能和一个步骤实现文件组成。
在以下示例中,我们创建一个功能文件来测试 Greengrass 软件的事物部署功能。我们使用一个通过 Greengrass AWS Cloud执行组件部署的场景对该功能进行了部分测试。这一系列步骤有助于我们了解每个测试用例的交互作用和预期结果。
-
创建功能文件
导航至当前目录中的
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
。 -
实现步骤定义
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 "); }