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


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

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

    • API 非常成熟和稳定,几乎不需要为了适配新的版本修改旧代码;

    • 教程和解决方案非常丰富,如果想学,可以看很多教程,代码出现问题,可以直接在网上收集解决方案。

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

    Selenium 除了学习优势

    还具备的优势有:

    • selenium 跨语言。主流的编程语言都有完善的 selenium 库支持,就算是新兴的 go 语言和 rust 语言,都有对应的库。

    • selenium 不仅可以用在web自动化测试里面,而且拓展到移动端的APP自动化测试;

    • selenium 的 web driver作为W3C的一个标准,可扩展性能力很强。

    • 生态庞大,不容易被轻易取代,有很多扩展工具可以使用。

    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 这样的后起之秀不断在打破规则,创建一些新的机制和用法,让我们做自动化测试有了更多选择,更快的效果,更完善的流程。

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


    绵薄之力

    最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走

    这些资料,对于想进阶【自动化测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。希望对大家有所帮助…

  • 相关阅读:
    Winform 将数据转化成文件保存本地,实现简单的数据缓存
    Elasticsearch:ES|QL 查询 TypeScript 类型(二)
    如何进行内存映射和文件映射操作?
    【Swift学习路线讲解】
    将HTML网页转换为Markdown格式的工具及方法
    logic-flow 使用过程中遇到的bug - 拖动节点到画布的时候,鼠标松开,节点不落在画布,仍旧跟着鼠标走
    Vue.extend()实在是妙啊
    C语言初学1:详解#include <stdio.h>
    如何实现云上 Lakehouse 高性能
    java计算机毕业设计计算机组成原理教学演示软件源码+数据库+系统+lw文档+mybatis+运行部署
  • 原文地址:https://blog.csdn.net/IT_LanTian/article/details/126129848