自动化测试如何支持 DevOps

2022-08-31 14:33:56
虫师
转贴:
开发运维
1530
摘要:测试自动化帮助开发团队更快、更可靠地构建、测试和发布。

在2000年代初期,一些公司开始采用敏捷实践,拥抱以频繁的客户反馈为标志的加速开发生命周期。这后来推动了工具的采用,这些工具支持持续集成和持续交付,自动化构建、测试、配置和部署流程。 

但是,开发、测试和交付生产等关键功能是由各自独立的团队执行的,这就会导致效率低下并拖累软件的开发生命周期。此外,它还催生了DevOps、组织理念、实践和工具,这些组织理念、实践和工具使小型跨职能团队(也称为小队)负责端到端的产品更新的持续交付和质量。 

起初,DevOps 仅统一了开发和IT运营,而测试仍旧是一个单独的团队以手动方式来执行的。这有助于解决云应用程序交付和监控的挑战。它还促成了全自动CI/CD管道的创建,但并没有带来更快的发布周期,因为测试是孤立的,而且通常是一个耗时的手动过程。 

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

1. 什么是测试自动化?

测试自动化是自动审查和验证软件产品(例如 Web 应用程序)的实践,以确保其符合代码样式、功能(业务逻辑)和用户体验的预定义质量标准。
测试实践通常涉及以下阶段:
单元测试:验证单个代码单元,例如函数,使其按预期工作
集成测试:确保几段代码可以一起工作而不会产生意想不到的后果
端到端测试:验证应用程序是否满足用户的期望
探索性测试 采用非结构化方法从用户角度审查应用程序的多个区域,以发现功能或视觉问题

不同类型的测试通常被可视化为金字塔。随着您爬上金字塔,每种类型的测试数量都会减少,而创建和运行测试的成本也会增加。

devops-testing-pyramid

探索性测试金字塔

从历史上看,金字塔内的所有测试都是手动执行的。在创建自动化测试工具之前,这是一个缓慢、昂贵且容易出错的过程。


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


尽管自动化工具已经存在了十多年,但许多工具都需要编码技能,并且通常会导致脆弱、脆弱的测试,这些测试的故障排除和大规模维护成本极高。许多团队最终创建了自己的自定义测试自动化框架,由于陡峭的学习曲线,这使得新团队成员的入职变得困难且耗时。自定义框架最终也需要自己维护和改进,以跟上不断变化的技术堆栈。因此,直到现在,大多数端到端测试都是手动过程。


随着组织的 DevOps 实践日趋成熟,整个生命周期内对测试自动化的需求对于释放DevOps 的关键优势非常重要—— 能够更快、更可靠地构建、测试和交付、简化事件响应以及改善团队之间的协作和沟通。在开发人员收到反馈并修复已识别的问题之前,不再需要让 QA 团队在发布版本中坐几天。 QA 团队需要通过确保测试用例自动化并实现接近 100% 的代码覆盖率来协调他们在 DevOps 周期中的工作。环境需要标准化,其 QA 盒上的部署应该是自动化的。测试前任务、清理、测试后任务等应该是自动化的,并与持续集成周期保持一致。


现在有像ZTF这样的代码工具,可以在 CI/CD 管道的每个阶段合并可靠和自动化的端到端测试,这有助于在开发生命周期的早期发现问题。众所周知,您越早发现某个版本的问题,修复它们的速度就越快,成本也就越低。

DevOps 中的自动化测试

DevOps 使测试成为整个团队的共同责任,而测试自动化使开发人员能够以对质量充满信心的方式快速交付代码更改。


在实践中,这意味着开发人员倾向于编写单元测试来验证代码是否按预期工作,而质量从业者和产品所有者则创建自动化 UI 测试来验证端到端的用户体验。质量从业人员还组织探索性测试会议,团队手动检查各种应用领域的问题。


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

2. 开始使用自动化测试

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


发布频率

发布越频繁,您就越需要投资于测试自动化,尤其是应该在每个部署上运行的端到端测试。如果您没有频繁的发布周期并希望加快发布周期,您可以从添加更多单元测试覆盖率开始并创建简单的自动化 UI 冒烟测试以对每个构建执行快速的健全性检查。然后,您可以逐步投资创建更自动化的端到端测试,以帮助您减少检查版本是否存在回归的时间。


工具可用性

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


了解给定工具的学习曲线和所需技能同样重要。您的解决方案越容易使用,您的团队就可以越快发展。而且您团队中的更多人将更容易使用它,这可以增加测试覆盖率并有助于培养质量文化。评估测试解决方案的一种有效方法是让整个团队花时间自动化一些测试用例场景,并在候选名单上列出领先的竞争者。


产品成熟度

如果您的团队正在开发一个 拥有众多现有客户和成熟代码库的产品,那么您很可能已经有了既定的发布节奏和测试实践。随着您的团队转向持续集成或完整的 CI/CD,将测试自动化作为流水线自动化的关键部分非常重要。如果没有在早期和整个开发过程中进行自动化测试,快速交付和快速反馈是不可持续的。 


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


CI/CD 环境和测试数据
创建自动化测试本身就是一个挑战,但通常是缺乏具有测试数据的原始环境,这阻止了团队在 CI/CD 管道的早期采用测试自动化。因此, 尽早就测试策略进行团队讨论并致力于创建必要的测试基础架构非常重要。例如,开发人员需要实现对测试用户帐户的支持,并能够通过 API 加载包含测试数据的环境。尽早构建用于配置临时测试环境的基础设施将显着加快发布审查和反馈周期。

devops-QA-testing-diagram

QA测试图

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

DevOps 将优质专业人士的角色提升到战略层面,并为职业发展提供了惊人的机会。


过去,QA 的角色主要集中在执行测试活动——编写测试用例、执行手动测试以及向开发人员报告问题。产品组织中通常只有少数自动化工程师,而大多数质量专业人员是手动测试人员。原因是测试自动化工程师需要强大的技术背景、一些开发技能、强大的沟通能力以及对业务需求的深刻理解。从历史上看,拥有这种独特技能的人供不应求。因此,产品团队严重依赖手动测试人员来保证质量。


然而,DevOps 改变了一切。每天有多个发布到生产环境, 测试一个构建需要几分钟,而不是几天。软件团队需要合格的专业人员来领导和指导团队的其他成员——尤其是开发人员——通过倡导用户、教授最佳实践和帮助实现端到端测试的好处。 


幸运的是,像ZTF这样的低代码测试自动化工具可以帮助手动测试人员或质量分析师成为自动化工程师。随着人工测试时间的减少,QA 可以将更多的时间用于在团队中扮演质量教练的战略角色,并帮助每个人参与到质量保证过程中。

4. 自动化测试如何为 DevOps 提供动力

自动化测试现在被认为是DevOps 的最佳实践。在您的大部分开发管道中实施自动化测试起初可能看起来令人生畏,但您可以从自动化单个端到端场景并按计划运行该测试开始。新工具还使自动化测试比以往任何时候都更容易,结果非常值得。毕竟,谁不想要快乐的用户呢?


采用自动化测试有助于解锁以下 DevOps 优势
速度而不牺牲质量:获得高的产品速度,使开发人员感到高兴,并使他们能够更快地为用户提供更多价值
改进的团队协作:质量的共同责任使团队成员之间能够更好地协作
可靠性:通过增加测试自动化的覆盖率来提高版本的可靠性。生产中的问题应该是罕见的而不是常态
规模:通过将开发分布在以自给自足方式运作的多个小团队中,产生一致的质量结果并降低风险
安全性:通过利用自动化合规策略、细粒度控制和配置管理技术,在不影响安全性和合规性的情况下快速行动
提高客户满意度:提高可靠性和对用户反馈的快速响应可提高用户满意度并带来更多产品推荐

综上所述...

拥抱测试自动化以释放 DevOps 的全部潜力最终将减少瓶颈并提高效率,这两者都将直接影响员工和客户的幸福感,并最终影响利润。 
发表评论
评论通过审核后显示。
联系我们
  • 联系人:阿道
  • 联系方式: 17762006160
  • 地址:青岛市黄岛区长江西路118号青铁广场18楼