Threat Stack现已更名为F5 Distributed Cloud App Infrastructure Protection(AIP)。立即与团队一起开始使用Distributed Cloud AIP吧。
无论规模大小,所有软件开发项目都能从周密规划和妥善执行的测试中受益。通过测试,可以确保所开发的软件按预期运行,并为客户创造价值。更重要的是,鉴于当前的网络安全形势,妥善执行的测试有助于避免软件在发布时带有可能损害其完整性的错误或漏洞。简而言之,良好的测试既能让客户获得软件的性能价值,也能为其提供基础安全保障。
Threat Stack拥有复杂的全栈开发环境。为确保平台的所有功能领域都能得到高效且有效的测试,测试工程团队需要开展大量规划并做出诸多决策,其中包括选择合适的测试工具,因为适当的工具不仅有助于实现自动化,还能提升测试速度、可重复性、一致性和结果准确性。
本文将介绍我们使用的10款自动化测试工具,并分享一些见解,希望能为您的测试工作提供帮助。
不过,在介绍这些工具之前,我们先了解一下测试工程师在测试平台及其基础设施时重点关注的领域,以便掌握相关背景。
- Threat Stack代理嵌入客户的Amazon Web Services虚拟机群中,以便对其进行跟踪和监控。无论这些虚拟机运行的是Linux发行版(如Ubuntu、Amazon Linux、Red Hat Enterprise Linux、CentOS、CoreOS),还是Windows版本(如Windows Server 2012 R2、2016或2019),均可进行跟踪和监控。
- 我们的客户可能正在使用容器或Kubernetes,因此需要监控其中是否存在安全事件迹象。
- 每个代理都会将数据安全地发送到Threat Stack Cloud Security Platform®,随后由众多微服务中的一个进行分析和处理。
- 事件数据由主机、文件、CloudTrail、威胁情报和自定义规则处理,并按严重程度触发不同级别的警报,帮助客户的DevOps和安全团队分析其系统内发生的情况。
- 所有事件、规则和警报数据不仅必须可通过基于浏览器的应用程序访问,还必须可通过Threat Stack APIs访问。
- 客户可以获取这些数据并将其导出到自己的外部存储中,以便自行分析。
- Threat Stack Application Security Monitoring是Threat Stack Cloud Security Platform的一个组件,以微代理形式运行,可监控应用负载并将信息发送到Threat Stack平台;如果发现安全编码错误,则会向开发人员发出警告。它还会监控应用负载中是否存在跨站脚本攻击等恶意行为。
可以看出,我们的软件涵盖的范围很广,而且必须快速、安全、准确地大规模运行。基于这些要求,下面来了解一下我们使用的部分测试工具。
Threat Stack使用的测试工具
嵌入各自功能团队的软件测试工程师不仅负责测试持续开发的新特性和新功能,还负责添加自动化测试,确保产品的其他部分仍能按预期运行。
为体现组织对这些人员的重视,每位测试工程师还负责推荐其认为合适的自动化方法、工具和语言。下面列出了我们用于协助开展自动化测试的部分工具。请注意,我们实际使用的工具集更为广泛;此处旨在介绍其中一些工具,并提醒您根据具体项目选择最合适的工具。
免责声明:本文提及的资源并未按其认定价值进行排名。我们的评论也不表示任何形式的认可。我们只是希望提供一些信息,帮助您进一步了解测试工具。
1. Capybara
网站:https://teamcapybara.github.io/capybara/
类型:免费,开源
最新版本:3.29.0(2019 年 9 月 2 日)
在执行端到端用户界面测试时,我们将Capybara这一Ruby gem与Selenium配合使用,以便与基于浏览器的UI自动化测试进行交互。Capybara包含一些内置方法,用于模拟用户如何visit页面、在文本框中fill_in内容、click_button或select_dropdown。
软件测试人员最头疼的问题之一,就是网页元素加载时间过长,导致测试莫名失败。Capybara提供的每种方法都自动内置了等待机制。
Capybara通过模拟客户使用产品的方式来测试用户体验问题,包括登录应用程序、浏览网站、查看测试系统触发的事件、创建新规则以规定哪些事件应触发警报、深入查看仪表板中的警报信息,以及更新各项设置。
2. ThoughtWorks 的 Gauge
类型:免费,开源
支持:GetGauge Google 群组,Gitter 聊天
最新版本:1.0.7(2019 年 8 月 29 日)
Gauge是由ThoughtWorks Studio India创建的测试自动化框架,我们使用它来设置UI和API验收测试。虽然我们将Gauge与Ruby搭配使用,但它也兼容Java、C#、JavaScript和Python。Gauge与BDD框架Cucumber非常相似,但存在一些细微差异:
- 测试计划位于使用Markdown编写的规范文件中,而不是Cucumber的功能文件中,因此测试的编写和维护更加轻松。
- 测试步骤以项目符号列表形式列出,而不是采用Cucumber的Given、Then、When格式。
作为一种行为驱动开发(BDD)工具,测试越复杂,Cucumber的表述就可能越冗长。使用Gauge时,每个步骤都以清晰、简洁、易读的项目符号列出。此外,Gauge还提供内置报告功能,支持多种格式(XML、JSON、HTML)。既可在命令行中使用,也可在IDE中使用,例如Visual Studio Code。此外,Gauge还提供丰富的文档,涵盖安装、规范编写、示例教程等各种主题。
3. Gatling负载测试
类型:同时提供企业版和开源版本
最新版本:3.2.1(2019 年 8 月 27 日)
在Threat Stack,我们使用Gatling进行持续负载测试。Gatling采用Scala编写,既可作为独立工具运行,也可通过Maven作为产品的依赖项使用。
为了展示其速度和性能,我们在测试环境中用不到10分钟生成了300万个请求,并确认所有请求均在800毫秒内返回结果。
正如BlazeMeter在其博客文章中所述,应使用Gatling进行负载测试的八个理由:“Gatling会生成详细的指标仪表板,无需添加任何其他插件,即可在测试执行后查看。报告以HTML文件形式存储,可轻松保存,以供日后分析和比较指标。此外,报告还支持交互,既可查看整体情况,也可深入分析并重点关注特定请求。”
4. Chef.io 的 Test Kitchen
类型:开源
支持:Chef.io 社区
最新版本:2.2.0(2019 年 4 月 26 日)
Test Kitchen是我们使用的Chef.io产品,用于在测试过程中自动创建和销毁不同的Amazon Web Services环境。Test Kitchen是一款测试工具,可用于在一个或多个平台上隔离执行已配置的代码。Kitchen原生支持多种测试框架,包括Chef InSpec。所有由Chef管理的社区cookbook均使用Kitchen,它也是cookbook集成测试的常用工具。
Learn.Chef.io提供了一系列精心设计的培训模块和演示,其中包括一个非常实用的模块,名为“Test Kitchen入门”。
5. ScalaTest
类型:免费,开源
最新版本:3.0.8(2019 年 6 月 10 日)
Threat Stack的测试工程师已开始与软件开发人员合作,使用ScalaTest为Scala代码编写服务测试。
我们的集成测试使用ScalaTest风格特征FeatureSpec,以Given/When/Then格式描述测试驱动开发(TDD)风格的单元测试。正如ScalaTest文档所述,FeatureSpec是“一组测试,其中每项测试分别代表某项功能的一个场景。FeatureSpec用于编写比单元测试‘层级更高’的测试,例如集成测试、功能测试和验收测试。”
ScalaTest在其网站上提供了丰富的实用文档,包括详细的快速入门、安装步骤和用户指南。
6. Chef InSpec
网站:https://kitchen.ci/docs/verifiers/inspec/
类型:免费,开源
支持:Chef.io 社区
最新版本:(2019 年 8 月 11 日)
在Threat Stack,我们使用Chef InSpec创建基于Ruby的测试,以验证动态创建测试环境后,一切是否按预期运行。InSpec测试旨在便于阅读。如果您熟悉此类测试框架,例如RSpec,那么应该也会熟悉InSpec代码。InSpec会检测不一致之处,并以报告形式记录差异。随后,我们可以进行必要的Chef更改,使系统达到所需状态。
为帮助您快速入门,Learn Chef Rally中有一个实用章节,将指导您设置Docker和Docker Compose环境、下载示例环境,并使用InSpec探索该环境。
7. Mocha
类型:免费,开源
支持:Mocha Gitter Group,Mocha Google Group
最新版本:3.2.1(2019 年 8 月 27 日)
Mocha是一款可在Node.js和浏览器中运行的JavaScript测试框架,支持异步测试。由于Mocha测试按顺序运行,因此可以更灵活、准确地生成报告,并将未捕获的异常映射到正确的测试用例。
在Node.js环境中使用Mocha时,可以将内置的assert模块用作断言库。在Threat Stack,我们将Mocha与Chai结合使用,为Threat Stack Application Security Monitoring功能构建测试框架。
Mocha网站提供丰富的文档,涵盖详细的功能概述、安装和入门指南,以及特定功能和任务的相关信息。
8. Cypress.io
类型:
- 免费开源测试运行器
- 商业版Dashboard服务,最多3名用户可免费使用
支持:Gitter 聊天;付费用户可获得电子邮件支持
最新版本:3.4.1(2019 年 7 月 29 日)
Cypress.io专为只需在Chrome中测试开发成果的JavaScript前端开发人员而构建。Cypress与我们的应用程序在同一运行循环中执行,这意味着Threat Stack应用程序可访问的所有函数、窗口、Web元素、计时器和服务,我们的测试代码也都可以访问。我们还可以即时读取和修改网络流量,从而添加一些有意义的负面测试用例,例如测试后端服务器无法访问时会发生什么。
Cypress.io提供结构清晰的文档,其中包含全面的概述、入门信息和核心概念,包括如何编写和组织测试。想了解Cypress能做什么?TestAutomationU刚刚发布了一门新课程:Cypress入门。
9. Jest
类型:免费,开源
支持:React Discord 聊天室,JestJs Google 群组
最新版本:24.9(2019 年 8 月)
我们的全栈软件开发人员已将Threat Stack Cloud Security Platform基于ReactJS的前端测试工具从Mocha和Chai改为Jest。Jest为我们使用的ReactJS组件提供了更完善的内置测试支持。借助这一JavaScript测试框架,我们可以编写更出色的单元测试和集成测试。ReactJS和Jest这两套工具均由Facebook提供。
与本文介绍的大多数其他工具一样,Jest网站也提供了包含丰富示例的文档,涵盖入门、配置以及各种使用场景。
10. Apache JMeter
类型:免费,开源
最新版本:5.1.1(2019 年 3 月 13 日)
Apache JMeter是一款开源软件,旨在对功能行为进行负载测试并衡量性能。根据其网站的介绍,JMeter“可用于测试静态和动态资源以及Web动态应用程序的性能。它可以模拟服务器、服务器组、网络或对象承受高负载的情况,以测试其承载能力,或分析不同负载类型下的整体性能。”
我们使用JMeter分析和衡量应用及服务的性能。借助JMeter,我们可以在多用户并发访问的高负载条件下测试应用,了解如何提升扩展能力。
JMeter提供了一系列实用文档(包括《入门指南》《用户手册》和《最佳实践》)以及多篇分步教程。
测试愉快……
尽管Threat Stack的测试工程师能力出色,但如果没有强大工具支持的系统化流程,也很难取得进展。随着平台不断演进,团队持续提升专业能力,不断更新技能和知识,采用并整合新工具,同时开发新方法,确保继续为Threat Stack软件开发生命周期(SDLC)创造价值。希望本文能帮助您了解测试团队如何运用多种自动化测试工具,满足Cloud Security Platform中多项功能的测试需求。
Threat Stack现已更名为F5 Distributed Cloud App Infrastructure Protection(AIP)。立即与团队一起开始使用Distributed Cloud AIP吧。
关于作者
相关博客文章
Thingbot正转变为攻击平台
Lori MacVittie重点介绍了F5 Labs对2018年1月至6月全球物联网设备攻击的研究,并指出了其中令人警醒的影响。物联网设备不仅持续遭到利用,还被转变为攻击平台,这意味着攻击者可以更充分地利用这个必然增长的市场。
借助F5全新Quick Start,在AWS上快速开展业务
在AWS re:Invent开幕前,我们很高兴与大家分享F5与AWS之间全新的Quick Start集成。F5的Tom Atkins将介绍该服务如何启动、配置和运行在AWS上部署工作负载所需的计算、网络、存储及其他AWS服务。