本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:使用 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
此命令将在该目录
gg-e2e-tests
中创建一个名为的新HelloWorld
目录。这个测试目录是一个 Maven项目,它依赖于 Greengrass 测试独立 JAR。
第 3 步:构建自定义测试用例
编写自定义测试用例大致包括两个步骤:创建包含测试场景的功能文件和实现步骤定义。有关构建自定义测试用例的示例,请参阅示例:生成自定义测试用例。使用以下步骤来构建您的自定义测试用例:
-
使用测试场景创建要素文件
一项功能通常描述正在测试的软件的特定功能。在 Cucumber 中,每个功能都指定为一个单独的特征文件,其中包含标题、详细描述以及一个或多个称为场景的特定案例示例。每个场景都由标题、详细描述和一系列定义互动和预期结果的步骤组成。场景以结构化格式编写,使用 “给定”、“何时” 和 “然后” 关键字。
-
实现步骤定义
步骤定义用通俗易懂的语言将 Gherkin 步骤
链接到编程代码。当 Cucumber 在场景中识别 Gherkin 步骤时,它将寻找要运行的匹配步骤定义。
第 4 步:为新测试用例添加标签
-
您可以为功能和场景分配标签以组织测试过程。您可以使用标签对场景的子集进行分类,也可以有条件地选择要运行的挂钩。功能和场景可以有多个标签,用空格隔开。
在这个例子中,我们使用的是组
HelloWorld
件。在功能文件中,在标签
@HelloWorld
旁边添加一个名为的新@Sample
标签。@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
使用该路径中指定的配方创建一个名为的新组件。然后,该HelloWorld
组件通过 Greengrass 事物部署部署到核心设备上。然后将对其进行验证,以确定部署是否成功。如果部署成功,部署状态将COMPLETED
在 3 分钟内更改为。
-
转到项目目录中的
gdk-config.json
文件,将带有HelloWorld
标签的测试作为目标。使用以下命令更新test-e2e
密钥。"test-e2e":{ "gtf_options" : { "tags":"HelloWorld" } }
-
在运行测试之前,必须向主机设备提供AWS凭据。在测试过程中,GTF 使用这些凭证来管理AWS资源。确保您提供的角色有权自动执行测试中包含的必要操作。
运行以下命令以提供AWS凭据。
-
-
使用以下命令运行测试。
gdk test-e2e run
此命令在文件夹中下载最新版本的 Greengrass nucleus
greengrass-build
并使用它运行测试。此命令还仅针对带有HelloWorld
标签的场景,并为这些场景生成报告。您将看到在此测试期间创建的AWS资源在测试结束时被丢弃。
示例:生成自定义测试用例
GDK 项目中下载的测试模块由一个示例功能和一个步骤实现文件组成。
在以下示例中,我们创建了一个功能文件,用于测试 Greengrass 软件的事物部署功能。我们使用通过 Greengr AWS Cloud ass 部署组件的场景部分测试了此功能的功能。这是一系列步骤,可帮助我们了解此用例的互动和预期结果。
-
创建要素文件
导航到当前目录中的
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 "); }