为什么要使用 playwright 做浏览器自动化测试

本贴最后更新于 880 天前,其中的信息可能已经时移世易

有人给现存的web自动化测试框架分类,第1类叫做 Selenium,第2类叫 Selenium less,间接说明了 Selenium 在 web 自动化测试的统治地位。

如果有项目需要引入web自动化测试,首选就是 Selenium ,因为它具备以下学习优势:

而其他的自动化测试框架就不具备这个优势了。目前比较流行的 Cypress.io 和Playwright 都提供了详细的官方文档,入门会很简单,但是在实际的操作过程中,如果遇到了一些问题无法解决,在网上很难找到现成的解决方案,就算是一些比较基础的 API 调用,也很难找到使用的案例。

Selenium 除了学习优势,还具备的优势有:

selenium 有这么多优势?为什么还会有其他优秀的框架层出不穷呢?微软做了 playwright ,谷歌做了 pupeteer,由一个小团队做出来的 cypress 也大受欢迎。为了避免盲目追求新技术,使用新工具,我们有必要想清楚一个问题:一个优秀的 web 自动化测试框架,应该具备什么能力?

第一,它最好是跨语言的,至少应该支持主流的编程语言,才会有更多的人去推动社区发展,供更多人使用。 这一点,cypress 和 pupeteer 占劣势,cypress 只支持 JavaScript 语言,pupeteer 虽然支持其他语言,但是都不是官方维护的, playwright 具备多语言的官方维护。

第二,它应该是容易使用的。在外部暴露的API使用起来会比较简单,降低初学者的门槛。它的设计和原理要比较容易理解,这样的话,一些高级开发者能够快速的对其进行二次开发。 这一点 selenium 做得不错,不过缺乏高层次的 API 使用,而二次开发出来的上层框架使用起来差异较大,很难统一。其他三个框架的用法都很简单,只是要建立更庞大的社区还需要时间。

第三,安装越简单越好,降低使用门槛。selenium 做得不够好,需要独立去管理浏览器、webdriver 驱动、语言包等多个依赖条件,而 playwright 基本能做到一键安装,连浏览器都整合下载,非常方便。

第四,针对 web 自动化测试具备的脆弱性,需要加强的功能,比如说自动等待,代码追踪和调试工具,截图和录制功能。 这些 selenium 做得都不太好,所以像 playwright 和 cypress 在这方面都会提供非常多的惊喜。

第五,网络监听和控制。当网页请求需要 mock 或者需要进行服务虚拟化时,selenium 完全无法提供类似功能,而 playwright 这些工具做得很好。 这对于推进自动化测试流程已经提高测试效率方面是非常有用的。

第六,他最好是能够与编程语言已经具备的测试生态更好的协调起来,比如说 Selenium 能通过 python 中的 pytest 插件更方便的使用, playwright 也有 pytest 插件。

第七,易于集成。现在的 web 自动化测试,通常都会放到像 jenkins 这样的持续集成工具上管理和运行;同时,脚本通常也会采用 docker 等容器管理技术进行管理。

在这些能力当中,selenium 已经能做到绝大多数,但是在以下方面需要加强:

一、API比较底层,这就意味着经常你需要对其进行二次封装,市面上有很多很多基于 selenium 封装的框架,但是这些框架使用起来有很大差异,而且市场份额都不大,很难统一。

二、selenium 等待机制基本上需要手工实现,这很容易造成脆弱测试。有部分API使用起来会比较麻烦,甚至造成功能缺失。比如说文件上传和文件下载,处理起来会比较复杂。

三、selenium 几乎没有调试和跟踪机制,selenium IDE 也是独立的工具,很难和 webdriver 协调工作。这会造成当脆弱测试出现的时候,测试员很难去调试问题。

四、没有网络监控机制,只能控制页面行为,无法控制网络请求。

而这些短板都已经被 playwright 弥补, playwright 的 API 层次清晰,有高级的也有底层的,既可以使用高层次 API 快速使用,也可以基于底层 API 实现功能;等待几乎都是自动的、智能的,你不需要进行额外的处理;跟踪和调试、截屏和录制等功能一应俱全,能更快速的定位问题、也能方便的回溯测试过程;网络监控、网络请求的mock,请求的修改都可以做到。

也许实现 web 自动化测试的任务,用 selenium 就足够了。但是正因为 playwright 这样的后起之秀不断在打破规则,创建一些新的机制和用法,让我们做自动化测试有了更多选择,更快的效果,更完善的流程。

希望微软能持续投入这个项目,让它变得更好。

回帖
请输入回帖内容 ...