Close

自动化测试如何支持 DevOps

测试自动化可以帮助开发团队更快速、更可靠地构建、测试和交付。

Krishna Sai 头像
Anton Hristov

mabl 产品经理


21 世纪初,各大公司开始采用敏捷开发实践,即采用客户反馈较为频繁的加速开发生命周期。随后,此举推动人们采用支持持续集成持续交付的工具,从而实现构建、测试、配置和部署流程的自动化。

但是,诸如开发、测试和交付到生产的关键功能是由独立团队执行的,这些团队在各自领域孤立运作。于是,这种情况导致效率低下,并使软件开发生命周期陷入停滞。它还促成了 DevOps 的形成,这是一套组织理念、实践和工具,能使小型跨职能团队(也称为小团队)能够负责端到端产品更新的持续交付和质量。

起初,DevOps 只统一了开发和 IT 运营,而测试继续由一个单独的团队手动执行。这有助于解决云应用交付和监控方面的挑战。此外,它还催生出全自动化 CI/CD 管道。但是,这并没有缩短发布周期,因为测试是孤立的,而且通常是一个耗时的手动过程。

为解决测试瓶颈,组织开始从集中式 QA 团队转向在整个开发团队中嵌入 QA。

什么是测试自动化?


测试自动化是自动审查和验证软件产品(例如:Web 应用)的实践,以确保其符合代码样式、功能(业务逻辑)和用户体验的预定义质量标准。

测试实践通常包含以下阶段:

  • 单元测试:验证代码的各个单元(例如:函数),以确保其按预期工作
  • 集成测试:确保多段代码可以协同工作,且不会产生意外后果
  • 端到端测试:验证应用是否符合用户的期望
  • 探索性测试:采用非结构化方法从用户角度审查应用的各个方面,以发现功能或可视化问题

不同类型的测试通常被视为一座金字塔。当您爬上金字塔时,每种类型的测试数量都会减少,且创建和运行测试的成本也会增加。

探索性测试金字塔

过去,金字塔中的所有测试都是手动进行的。在创建自动测试工具之前,这是一个缓慢、昂贵且容易出错的过程。

如今,几乎所有的单元测试都已完全自动化,且单元测试自动化被认为是最佳实践。集成测试在很大程度上也已自动化。如果未实现自动化,则通常会跳过,转而进行更多的手动端到端测试。当前的测试自动化浪潮主要集中在自动化测试金字塔的端到端层,从而减少了对集成测试的需求。

尽管自动化工具已存在十多年,但许多自动化工具都需要编码技能,并且常常会导致不稳定的测试,而进行大规模故障排除和维护的成本也极高。许多团队最终都自行创建自定义测试自动化框架,但由于学习曲线很陡,使得新团队成员的加入变得费时费劲。自定义框架最终还需要自行维护和改进,以跟上不断变化的技术堆栈。因此到目前为止,大多数端到端测试均为手动过程。

随着组织的 DevOps 实践日趋成熟,在整个生命周期中实现测试自动化的需求对于发挥 DevOps 的主要优势至关重要,即更快速、更可靠地构建、测试和交付,简化事件响应,以及改进团队之间的协作和沟通。在开发人员收到反馈并修复已发现的问题之前,不再需要与 QA 团队呆上几天才能进行发布构建。QA 团队需要通过确保自动执行测试用例以及实现接近 100% 的代码覆盖率,在 DevOps 周期中调整自己的工作。环境需要实现标准化,且其 QA 沙盒上的部署应自动执行。测试前任务、清理、测试后任务等均应自动执行,并与持续集成周期保持一致。

如今,mabl 一类的低代码工具可以在 CI/CD 管道的每个阶段整合可靠且自动化的端到端测试,从而有助于在开发生命周期的早期发现问题。众所周知,越早检测到发布版本中的问题,修复它们的速度就越快,成本也越低。

DevOps 中的自动化测试


事实上,这意味着开发人员倾向于编写单元测试来验证代码是否按预期工作,而质检人员和产品负责人则会创建自动化 UI 测试来验证端到端用户体验。质检人员还应组织探索性测试会议,在这些会议期间,团队应手动检查各个应用方面是否存在问题。

DevOps 最佳实践是尽早在 CI/CD 管道中尽可能频繁地运行自动测试。这包括在生产环境中运行自动 UI 测试,以主动监控用户体验问题。由于当今的应用依赖于具有多个移动部件的众多服务,因此通过在生产环境中运行测试来执行综合事务监控可以在用户之前检测到第三方服务的问题。

互联圆环图标
相关资料

免费试用

工具图标
相关资料

通过测试改善 DevOps 实践

开始使用自动化测试


没有一个解决方案是万能的,但在为团队定义测试自动化策略时,需要考虑以下重要事项:

发布频率

发布的频率越高,就越需要进行测试自动化投资,尤其是应在每个部署中运行的端到端测试。如果您的发布周期不够频繁且想缩短发布周期,则可先提高单元测试覆盖率,然后创建简易的自动化 UI 冒烟测试,以便对每个构建执行快速完整性检查。然后,您可以逐步投资创建更多自动化的端到端测试,以帮助您减少检查回归版本所需的时间。

工具可用性

现代测试自动化工具将显著提高团队持续交付高质量软件的能力。在评估测试工具时,要考虑创建测试的简易性、可靠性、维护需求以及与 CI/CD 堆栈的集成。

对于给定的工具,理解学习曲线和所需技能同样重要。解决方案的使用越简单,团队提升速度就越快。团队中将有更多人能够更轻松地获取它,从而提高测试覆盖率,并有助于形成质量文化。评估测试解决方案的一个有效方法是让整个团队花时间实现一些测试用例场景的自动化,并将主要竞争者列入您的候选列表。

产品成熟度

如果您团队开发的产品有许多现有客户和成熟的代码库,您则很可能已有确定的发布节奏和测试实践。随着您的团队转向持续集成或完整的 CI/CD,必须将测试自动化作为管道自动化的关键组成部分。如果没有在早期和整个开发过程中实现自动化测试,快速交付和快速反馈便无法持续。

另一方面,如果您的团队正在构建新产品,那么这是一个从一开始就进行自动化测试的极好机会。从一开始就设置单元测试覆盖率目标,并专注于为每个功能定义端到端的测试用例。最好等到功能即将发布之后再添加自动化端到端测试,这样就能避免因中断 UI 变更而导致的测试失败。

CI/CD 环境和测试数据

创建自动化测试本身就是一项挑战,但通常由于缺乏带有测试数据的原始环境,导致团队无法在 CI/CD 管道中尽早采用测试自动化功能。因此,尽早让团队讨论测试策略并致力于创建必要的测试基础架构至关重要。例如,开发人员需要实现对测试用户帐户的支持,并能通过 API 加载附带测试数据的环境。尽早构建用于调配临时测试环境的基础架构将大大加快发布审查和反馈周期。

QA 测试示意图

自动化测试如何改变 QA 的角色?


自动化测试如何推动 DevOps 发展


自动化测试如今被视为一项 DevOps 最佳实践。起初,在大部分开发管道中实施自动化测试可能看起来令人生畏,但是您可以从自动实现单个端到端场景开始,并按计划运行该测试。新工具也使自动化测试比以前简单得多,其结果也远超过其投入。毕竟,谁不想让客户满意?

采用自动化测试有助于解锁如下 DevOps 优势:

  • 在不影响质量的情况下提高速度:实现较高的产品速度,既能够让开发人员满意,又能使他们更快速地向用户交付更多价值
  • 改进团队协作:共同承担质量责任,使团队成员能够更好地协作
  • 可靠性:通过提高测试自动化的覆盖率,提高发布的可靠性。生产环节的问题应该很少发生,而不是一种常态
  • 规模:通过将开发分散到多个以自给自足方式运作的小团队,产生一致的质量结果,并降低风险
  • 安全性:利用自动化合规性政策、细粒度控制和配置管理技术,在不影响安全性和合规性的情况下快速推进
  • 提高客户满意度:更高的可靠性和快速响应用户反馈可提高用户满意度,并提高产品推荐率

总之...


利用测试自动化来释放 DevOps 的全部潜力,最终将减少瓶颈并提高效率,而这两者都将直接影响员工和客户的满意度,并最终影响利润。

使用 Bitbucket PipelineAtlassian Marketplace 中提供的某一测试自动化工具和资源,开始自动进行测试。

Anton Hristov
Anton Hristov

Anton Hristov 是 mabl 的产品经理,拥有 10 多年的软件开发、测试和交付经验。他热衷于在人类、技术和设计的交叉领域工作。Anton 特别喜欢从数据获取洞察信息,帮助人们充分发挥潜力。而他协助打造的多款产品便是对此志向的最好明证。


分享这篇文章
下一个主题

推荐阅读

将这些资源加入书签,以了解 DevOps 团队的类型,或获取 Atlassian 关于 DevOps 的持续更新。

Devops 示意图

DevOps 社区

Devops 示意图

DevOps 学习路径

地图插图

免费试用

注册以获取我们的 DevOps 新闻资讯

Thank you for signing up