我们为什么在编写过程中通过编写200多个新的自动测试来切换到Selenide

嗨,我是一家大型公司项目之一的测试自动化工具。在本文中,我将解释为什么我们决定从Serenity转向Selenide。我们有一项艰巨的任务,尽管更改技术堆栈需要花费一些时间,但后来它通过加速编写测试和执行回归而获得了回报。

图片

在深入探讨之前,先简要介绍一下整个任务。

不幸的是,根据保密协议,我无法透露该项目的细节。实际上,这些是一家大公司的呼叫中心的一些工具-呼叫路由,按呼叫主题划分运营商等。在漂亮的用户界面中。顺便说一下,该接口不仅为操作员提供,而且还为控制器监听和评估选定的呼叫提供了接口。最重要的是,有一个区分权限的系统和一个管理面板,允许您配置所有内置功能-从电话到控制器可用的等级。

全部功能分为几个项目:电话,用户面板和管理面板。这三个项目都在积极开发中。我的任务是从广义上自动化对这些项目的测试。

对于某些已开发的功能,已经存在自动测试,但是开发它们的专家离开了公司,因此,要实现自动化测试具有一定的技术责任。总共编写了大约50个自动测试,但是其中绝大多数已经完全过时了,因为 功能已经远远超越了。因此,最初的任务是更新所有这些。

堆栈更新


现有的自动测试是使用Serenity库编写的。实际上,它们不得不再次重写,因此没有必要保留现有的开发。库本身对我来说是很熟悉的,但是就我个人而言,我并不认为它是最佳工具。因此,在了解工作量之后,我决定从一开始就改用Selenide。

Selenide是一种非常流行的工具,它提供了许多现成的解决方案。 Selenide的某些功能也可用于类似物-Atlas,Selenium,HTMLElements等。但是他们每个人都不适合我们。

硒是硒的基础。但是出于我们的目的,它太低了。当有现成的解决方案时,重新发明轮子是没有意义的。

地图集最近出现了。它足够原始,并且没有Groovy支持。
HtmlElements对每个人都有好处,但已弃用且不受支持。也有JDI,但它有多线程问题。

以前在该项目上使用的宁静太麻烦了。其中的所有内容都如此互连,以至于要添加一些新的事件处理程序或拦截器,必须重写十二个类(但这并没有每次都成功)。另外,Surenity无法连接Allure(用于生成测试报告的实际行业和公司标准)。

从自动化的角度来看,在Selenide中,一切都简单得多。例如,无需单独描述步骤-附加到方法等。由于它具有开箱即用的Allure支持,因此与使用Web元素相关的所有操作都会自动纳入测试报告中。

当然,Selenide支持PageFactory,Page Object和PageElement。这使代码更具可读性。另外,对于元素出现的那一刻,内部存在期望-无需明确声明您需要在继续操作之前停止测试几秒钟(在配置中设置了超时限制)。明确的期望是单独存在的-您可以在每个测试步骤中显式重新定义必要元素的超时。

Selenide拥有一整套方便的现成方法。

因为从Serenity过渡到Selenide的开始是我一个人在团队中,所以另一个好处是我已经对Selenide和Groovy有足够的经验,因此我可以快速实施现成的解决方案,并随后花费更少的精力来支持他们。

过渡几乎没有痛苦。我们已将Selenide与Allure结合使用。魅力使您可以创建可读性甚至有些精美的报告,这些报告可以清晰地显示出哪些步骤出错以及出现了哪些错误。开箱即用,您可以将网页的屏幕快照附加到报告中。我们甚至添加了运行的视频,页面的源代码,浏览器的日志和Web驱动程序。

迁移现有测试所需的精力最少。Serenity有什么,Selenide有的是带有@FindBy批注的PageObjects。宁静和魅力使用相同的步骤注释。我必须更新模型,元素之间的嵌套,调用测试步骤的顺序。一些测试被完全删除,一些测试从头开始重写,而仅仅更新定位器就足够了。实际上,移动已成为大多数UI自动化程序在设计Web应用程序时面临的一项琐碎任务。

测试更新


更新技术堆栈后,他们自己进行了测试。顺便说一下,作为向新堆栈过渡的一部分,这项工作的一部分已经完成。

鉴于项目功能的累积滞后,无论如何仍然需要重写它们-与在如此大量的代码中查找不一致之处相比,这样做在时间上更有利可图。

目前,前端和后端总共编写了约220个自动测试。进一步开发的重点将放在后端,因为前端的大多数功能元素已经包含在自动测试中。同时,它在不断变化,因此前端出现更多的测试,则需要花费更多的力量进行支持。

拥有无限的时间资源,我们始终致力于将精力放在使我们能够减少支持成本的劳动力上,从而尽可能地覆盖功能。现在,自动测试的覆盖率略超过50%。


由于代码的重复使用,在Selenide上重写的测试变得更加紧凑和准确-所有这些都归功于库本身的功能。

更新测试时,我们考虑到它们需要同时运行(在多个线程中)。测试以前是在单独的虚拟机上运行的。但是向Selenide的过渡使我们能够进一步并行化任务,并在多个线程中运行它们。

粗略地说,向新框架本身的过渡将同时启动的线程数从3个增加到8个,随后对测试进行了优化-多达50个。结果,仅10分钟即可运行100个UI测试。


顺便说一下,多线程是我们选择Selenide的另一个优势。这不是样板,您只需编写最少的代码。 Selenium不需要多余的文字来准备启动项目。开箱即用,您需要运行的所有测试。

在更新和编写新测试的同时,我对测试部门的人员进行了培训,帮助他们从手动测试过渡到全栈测试,从而使该项目的自动化团队受益。所使用的技术栈具有较低的入门门槛,并且互联网上充斥着有关如何解决某些问题的文档和视频。一个月后,我和几个测试人员一起加入了他们,他们可以执行与自动化相关的任务。

已经有整个团队,我们能够优化回归测试。如果之前的回归是团队花费了7天的时间,那么现在相同的任务将执行4天,即我们将测试时间减少了将近2倍。

前面有许多场景尚未实现自动化。我们几乎完全自动化了Smoke测试,但是现在我们切换到了最费力的测试方案。这将有助于进一步减少求助时间。

当然,我们将开发一个测试基础架构。计划推出模拟服务器。现在,我们正在真实的架子上测试所有东西,并生成测试数据。这需要时间和资源。模拟服务器将允许您在不进行初步准备的情况下运行自动测试(我们为另一个项目编写了模拟服务器)。

我们还计划实现一个自动测试记录,以便您可以基于通过直接单击浏览器中的界面获得的工件编写TestRail脚本。在输出中,我们得到了一种自动测试原型。

文章作者:Yuri Kudryavtsev,自动化软件测试专家。

PS:我们在Runet的多个站点上发表文章。订阅我们在VKFBInstagramTelegram频道上的页面以了解我们的所有出版物和其他Maxilect新闻。

All Articles