如何在DevOps中实施连续测试

  • 2019 年 12 月 17 日
  • 笔记

在过去的十年中,对软件开发的需求已急剧发展。软件已成为公司获得竞争优势的关键优势,特别是如果您的公司属于SaaS范畴。通过在SDLC中实施瀑布等传统流程,组织现在正在向敏捷过渡,以便以更快的速度在市场上交付软件。为了应对RAD(快速应用程序开发),出现了许多新方法,例如CI / CD,DevOps,Shift左键测试,为了更好地构建,开发和优化软件交付。即便如此,试图同时保持质量和速度仍然是一个真正的挑战,测试方法可以帮助或降低整个加速过程。今天,我们将探讨在DevOps中进行连续测试的重要性。在本文中,将讨论什么是连续测试?还将帮助消除与连续测试有关的错误观点。我们还将探讨DevOps中连续测试所涉及的挑战,以及最佳实践,以帮助您以专业人员的身份执行连续测试过程。

什么是连续测试?

连续测试是端到端的质量维护过程,其中团队不断进行各种自动化测试。同时,分析与最新软件开发相关的各种业务风险,并为开发人员提供快速反馈。这种反馈有助于在早期阶段识别缺陷和错误,并鼓励开发人员在SDLC(软件开发生命周期)的后续阶段中优化其代码。

与在开发周期结束时交付结果的传统测试方法不同,连续测试在多个阶段进行,包括开发,集成,过渡环境和生产环境。连续测试可确保在开发过程中尽早解决缺陷和问题,从而提高整体质量并节省大量时间和金钱。

连续测试的好处

常规测试技术在很大程度上取决于手动测试和需要定期更新的自动测试,这可能会阻碍交付过程的速度。这就是诸如敏捷,DevOps,持续集成和持续交付之类的现代方法论所探讨的内容。

在DevOps中实施连续测试可以通过以下方式取得成果:

  • 持续风险分析:可能有一个版本的版本(候选发布)通过所有可用测试,但没有准备由业务负责人发布,持续测试将在每个阶段评估这些风险。
  • 牢记用户体验:连续测试是一个可以轻松适应不断变化的客户要求的过程。通过根据客户反馈在应用程序中进行不断更新,将持续测试与DevOps集成在一起可以帮助使您的软件变得更加健壮和稳定。从客户的角度来看,您可以灵活地编写有效的测试用例。就用户体验进行正确的测试对于评估前端和后端所有相关技术的最终用户体验至关重要。
  • 帮助安全性:持续测试建立了一个支持系统,该系统可确保应用程序免受意外更改和攻击的安全性,这些更改和攻击在部署后也可能会遇到。在加速的开发过程中,即使在软件出现故障的情况下,它也可以确保系统稳定且可恢复。
  • 从一开始就进行持续集成:持续测试期望测试从开发过程的早期就被嵌入,而不是在发布之前就进行处理。测试不断集成到软件交付管道和DevOps工具链中。
  • 涵盖功能和非功能测试:连续测试可模拟所有类型的功能测试,例如跨浏览器测试,回归测试,集成测试,API测试,单元测试;还有非功能性测试,例如可用性测试,安全性测试,可靠性测试,可伸缩性测试等等。
  • 及时的反馈而不会造成任何瓶颈:连续测试会在交付管道的适当阶段评估现代体系结构的每一层,并在交付管道的正确阶段提供可行的反馈,而不会造成冗长的排队。
  • 节省时间,金钱和资源:及早发现bug不仅可以节省发布窗口的资源,还可以帮助您节省大量金钱和资源。持续测试通过使用诸如开发测试或左移测试之类的缺陷预防策略,减少了用于发现和修复缺陷的时间和资源。

与DevOps中的持续测试有关的错误观点

  • “将导致测试人员失业”:测试人员对框架有一种看法:他们可以看到客户如何与之交互。尽管自动化的发展非常迅速,但它还没有达到完全取代手动测试的水平。引入自动化的全部目的是为手动测试人员提供更多的时间,以提出更有效的测试方案。仍然存在重要的手动活动,例如探索性测试和可用性测试,测试人员应该持续执行它们,这是他们工作的特征。当然,他们需要获得作为软件测试人员的有效技能。
  • “只有测试人员才能为连续测试做出贡献”:连续测试的某些或全部部分对于任何类型的团队及其团队成员都是至关重要的。例如,让测试人员与开发人员并肩作战可能使他们能够创建高级的自动化测试套件。这样,开发人员就有机会理解测试人员的观点,并且测试人员还可以学习和提高他们的测试自动化技能。
  • “连续测试意味着连续执行测试用例”:正如我已经解释过的,连续测试还有很多其他功能。它不仅执行功能测试和非功能测试,而且连续测试还涵盖了从左移(单元,组件,覆盖范围,综合风险评估)到“右移”(监视/ APM,生产中的测试,客户体验,虚拟化测试)。
  • “连续测试和自动化测试是相同的”:通过自动化,企业正在尝试实施敏捷的测试策略:“尽早测试,经常测试,到处测试”。冗长的测试脚本会自动执行并定期进行更新,借助自动化测试工具,自动化测试可用于执行连续测试,从而减少了人工错误。但是,请记住,自动化测试和测试自动化稍有不同。通过测试自动化,确保通过管道进行整个交付过程的速度和效率。自动化测试可以自动化,传统的测试方法可以自动化管理和跟踪不同测试的整个过程。连续测试包括自动化测试和自动化测试,以保持质量和速度。自动化测试是连续测试的子集,不应将它们混淆。

DevOps中连续测试的挑战

  • 一次性巨额投资:构建测试环境和建立自动化框架需要大量的专业知识和精力。获得测试自动化范围的最大困难是与建立有效的自动化框架相关的时间和成本。为了实现测试自动化项目,JIRA, Asana等全面的测试管理平台简化了此过程。
  • 测试广泛的复杂体系结构:现代应用程序广泛分布,敏捷和并行开发流程的采用正在增加,端到端功能测试通常要求访问第三方服务或大型机,这些服务或大型机仅可用于容量有限或在不方便的时间。可以通过使用服务虚拟化模拟缺少或不存在依赖项的AUT(被测应用程序)交互来解决此问题。它还可以用于确保各种测试运行中的数据,性能和行为是一致的。
  • 不可扩展的测试套件:团队避免进行连续测试的另一个原因是其基础架构的可伸缩性不足以连续运行测试套件。通过将测试集中于公司的优先级,拆分测试基础并将测试与应用程序发布自动化工具并行化,可以解决此问题。
  • 团队之间缺乏协调:寻找合适的熟练自动化专家也是一项挑战。DevOps中的连续测试要求产品经理,开发人员和测试人员之间进行高度协调。协调是大多数公司奋斗的领域。自古以来,它们之间就存在文化上的脱节。质量检查团队处于孤立状态,可以通过适当的员工敬业度策略和意识来解决。

成功在DevOps中进行连续测试的主要说明

  • 创建强大的用户故事:持续测试意味着从一开始就进行质量和粒度测试。确保获得良好的业务需求以开始开发。确保用户故事是可测试的,并具有良好的接受标准,采用更具探索性的态度进行手动测试可能有助于获得良好的结果。
  • 协作:从文化的角度来看,如果每个人都表现出团队的素质和合作,那么在DevOps中进行连续测试就是成功的。在开始编码或根据需要编写测试之前,先描述测试用例。无论如何,开发人员和测试自动化架构师应共同努力,以确保优化用于测试自动化的代码。团队还可以使用Slack之类的工具来合作测试结果,以加快反馈和调试速度。
  • 保持简单和逻辑:减少不必要的测试对象,例如广泛的测试计划和测试用例,并减少测试等待时间。测试应该是一致的,增量的和可重复的;结果应可量化且有意义。
  • 到处进行测试:测试必须在交付管道的所有阶段进行,涵盖整个环境的所有方面,无论是生产环境还是QA环境。通过在每个阶段进行测试并不断向开发人员提供反馈,可以帮助提高软件开发的质量。
  • 自动化测试:自动化测试对在DevOps中成功实施连续测试起着重要作用。坚持测试自动化金字塔,并专注于自动化测试脚本以实现Web应用程序中的最新更新至关重要。不能实现100%的自动化,但是您可以使过程自动化的程度越高,执行连续测试的速度就越快。
  • 拥抱CI / CD(持续集成/持续交付):开发人员应采用持续集成-通过每天多次将代码集成到共享存储库(例如Bitbucket和GitHub)中。当使用CI服务器实施自动化测试时,每个构建都会立即开始连续测试。警告,无论测试结果是否通过,都可以实时直接发送给开发团队。通过定期集成,您可以更轻松地快速检测和定位错误。一旦完成所有测试,就可以毫不犹豫地将更新持续交付生产。
  • 选择基于GUI的API:DevOps和Agile团队以较短的发布周期,快速的反馈循环和频繁的更改而工作,很难维护GUI测试。GUI测试需要更长的时间来提供反馈,并且需要大量的返工。对于具有多层体系结构的现代应用程序,重要的是验证后端服务和功能路径。API测试更稳定,建议同样使用。GUI测试仅限于系统测试,移动测试,黑盒测试;API测试涉及许多实践,例如单元测试,功能回归测试,负载测试,安全测试,Web互操作性测试等等。
  • 超越自动化的思考:就像人的大脑工作一样,实施人工智能(AI)和设计智能机器(借助IoT,量子计算,机器人等),对交付管道的每个阶段进行启发式思考,可以加速整个流程的发展。SDLC。

结论

为了迅速行动并取得更快的结果,我们必须保证我们从一开始就制造正确的产品。修改产品以进行错误修复从来都不是一件容易的事,因为后期在管道中发现的缺陷修复成本很高。相反,必须采用正确的方式进行测试,并使用同步的交付过程(CI / CD,DevOps),测试方法(API测试,服务虚拟化),稳定的测试平台以及自动化测试的功能和非功能方面。

将团队之间传统的脱节融合在一起,测试人员和开发人员可以学习并执行具有适当专业知识的成功自动化脚本,并轻松优化软件体系结构。

DevOps中的连续测试是持续质量的主要方法(并非唯一方法)。这是通过持续交付向更高质量产品迈出的一步。

一旦在DevOps中实现了连续测试,就会出现一个理想的机会,可以考虑采用不同的方法,这些方法不包括运行测试以识别缺陷或问题,而是可以防止编码。这样,鼓励开发人员从一开始就构建无缺陷的最佳产品。