用于自动化测试的4种最佳设计模式(还有86种)

大家好。预期课程的开始,“ Python QA Engineer”准备了另一本有趣的材料的翻译。




自动化项目的大多数成功都在于重用众所周知的测试模式,这已经被证明可以帮助提高自动化脚本的可靠性。

自动化测试设计模式是一种简单的解决方案,它日渐证明了其有效性。对于使用面向对象编程构建的任何项目,这些模板也被视为最佳实践。

为什么设计模式对自动化测试如此重要?

理所当然的是,您的应用程序会随着时间而变化。
而且,由于您知道更改会以一种或另一种方式发生,因此您应该从一开始就使用最佳实践和设计模式。它们将使您的测试可重用并且更易于维护。

以下是一些常见的自动化测试设计模式,许多团队使用这些模式来创建强大的测试自动化并改善整个测试逻辑。

页面对象



来自Automation Guild 2017的Nikolay Advolodkin的Page Object的示例在自动化

测试中使用的一种流行策略是对应用程序的行为进行建模。
为此,您可以使用简单的页面对象来模拟要测试的那些软件。
例如,您可以为登录页面或主页编写页面对象。这种方法正确反映了共同责任的原则。

如果发生了变化,例如元素的ID,那么您只需要在代码中更改一个位置,使用此页面对象的所有测试将自动收到此更改,而无需执行任何不必要的操作。测试代码只能在一个地方更新。这种方法还有助于减少代码重复。

页面对象还使用简单明了的名称将HTML和CSS的技术细节隐藏在方法后面。
专注于方法的命名方式还有一个额外的优点,即有助于创建令人愉悦的,可读性强的应用程序编程接口(API),技术熟练程度较低的程序员可以快速开始使用它。

这种模式还遵循流行的DRY软件开发惯例(“不要重复自己,不要重复”)。
基本上,DRY原理意味着对于逻辑的每个部分,只需一段代码,而不再负责。代码重复使得难以维护;编写的代码越少越好,因为受支持的代码越多,意味着错误会潜入您的测试框架的机会就越大。

仅此软件设计模板就可以轻松解决您的大部分测试问题,但它也不是万能药。但是,它将使您向前迈出一大步,使自动化功能测试更加稳定。
一些测试人员认为,Page Object模式通常违反了一个原则,即类仅应具有一个更改理由。

为了避免这种情况,许多人转向了脚本,该脚本最初由Anthony Marcano(@AntonyMarcano)在Andy Palmer(@AndyPalmer),Jan Molak(@JanMolak)和其他人的参与下进行了描述

剧本模式


页面对象是开始使测试可维护的好方法,但是,如果您不小心,它们仍然会失去控制力。
Screenplay模式(曾经称为Journey模式)是SOLID设计原则在自动验收测试中的一种应用,可帮助团队解决这些问题。也就是说,实际上,这就是使用SOLID设计原则对页面对象进行无情重构的结果。

Screenplay模式采用页面对象并将它们分成非常小的片段。一些测试人员说,这使他们的测试更加可维护和可靠。
另一个重要的优点是,它使测试脚本更具可读性。

我第一次在2017年的自动化协会会议上听说编剧模式是约翰·斯玛特(@Wakeleo)我最喜欢的测试自动化框架之一创建者Serenity。)
编剧使用角色,任务和目标的思想来正式描述测试,拒绝与系统交互的条款。编剧,您是用有目标的演员描述测试的。.

这是一个示例:


John Smart 2017实施的自动化指南会议的编剧模式示例

乍一看,使用这种模式似乎比使用相同的Page Objects困难得多,但是John提到使用这种方法可以节省维护和支持成本,从而节省了很多时间。

端口和适配器


端口和适配器的体系结构旨在确保您使用单一职责原则,即,特定对象应该做一件事,并且只有一个更改原因。
在自动化中使用它时,请确保将测试用例代码与所有其他代码分开,以便能够交换速度较慢的组件和快速的模拟器,从而允许您在一个过程中运行测试和被测试的应用程序。

摆脱网络和I / O,以免降低测试套件的速度。当然,这并非易事,但是在创建用户界面自动化时,您为此付出的努力越多,对您的好处就越好。

我在接受黄瓜创建者Aslak Hellesoy 的采访时了解到了这种模式@aslak_hellesoy)他将其描述为一种从Cucumber端到端测试中快速获取反馈的策略。Aslak

还建议了一个名为Todo-subsecond的资源,我将该资源添加到了我的Top Resource中测试自动化工程师:这个具有完整堆栈验收测试的微型应用程序,可以在几毫秒内完成,旨在说明在任何系统上实现此目的的基本方法。行为驱动的开发。

主讲人


Presenter First是对模型视图控制器(MVC)的修改,用于组织代码和开发,以使用测试驱动的开发方法(TDD)创建经过全面测试的软件。
我首先(@SebRose通过对Cucumber项目的撰稿人之一和Cucumber for Java的作者Sab Rose的采访了解了这种模式
他说,如果以方框和箭头的形式绘制MVC模式,您将看到作为用户界面的视图明确定义了与模型和控制器的连接。如果在运行时可以用测试创建和控制的模型和控制器替换它们,那么就没有理由无法验证用户界面是否不符合您的期望。

您还可以自定义模型和控制器,以便它们模拟各种奇怪的行为,例如,网络故障。

其他86种自动测试模式


我几个月前写了这篇文章,但从未发表过。
在与新书《通过测试自动化模式进行的旅程》的作者Seretta Gamba进行会谈之前,我一直对自己的清单充满信心,在那里她和她的合著者Dorothy Graham讨论了86种模式! 它们将模式分为四个不同的类别:流程模式,控制模式,设计模式和执行模式。 我描述的是设计模式,但是还有许多其他模式不仅可以解决代码问题。




例如,根据我的经验,有些模式与不良的企业文化和治理模型有关,这些模式倾向于使所有自动化测试的努力无效。
有关完整列表,请查看设计模式Wiki或从Amazon订购一本书。

了解有关该课程的更多信息。

All Articles