cypress 不是内部_前浪cypress,后浪playwright

57fdf2688691595b1e63e889ebaceb09.png

(图片:unsplash,字数:1900,时间:2分钟)

1. selenium: 盛世与危机

在UI自动化测试中,selenium是占据统治地位的工具。从2004年诞生至今,selenium已经引领UI自动化测试十几年了。selenium生态之盛,影响之大,可以说难逢对手

然而,盛名之下,其实许多人对selenium可谓爱恨交织。爱selenium,是因为selenium几乎支持所有主流浏览器,支持多种编程语言,社区活跃,文档丰富;恨selenium,是因为selenium环境配置复杂,执行速度慢,用例不稳定(flaky)。

那么,有没有可能创造一种更好的,能够克服selenium弱点的新型UI自动化测试框架呢?应该说,业界对这一目标的探索没有停止过。并且,近年来也有重要进展,尤以cypress的诞生为标志。

2. 搅局者cypress

cypress是一种新型UI自动化测试框架,其第一个正式版本发布于2017年。

cypress的实现方式与selenium有根本区别。我们知道,selenium是基于webdrvier的。基于selenium的测试用例运行在浏览器外部,通过webdriver协议(JSON over HTTP)与运行在浏览器内部的被测应用程序进行交互。

4949254517710261dfbc140846e4a2b5.png

图1: selenium工作原理 

cypress采用了一种完全不同的实现。基于cypress的测试用例运行在浏览器内部,直接(而不是通过网络通信的方式)与被测应用程序进行交互。

这个根本区别,给cypress带来了一系列优于selenium的特点:

(1) 安装简单。使用selenium,需要安装seleinum库+webdriver程序;使用cypress,只需要安装cypress的Node库即可,一条NPM命令就可以搞定。

(2) 速度快。使用selenium,用例发起的操作需要经过网络通信才能到达被测程序;使用cypress,无须网络通信,就能直接实现对被测程序的操作。

(3) 更稳定。selenium之所以不稳定,一个主要原因就是元素的等待和重试逻辑需要显式处理,容易疏漏。使用cypress,直接用API请求所需元素即可,无须额外逻辑。

大家可以看到,selenium的缺点cypress都能完美解决。cypress似乎是selenium的完美颠覆者。网络上,也不乏对cypress的赞美甚至吹捧。那么,cypress真的能够颠覆selenium吗?

3. cypress能够颠覆selenium吗?

从现实情况来看,cypress诞生三年以来,并没有对selenium构成实质性威胁。这绝不是偶然的:cypress尽管克服了selenium的弱点,但很不幸的是,它没有保留selenium的优点

例如,cypress只支持部分浏览器(主要是chrome),而对于web测试来说,天然就有多浏览器兼容的需求。谁能够容忍自己的应用程序只能在某些浏览器上正确运行,而在其他浏览器上漏洞百出呢?

5d78474f049bbb097d7d55db354478e2.png

图2: selenium和cypress支持的浏览器类型对比

仅此一条,就足以将大多数web测试用户挡在门外。除此之外,cypress唯一支持JavaScript语言,对于使用Python/Java技术栈的自动化测试工程师来说,转向JavaScript需要付出较大的成本。

另外,cypress不支持多页面(TAB)和多窗口(Window),这也极大限制了它所能支持的测试场景。

"两害相权取其轻"。尽管cypress有一些亮眼的优点,但是它的缺点却是致命的。自动化测试工程师用脚投票,依然选择selenium。

想要颠覆selenium,cypress还早得很。那么,cypress为什么能够存在并且发展壮大呢?实际上,cypress虽然没有颠覆测试工程师做自动化测试的方式,但是却颠覆了前端开发工程师不做测试的现象

cypress本质上是一款适合前端开发工程师的工具。有了cypress,前端开发工程师可以很方便和快捷地对前端代码(cypress支持mock后端)进行测试,从而实现前端的敏捷开发

4. 希望之星:playwright

cypress无法颠覆selenium,那么谁能颠覆selenium呢?

目前来看,最有可能对selenium造成威胁的是一个新生的,来自微软的开源项目playwright。

2019年11月10日,playwright产生第一个提交;2020年5年6日,playwright发布第一个正式版本。半年多来,playwright日均代码提交次数50~100次,Github STAR数量已经超过15K,正处于火热开发中。

4ad0ea03f41aeced137cd20a6cb5b7d3.png

图3: github playwright项目

这个新生的,目前中文网站几乎看不到任何资料的工具,究竟有何魔力呢?

playwright并不是白手起家,而是衍生于谷歌的开源UI自动化工具puppeteer。在我看来,playwright是一个兼顾cypress和selenium特点,能力更加均衡的工具

与cypress一样,puppeteer也是一个Node库,因此有安装简单的优势。但是puppeteer的工作原理其实更接近于selenium。和webdriver一样,puppeteer也是使用websocket协议与浏览器的debugger进行通信,实现对浏览器的操作。

当然,puppeteer只是一个UI自动化库,而不是一个UI自动化测试工具。playwright就是在puppeteer的基础上,衍生出的一款UI自动化测试工具。

由于工作原理类似,因此playwright支持多页面和多窗口测试。然而,playwright支持的浏览器类型比selenium少(比cypress更多些)。

selenium之所以支持各种浏览器,是因为每一种浏览器都支持W3C标准的webdriver协议。我们可以为每一种浏览器安装特定的,实现了webdriver协议的webdriver程序。playwright目前支持Chrome,Safari和Firefox,对更多浏览器类型的适配还在开发中。

selenium的一大优势是支持多语言。在这方面,playwright尽管也落后,但是正在表现出明显强于cypress的态势。代表性事件有:(1) 2020年6月28日,Python语言的playwright库开发启动,(2) 2020年7月3日,Robot Framework的playwright库开发启动,(3) 2020年7月13日,pytest的playwright插件开发启动。

这说明什么呢?说明主流自动化测试开发社区看好playwright,在用实际行动拥抱playwright。据我所知,这是cypress不曾享受过的待遇。

当然,playwright是否能够成为selenium的威胁者甚至颠覆者?不确定因素有很多,只有时间能够给我们答案。唯一可以确定的是,playwright是最有希望的那个挑战者

推荐阅读:

测试金字塔不是银弹

我用50行代码,实现了一个JaCoCo原型

9004b2f39e2a8743bb4f65c0c1a12076.png

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值