在开源测试自动化工具方面有一个新的工具,每个人都在谈论Cypress如何成为Selenium的替代品。但有些人认为Cypress标志着一个时代的结束,我们不太确定Selenium是否会在真的会成为一个测试时代结束的标志。为了更好地理解这两个工具之间的相同点和不同点,让我们更好地了解它们的作用。
Selenium
Selenium WebDriver是我们都知道和喜爱的开源自动化工具。随着历史从IDE的卑微开始,转变为2.0硒硒又名webdriver的,Selenium已经成为许多现代软件团队的基础测试自动化工具包。
大多数人都熟悉Selenium的使用 - 它使用每个浏览器对自动化的原生支持直接调用浏览器。通过使用兼容的编程语言在Selenese中编写脚本,您可以运行测试,就像您自己驾驶浏览器一样。
虽然Selenium的学习曲线可能很陡,并且需要至少一种编程语言的知识,但它拥有庞大的活跃用户社区,甚至还拥有年度用户会议。
Selenium的基础之一是能够在最流行的浏览器上进行测试,使其成为跨浏览器测试的必要条件。
随着Selenium的测试越来越受欢迎,它不仅成为许多自动化策略的基础,而且还成为许多第三方工具(如CrossBrowserTesting)不可或缺的一部分。一旦您知道如何使用Selenium,您就可以使用这些云测试工具访问数千个浏览器并利用并行测试来缩短测试时间。
Cypress
那么Cypress与Selenium的不同之处是什么?它们的相同之处又是什么?
首先,据说Cypress比Selenium更容易入门,你需要做的就是下载安装包,接下里启动运行的时候,所有驱动程序和依赖项都会自动安装。另一方面,使用Selenium,您需要花费更多时间来完成所有操作。
Selenium的一个优点是它支持大多数主要的编程语言,包括Java,Perl PHP,Python,Ruby和C#,因此,如果您的团队已经使用其中一种语言,Cypress可能并不理想,因为它只支持JavaScript的。
此外,由于Cypress测试是使用Mocha和Chai编写的,因此语法与大多数Javascript用户理解的内容相呼应。这意味着如果您使用Javascript,开始使用Cypress将特别容易。但是,如果您对其他语言比较熟悉,那将会相当复杂。
Cypress几乎充当“免费增值”模式。与Selenium类似,除非您使用付费工具进行集成,否则您还x需要通过利用付费仪表板添加Cypress的核心功能,该仪表板包含一个允许您使用DOM快照轻松调试测试的测试运行器,并包含用于私有的视频存储项目。
Selenium和Cypress的架构方式也各不相同。Selenium由绑定或库和控制浏览器的WebDriver组成。这两个组件都是通过JSON网络工作。
或者,虽然Cypress用于UI测试,但它使用自己独特的DOM操作,并直接在浏览器中运行,无需网络通信。出于这个原因,Cypress经常被认为是一个开发人员友好的测试自动化工具,因为这通常会导致Selenium让它们感到郁闷。
在Electron应用程序之上使用不同的体系结构也使Cypress能够非常接近被测试的Web应用程序,以便我们可以执行在Selenium中无法做到的事情,例如对DOM API进行存根。
Selenium与Cypress之间的最大差距之一是,虽然Selenium针对不同的浏览器运行,但如前所述,Cypress仅支持Chrome。Selenium的浏览器支持通常是使用它的人不可或缺的一部分,使得Cypress在跨浏览器测试方面严重缺乏。
对于那些发现在多个浏览器上检查其网站而不仅仅是让他们的代码难以实现的软件团队而言,找到解决这一缺陷的方法可能对Cypress用户构成挑战。
Selenium VS Cypress
Cypress和Selenium具有类似的目的,可以通过两种不同的方式实现。
Selenium是一个库,但需要一个单元测试框架或一个运行器和一个断言库来构建它的功能。Cypress为运行自动化测试提供了一个强大而完整的框架,但通过将用户限制在特定的框架和语言中,可以从Selenium中获得一些自由。
如果您在构建测试自动化框架时不知道自己在做什么,Cypress可能是个不错的选择。
另外要记住的是,如果你看看Cypress是如何构建的,它主要是一个单元测试工具,最适合以Javascript为中心的开发团队。一旦您偏离这些细节并且您的团队决定尝试其他测试自动化方法,您会发现Selenium可以更好地适应这些成长的痛苦。
作为开发人员为开发人员开发的工具,它不再是Selenium的替代品,更是一种向开发人员介绍测试自动化的方法。
与大多数测试自动化实例一样,您选择的工具和您遵循的方法在很大程度上取决于您的团队决定什么以及哪些最适合您的组织。然而,Selenium最后一步的想法被误导了。