为了账号安全,请及时绑定邮箱和手机立即绑定

从Selenium迁移到Playwright

Zenjob的质量保证(QA)团队实施最佳实践以自动化回归测试,这对于发布过程的顺畅和快速至关重要。在过去的五年里,自动化测试行业经历了很多变化,为了紧跟行业的发展步伐,Zenjob致力于在我们的工作流程中实施[点击这里查看相关最佳实践]以增强我们的自动化测试套件。

遵循这些最佳实践,在使用Selenium多年后,我们最近发现需要更新我们的自动化测试流程,并开始了寻找合适的自动化框架的旅程。Playwright被认为是最适合替代Selenium的工具,以提高测试效率,简化维护流程,并减少管道中的测试执行时间,以便为我们的应用和网站用户提供高质量服务。

Selenium 与 Playwright,

关于Selenium和 Playwright

Selenium 和 Playwright 都是开源的自动化测试工具。Selenium 已经是很多人的首选自动化测试工具十多年了,而 Playwright 则是一个相对较新的选择。想要了解更多关于它们及其比较的信息,可以参阅这篇文章:https://applitools.com/resources/webinars/selenium-vs-playwright-let-the-code-speak/

Selenium遇到的挑战

虽然Selenium在过去一直很受欢迎,但对我们团队来说,它带来了很多挑战。具体挑战如下。

  1. Pipeline 运行和资源情况 — Selenium 测试通过 8 个 Jenkins 作业并行执行。即便如此,跑完 100 个测试用例仍需要 35 分钟,这速度不算快。

在 Jenkins 中运行 Selenium 测试,并行运行 8 个任务。

2. 不稳定的测试 — 为了去除不稳定的测试,添加了同步操作和专门的测试数据集。然而,这种不稳定性依然存在,这需要不断地反复修改。

3. 缺乏內置的報告支持 — 報告在自動化測試中非常重要,因為它幫助我們了解測試失敗的原因。不幸的是,Selenium 沒有內置報告。過去我們使用 Gradle 和 Jenkins 文件來生成 HTML 報告,作為一種替代方案,這增加了額外的工作。

4. 处理同步 — 隐式和显式的等待都没有帮助,所以我们为不同的场景开发了自定义的方法来解决这些问题。其中一个场景是点击按钮后目标页面未能自动加载,我们通过在Selenium中创建自定义方法解决了这个问题,下面的代码中有具体的实现。

自定义的Selenium同步函数

5. 巨大的维护工作量 — 上述所有提到的问题,运行时间更长、不稳定、缺少内置报告,以及需要编写自定义方法,使得我们不得不不断重构测试以提高其稳定性。这使得维护工作量变得非常巨大。

Playwright是如何被选为Selenium的替代方案的

在寻找Selenium替代品的过程中,我们制定了一项请求评论(RFC),比较了Selenium、Cypress和Playwright——这些都是功能相似的流行QA工具。这个RFC被分享给整个工程团队,以收集所有利益相关方的意见。

选择编剧作为最佳选项的原因如下:

  • 浏览器上下文环境
  • 内置报表功能
  • 并行执行测试
  • 重用登录状态信息
  • 跟踪功能
  • 内置等待机制
  • 内置可配置的重试机制

这次改动的目标是提高测试效率,简化维护工作,并减少测试执行时间,从而实现更频繁的版本发布。

Playwright迁移的过程是怎样的

通过周密的计划并确保现有测试继续运行,我们用了大约八个月的时间迁移到了Playwright。测试拆分成了更小的步骤,我们同时运行Selenium和Playwright的测试,逐步增加Playwright测试的同时减少Selenium测试的数量。

同时运行Selenium和Playwright测试。

成功因素:

我们很高兴地告诉大家,迁移带来了更好的性能和更高的效率。接下来的部分会详细说明我们观察到的改进。

文本的执行

通过使用Playwright,测试执行时间明显减少。更具体地说,我们使测试执行时间减少了80%的时间,相比Selenium,测试的不可靠性也有所降低。

Selenium测试执行耗时

剧本测试执行时间。

基于这一点,我们可以在流程中增加更多测试来确保回归测试有足够的覆盖面,这是可行的。

playwright 固定组件和页面对象的合并使用

使用Selenium时,需要为每个步骤定义元素以调用相应的方法。以下代码展示了如何在每个页面创建元素并调用相应的方法:

在Selenium中导入方法

Fixture是Playwright中的一个很棒的功能。它们帮助我们把页面对象分组,并在spec文件中更容易访问。通过将fixtures整合到spec文件中,就可以在单个测试中导入多个fixtures。

Playwright中的fixture文件。

Playwright中的Fixture用法。

playwright workers

注:若上下文需要翻译该术语,建议直接翻译为“ playwright 工作者”。若考虑保持专业术语的准确性,可维持原词“ playwright workers”。

在 Playwright 中,测试可以通过多个 worker 并行运行以实现并行测试执行。这在 Selenium 中,默认情况下无法实现。要实现测试的并行运行,可以将它们与其他框架结合使用,但这需要花费大量的时间和精力。迁移到 Playwright 后,通过在 Playwright 配置文件里添加如下设置,轻松启用了测试的并行执行,如下所示,在测试套件配置中设置为在管道中使用八个工作进程运行测试,在本地运行时使用两个工作进程。

剧作家的配置参数。

完全相同

默认情况下,单个文件中的所有测试都是按顺序运行的。Playwright 提供了一个选项,可以在每个文件内部并行运行所有测试。要实现这一点,可以在 Playwright 配置文件中将 fullyParallel 选项设置为 true

迁移至Playwright之后,在每次发布时,我们的团队注意到失败的测试增多。我们后来发现,设置 fullyParallel 配置选项会导致一些测试失败。为解决这个问题,我们将 fullyParallel 设置为 false,这使得管道中测试的稳定性得以保持,从此测试在管道中运行稳定。

完全并行的设置在Playwright中。

结论。

迁移现在已经完成,我们已经发现Playwright对我们来说是一个更好的选择。这归因于许多因素,如易于配置、更快的执行时间、在执行动作前可以使用内置的同步,TypeScript的强大功能等。我们很高兴这个项目以积极的结果告终,并推荐Playwright给寻求Selenium替代方案的用户。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消