博客

测试工具简介: Threat Stack 为何使用 ThoughtWorks Gauge

F5 缩略图
F5
2022 年 3 月 16 日更新

Threat Stack 现在是F5 分布式云应用基础设施保护(AIP)。 立即开始与您的团队一起使用分布式云 AIP。

Threat Stack 每天都会运行大量测试,以验证我们的 Threat Stack Cloud Security Platform® 中的一切是否按预期运行。 为了补充软件工程师的单元和集成测试,我们的测试工程团队创建了以下内容作为自动回归测试套件的一部分:

  • 基于浏览器的测试,用 Capybara 编写,验证只有有效用户才能登录我们的仪表板、浏览我们的网站、查看您的 AWS 队列创建的事件轨迹,以及根据这些事件创建和更新规则,这些规则会生成警报,您的安全团队可以进行分类,所有这些都通过我们基于 Web 的用户界面完成: 150 多项测试。
  • API 测试,使用Net/HTTP Ruby gem 与我们的Threat Stack API交互,验证您可以检索过去三十天的审计日志,按严重程度和类型列出单个和警报组,列出 Threat Stack 监控和调查的所有虚拟环境,并查看 HIPAA、ISO 27001、MPAA、PCI 和 SOC 2 的基本合规规则集。 测试还验证了这些预配置和自定义规则生成的警报是否可以通过 Threat Stack API 查看、抑制或关闭: 130 多项测试。

我们如何才能跟踪近三百项验收测试? Threat Stack 的测试工程师使用ThoughtWorks Gauge (一种免费、轻量级、跨平台测试自动化框架)设置他们的测试。 

量规测试主要包括两个部分:

  • 测试规范以通俗易懂的语言写成,是以项目符号形式逐步列出如何进行测试的说明。 该规范应该像手动测试计划一样阅读,清晰简洁,并具有足够的描述以便其他人可以遵循。
  • step_implementation文件夹包含执行测试的代码,将每个步骤包装在代码块中,可以在规范中随时随地重复使用。 

通过让 Gauge 将测试计划与执行测试的代码分离,它使我们的测试更具可读性和可维护性,并允许在我们的测试之间共享测试步骤。

在这篇文章的剩余部分,我们将重点介绍我们喜欢 Gauge 的十个主要功能: 

快照:

  • 网站: Gauge.orgGithub.com/getgauge
  • 发布日期: 2018 年 7 月
  • 支持的语言: Java、C#、Ruby、Javascript、Go、Python
  • 支持的操作系统: Linux、macOS、Windows
  • IDE 插头: Visual Studio、Visual Studio Code、IntelliJ

1. 易于设置

仪表安装非常容易。 转到 Gauge 的安装页面,通过选择您的操作系统、编程语言和 IDE,将显示有关如何安装所有内容的定制说明。 如果您不想从源代码安装,可以使用 HomeBrew 进行 MacOS 安装,使用 APT_GET 进行 Linux 安装,使用 Windows 安装程序进行 Windows 安装。 

下载完所有内容后,可以在命令行中输入gauge install ruby 来安装 Ruby 等编程语言的语言运行器。

2. 包含示例项目

使用新的测试自动化框架,确定哪些文件需要放在哪个文件夹中以及如何设置和启动测试可能会很困难。 

Gauge 通过包含一个示例项目来避免这种混淆,其中包括框架新用户可以修改的一些测试。 假设您有一个特定的词,例如“Gauge”,“Mingle”或“Snap”。 你如何设计测试来计算单词中元音的数量,并断言预期数量和实际数量相匹配? 

示例测试由数据驱动,输入记录在包含两列的数据表中,“单词”和预期的“元音计数”。

安装后,可以立即从命令行使用gauge run spec 运行示例项目。

示例输出,命令行: 

3. 测试与测试实施方式之间的分离

尝试弄清楚在一组自动化测试中实际测试的内容可能会令人沮丧,特别是如果您需要在弄清楚测试的目的、测试执行的步骤或执行每个测试步骤的代码之前检查大量代码块。 

Gauge 通过分离测试计划和测试计划的执行方式来避免这种混淆。 Gauge 在Markdown文件中组织步骤,Markdown 是 Josh Gruber 和 Aaron Swartz 于 2004 年创建的文本格式化语言。 测试步骤以项目符号形式保存在规范文件中,然后可以通过step_implementations执行。 

规格: 规格不仅仅是列出产品某个功能的规格: 它们既可以组织测试代码,也可以设置 HTML 或 XML 报告。 *.spec文件中的每个元素都与 Markdown 中的一个元素相对应。 规范是一个“业务层测试用例”,它也可以作为您的功能文档。 它们是用商业语言编写的。 根据 Gauge 官方文档,“通常,规范或规格描述被测应用的特定功能”。 

每个规范都有一个标题,描述将要执行的各种测试场景,并将相关的测试场景描述为子标题。 查看日志时会包含这些标题和子标题,以查看哪些通过了,哪些失败了,以及在 HTML 报告中。 

步骤定义: 规范中列出的每个步骤都对应一个概念或一个可重复使用的步骤定义,将规范的简单语言与执行的 Java、C#、Javascript、Python 或 Ruby 代码配对。 

通过将测试与执行测试的代码分离,其他测试人员、业务分析师和产品所有者可以通过查看规范文件清楚地了解测试的构建方式,而无需深入研究代码。

4. 规范的格式便于阅读

规范的设置非常易于阅读。 

  • 标题以井号(“#”)为前缀,作者可以描述场景将要做什么。
  • 各个测试场景以双井号(“##”)表示的子标题列出。 
  • 执行测试场景的测试步骤以星号为前缀,以项目符号(“*”)表示。 

需要规范文件的示例吗? 以下是初始化新的 Gauge 项目时安装的演示项目的规格:

# 规范标题
这是一个可执行规范文件。 此文件遵循 markdown 语法。此文件中的每个标题代表一种场景。 每个项目符号表示一个步骤。
* 英语中的元音是“aeiou”。
## 单个单词中的元音计数
* 单词“gauge”有“3”个元音。
## 多个单词中的元音计数
这是本规范中的第二种情况。 这是一个采用表格的步骤。
* 几乎所有单词都有元音
|单词 |元音计数|
|------|-----------|
|Gauge |3 |
|Mingle|2 |
|Snap |1 |
|GoCD |1 |   

本规范中的每个要点对应于 step_implementations 文件夹中列出的一个测试步骤。 

需要另一个例子吗? 假设在specs文件夹中有一个名为login.spec的测试,用于登录某个网站:

# 登录测试
## 验证有效用户可以登录网站
* 登录: 输入用户名:“info@threatstack.com”
* 登录: 输入密码: “1234”
* 登录: 选择[登录]

放置在step_implementations文件夹中的每个步骤都可以被测试自动定位并执行。

login_spec.rb步骤'登录: 输入用户名:' do | username | fill_in(EMAIL_TEXTBOX, with: username) end

您是否发现自己正在一遍又一遍地执行相同的一系列步骤? 您可以将这三个登录步骤放在概念文件的Login.cpt下。 

login.cpt # 以 * LOGIN 身份登录: 输入用户名: * 登录: 输入密码: * 登录: 选择[登录]

如果其他测试有登录组件,则无需复制粘贴所有三个步骤,只需在测试中插入一行即可: 以“info@threatstack.com”和“1234”身份登录

5. 良好的文档和支持

学习新的自动化框架可能会令人困惑。 有时阅读文档是不够的。 您是否有任何问题无法通过阅读 Gauge.org 的详尽文档得到解答? 开发人员对StackOverflowGoogle GroupsGitter Chat 的响应非常积极。

6. 根据测试规范创建的 HTML 报告

正如我们所介绍的,测试规范是用Markdown编写的。 规范中列出的这些测试可以作为被测软件产品如何运行的真实文档。 因为它们是用 Markdown 列出的,所以可以使用这些规范来创建易于阅读的HTML 报告

我们来看看演示项目的 HTML 报告,计算一个单词中元音的数量:

我们可以看到 HTML 报告包含:

  • 测试运行的时间和日期以及执行时间
  • 运行了多少规范和场景
  • 有多少规范和场景通过和失败了
  • 运行了哪些步骤,通过的步骤以绿色表示,失败的步骤以红色表示。 报告中包含错误消息。 

7. 仪表供应执行挂钩

任何好的自动化框架都包括设置测试先决条件的方法和在测试完成后运行的拆卸方法。 

一个例子是专注于浏览器测试的自动化套件,它具有在测试套件启动时初始化浏览器的设置方法,以及在测试完成时关闭浏览器的拆卸方法。 

Gauge 提供执行挂钩,可以在自动化测试套件中的每个套件、规范、场景或步骤之前和之后执行。

通过使用执行代码,Gauge 删除了每个套件、规范、场景或步骤之前需要执行的重复代码。 

8. 命令行功能

Gauge 在 IDE 和命令行中都具有他们所称的“一流的重构支持”。 例如,对于那些喜欢不断调整测试措辞的人,以便越来越清楚地了解测试实际在做什么,请在命令行中输入以下内容: 

$ gauge --refactor "旧步骤名称" "新步骤名称"

有关 Gauge 命令行工具的更多信息,请参阅manpage.gauge.org 。 

9. 测试可以由数据驱动

可以将测试设置为数据驱动,这样就可以将主题变化的测试输入到测试参数表中以供使用。 

假设您有一系列需要测试的 Web 服务,并触及 API 端点。 给定 web 服务名称、方案和端口,您需要检查 HTTP 响应是否为200 OK 。 

由于每个测试都彼此相似,因此可以将数据格式化为易于阅读的表格。

webservice_测试规范

每行信息都被输入到测试步骤中,并由相应的步骤实现执行,从而避免了作者的重复工作。 

10. 数据可即时存储

有时您需要在测试步骤之间共享数据,并将其保存以供以后使用。 与上述 API 测试一样,一旦您收到了来自端点的响应,您就可以执行测试步骤来确保它采用正确的 JSON 模式的有效格式,或者如果您想确保在运行负面测试时列出了正确的错误消息。 

Gauge 使用三种类型的数据存储: ScenarioStore、SpecStore 和 SuiteStore,将数据保存为场景、规范或整个测试套件的生命周期的键/值对。 

例子: 在步骤实现部分,您可以像这样添加元素 ID:

// 添加值
scenario_store = DataStoreFactory.scenario_datastore;
scenario_store.put("element-id", "455678");
// 获取值
element_id = scene_store.get("element-id");

总结...

正如我们一开始所指出的,当您每天在 Threat Stack 运行与我们一样多的测试时,您需要一个跨平台测试自动化框架,该框架既坚固又灵活,并且具有满足您特定测试需求的功能和能力,同时提供显着的易用性和自动化,以便您可以在合理的时间范围内,以测试人员适当的努力和投入进行彻底的测试。

敬请关注: 在后续的文章中,我们将介绍 Threat Stack 使用的其他一些测试工具,包括 Capybara。

Threat Stack 现在是F5 分布式云应用基础设施保护(AIP)。 立即开始与您的团队一起使用分布式云 AIP。