DevOps 世界中的自动化测试

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

自动化测试的目标是使用最少的脚本集尽可能简化测试工作。自动化测试工具能够执行可重复的测试,报告结果,并将结果与​​更快的反馈给团队进行比较。自动化测试在每次执行时执行完全相同的操作,从而消除人为错误——并且可以在一天中的任何时间重复运行。下面我概述了有关如何启动和运行(正确的方式)自动化的五个步骤。

第 1 步:奠定基础

地基是任何建筑物中最重要的元素,无论是房屋还是高层建筑。这看起来像是整个施工过程中的一个简单部分,但打好基础非常重要。在基础上犯的错误只会随着你的上升而变得更糟。它被称为复合缺陷,这意味着错误会增加。等待!这与自动化有何关系?适当的规划将为项目的成功奠定坚实的自动化基础;没有它,你的项目将摇摇欲坠,成为维护的噩梦。

为了避免这些潜在的陷阱并继续完成任务,您需要一个好的路线图——从以下几点开始:

  • 规划您的自动化目标;
  • 设计架构;
  • 培训团队;
  • 开始开发测试脚本;
  • 放归野外。

在整个入职过程中,重要的是要教育每个人。对自动化的一个常见误解是认为自动化是一颗灵丹妙药——初始设置和步骤创建需要时间和精力。自动化需要努力维护。这需要考虑到任何计划和估算中。良好编程的原则与良好设计和工程的原则密切相关。通过执行标准,您可以帮助开发人员提高效率并生成更易于维护且缺陷更少的代码。这是一个很好的机会,可以通过教育每个人来开始塑造你的新测试组合——他们需要了解在冲刺计划阶段进行这些对话时,单元、集成和 api 层属于什么类型的测试。

第 2 步:选择技术

你已经找到了完美的计划,并且知道你想在哪里建造。兴奋正在建立。是时候开始考虑可以发挥重要作用的细节了。为您的新家选择合适的产品和材料可能会让人不知所措。在为您的自动化选择测试框架时也是如此。它是该过程的关键部分。由于有许多不同的测试框架可用,因此在评估框架时创建一个要审查的要求列表非常重要。为了帮助您,在您完善您的要求时,这里有一些问题要问:

  • 您是否正在寻找用于单元和前端 UI 测试的行为驱动开发 (BDD) 框架?
  • 您需要支持浏览器、移动网络或移动原生应用程序吗?
  • 您希望在本地还是在云中运行 selenium 测试?
  • 您需要跨浏览器测试吗?
  • 您是否需要用于非技术资源的关键字驱动框架?
  • 您的团队是否具备足够的自动化开发编程知识?
  • 您是否正在实践持续集成并需要一个无缝集成的工具?

第 3 步:配置

找到专门从事您需要完成的工作类型的合适专家。您永远不会雇用水管工来进行电气工作。正确的?

这个阶段很关键,缺乏经验可能会令人沮丧。最好找一位自动化专家来设计您的自动化架构,教团队如何编写质量测试的基本技能,以及持续的指导。如果聘请专家不是一种选择,我强烈建议为每个计划编写测试的人找一个现场培训课程。

第 4 步:基础知识

每个建筑行业都需要基本的服务知识。我什至无法想象在没有任何基础知识的情况下建造室内框架墙。墙的框架基础包括底部的门槛板、墙柱(垂直梁)和顶部门槛板(横跨顶部的梁)。这在理论上听起来很简单,但要使墙垂直且方正需要基本知识和大量实践。

这同样适用于编写自动化脚本。自动化的基本原则之一是了解如何查找定位器并且永远不要使用 xPaths。至关重要的是,工程团队在设计软件时要考虑到自动化。这到底是什么意思?教育工程师如何定义自动化所需的独特且可预测的定位器。在网页上定位元素的最有效方式和首选方式是通过 HTML 元素 ID 或 CSS 选择器。 ID 和 CSS 是最安全和最快的定位器选项,应该始终是首选。让我们开始吧,如果这是唯一可能的方法,则只使用 xPath,就个人而言,这是一个很好的机会,可以将其推回工程领域,为您的脚本提供可预测的定位器。以下是如何从可预测的 HTML 元素编写自动化脚本的示例;

具有明确定义的定位器的 HTML 代码:


 <div class="grid location-search-result js-store js-search-result" data-showclosed="true" 
data-substituted="false" data-delivery="false" data-carryout="true" data-online="true" 
data-orderable="Carryout Delivery" data-open="true" data-type="Carryout" 
data-storeid="4348" data-services="Carryout"> 
<a class="js-orderCarryoutNow js-carryoutAvailable btn btn--block" data-type="Carryout" data-ordertiming="current" href="#/section/Food/category/AllEntrees/"&gt;Order Carryout</a>
</div>

使用 Capybara 测试框架编写脚本:


 <div class="grid location-search-result js-store js-search-result" data-showclosed="true" 
data-substituted="false" data-delivery="false" data-carryout="true" data-online="true" 
data-orderable="Carryout Delivery" data-open="true" data-type="Carryout" 
data-storeid="4348" data-services="Carryout"> 
<a class="js-orderCarryoutNow js-carryoutAvailable btn btn--block" data-type="Carryout" data-ordertiming="current" href="#/section/Food/category/AllEntrees/"&gt;Order Carryout</a>
</div>

第 5 步:让我们编码

最后,施工开始了!以下是我编写出色的自动化脚本的入门技巧。

可重复。 自动化脚本必须是可重复的。您必须能够衡量预期的结果。
可扩展性的设计测试。 自动化的全部意义在于提供快速反馈。创建和执行大规模自动化测试需要对过程中的元素采取深思熟虑的方法,并密切关注测试设计。保持测试精简和独立。
容易明白。 脚本应该是可读的。理想情况下,您的脚本还可以作为一种有用的设计和需求文档形式。
速度。 您的自动化测试应该运行得很快。最终目标是通过建立快速反馈周期来检测问题,从而加快整个开发过程。

使用水豚的样品测试:


 <div class="grid location-search-result js-store js-search-result" data-showclosed="true" 
data-substituted="false" data-delivery="false" data-carryout="true" data-online="true" 
data-orderable="Carryout Delivery" data-open="true" data-type="Carryout" 
data-storeid="4348" data-services="Carryout"> 
<a class="js-orderCarryoutNow js-carryoutAvailable btn btn--block" data-type="Carryout" data-ordertiming="current" href="#/section/Food/category/AllEntrees/"&gt;Order Carryout</a>
</div>

外卖

通往自动化的道路可能很艰难,但这是值得的。要做好,您需要正确的态度。有时你会遇到障碍。如果有些东西不起作用,你真的会在这里学会解决问题。培训阶段是掌握新技能的重要和难得的机会——集中注意力,保持正确的态度,适应,投入,永不停止学习……

关于作者

Greg Sypolt (@gregsypolt) 是 Gannett 的高级工程师和 Quality Element 的联合创始人。过去 5 年专注于创建和部署自动化测试策略、框架、工具和平台。