自动化框架Selenium与Cypress,哪家强?

发表于:2021-8-26 09:43

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:今日头条

分享:
  不可否认,Selenium是用于功能性测试Web应用测试领域的首选自动化框架之一。测试人员可以利用在线的Selenium Grid,在不同的浏览器和平台组合上,运行测试。不过,不知您是否已注意到,作为该领域的后起之秀--Cypress,正在以惊人的速度迎头赶上。Cypress也是一种用于测试Web应用的自动化开源测试框架。下面我将全方位地和您讨论Selenium和Cypress之间的各项差异,以便您在实际项目中,做出明智的选择。
  Selenium与Cypress的概览
  作为一种广为流行的自动化开源测试框架,Selenium主要被用于Web应用测试和跨浏览器测试的场景中。Selenium WebDriver是Selenium套件的关键组件之一。
  目前,Selenium支持诸如PythonRuby、C#、JavaScript、Java、PHP等多种编程语言。它支持的自动化框架包括:Behave(一种流行的BDD框架)、JUnit、SpecFlow、MSTest、TestNG、PyTest、PyUnit、Mocha JS、Jest、WebDriverIO、以及Protractor等。
  在使用Selenium开展自动化测试之前,开发人员需要在测试主机上下载并安装相应的浏览器驱动程序(如,Chrome的ChromeDriver、Firefox的GeckoDriver等),以及适当的Selenium语言驱动。
  开源的Cypress项目目前被托管在GitHub上,其最新的版本是5.5.0。开发人员能够通过Cypress进行单元测试,编写端到端测试,以及开展集成测试。
  与能够支持多种语言的Selenium WebDriver不同,Cypress仅能够支持JavaScript,不过它是精通JavaScript前端开发和自动化测试人员的首选。在对测试自动化框架的支持方面,Cypress仅支持Mocha JS框架。因此,我们可以认为Cypress的Web自动化测试用例,只在Mocha JS框架上,运用JavaScript编写而成的。
  下图是Selenium WebDriver和Cypress,在过去六个月的下载趋势图。可见Cypress的下载量正在慢慢赶上Selenium。
  下载比较图:
  来源--https://www.npmtrends.com/protractor-vs-selenium-webdriver
  Selenium简介
  Selenium项目始于2004年。2006年推出的Selenium IDE,是一款原生的记录和回放工具,仅能够使用在Firefox上。当然,最新的Selenium IDE已经可以被用在Chrome上了。它不但带有跨浏览器的支持,可用于并行测试,而且能够让自动化测试人员通过设置断点,来调试脚本。
  当前,Selenium的最新稳定版本是Selenium 3.141.59。不过,Selenium 4(仍处于Alpha阶段)中的Selenium WebDriver是W3C的建议版本。由于JSON Wire协议将不再被用于与Web浏览器进行通信,因此自动化测试将能够更加无缝地协同工作在不同的浏览器(如Chrome、Firefox等)之间。
  Selenium WebDriver架构
  由于Selenium WebDriver和相应的浏览器使用通用的协议(即W3C协议)进行通信,因此开发人员往往认为Selenium 4具有更稳定且统一的特点。
  Selenium的主要优点
  Selenium WebDriver能够被广泛地用于单元测试、E2E(端到端)测试、以及安全性测试。
  如前所述,Selenium支持多种流行的编程语言,并广泛用到了各种自动化测试框架。
  它既兼容最新的浏览器(如Chrome、Firefox、Edge等),又兼容Internet Explorer等过时的浏览器。
  经过常年的积累,Selenium拥有不断壮大的生态系统。
  可以将本地的Selenium测试用例,轻松地移植到基于云端的Selenium Grid处。
  Selenium能够与LambdaTest之类的云端测试工具开展并行测试。这不但可以减少测试时间,提高成本效益,还能够实现更大的测试覆盖率。
  Selenium的缺点
  对于新手来说,Selenium的学习曲线比较陡峭。当然,开发人员和自动化测试人员也可以通过向Selenium社区里的活跃用户学习,来快速入门。
  由于涉及到安装浏览器的驱动程序、Selenium Grid服务器、以及Selenium IDE,因此Selenium的设置过程较为耗时。
  尽管Selenium被广泛地用于UI测试,但它在测试图像方面存在着局限性。
  由于Selenium脚本是在浏览器外部被执行的(即,测试脚本和被测浏览器之间的接口是通过相应的“浏览器驱动程序”来实现的),因此它比Cypress框架执行的时间会更长。
  Cypress简介
  Cypress是为开发人员和质量保证工程师打造的下一代前端测试工具,可被用来测试浏览器中运行的所有内容。与Selenium运行在浏览器外部不同,Cypress能够与应用程序在同一循环中被执行。也就是说,节点服务器(Node server)的进程能够与Cypress相互通信,同步并执行任务。由于可以访问到网络层,因此Cypress能够即时读取和更改网络的流量。
  凭借着独特的DOM操作技术,Cypress的各项测试皆可访问到DOM中的Web元素、应用实例、计时器、以及服务worker等内容。
  由于对自动化过程具有完全的掌控力,因此Cypress可以修改进出浏览器的所有内容,以及那些可能会干扰Web浏览器自动化功能的代码。同时,因为Cypress被安装在本地,所以可以通过访问操作系统,来控制各项自动化任务。
  Cypress的主要优点
  由于测试用例直接运行在浏览器内部,因此在安装Cypress时无需任何依赖项,也无需额外的下载。
  由JavaScript构建的Cypress,可被开发人员和质量保证工程师用于前端开发。
  Cypress没有额外的IDE负担。在启动Cypress时,它会提示您选择IDE,以方便更改测试脚本。
  Cypress进程可实时地响应应用事件,并处理各种命令。同时,通过Cypress中的实时重载功能,用户可以实现在应用发生变更时,自动重载测试。
  由于Cypress对整个自动化过程(从上到下)具有严格的控制,因此它能够更好地了解浏览器内、外的变化,进而提供一致性的结果。
  由于运行在应用程序内,因此Cypress的测试代码可以访问到应用程序所触及的所有对象(不限于DOM元素)。由此,Cypress不再需要JSON Wire(或其他协议)进行通信。
  由于Cypress会自动等待DOM中元素的生成,因此用户无需在Cypress中添加隐式和显式的wait语句。在执行到下一条语句之前,Cypress也会等待命令和声明(https://on.cypress.io/introduction-to-cypress#Cypress-is-Not-Like-jQuery)。此外,Cypress也不会产生不属于DOM的陈旧元素。
  由于测试是在浏览器内部执行的,并且Cypress可以直观地获悉应用是如何进行同步的,它甚至知道某个元素对于动画效果处理的起、停时间(https://docs.cypress.io/guides/core-concepts/interacting-with-elements.html#Animations)。因此,与使用其他自动化测试工具相比,Cypress的测试具有更高的抗剥离性(flake resistant)。
  Cypress会捕获每个测试步骤的快照,以方便开发人员可以在测试脚本中的任何特定步骤上,检查其活动状态。
  Cypress可让用户直接修改DOM元素,例如:显示某些隐藏元素。
  由于是基于Electron App构建的,因此Cypress可以让开发人员或质量保证工程师,通过使用Stubbing DOM API,来更好地控制应用程序。
  Cypress中的Stubs [如cy.stub()] 可用于修改某些功能,并将其控制权委托给开发人员。Cypress中的Spies [如cy.spy()] 则让用户可以监控某个功能。Cypress中的时钟API [如cy.clock()]可用于控制应用程序的数据和时间。这些都有助于按需替换应用的原有行为,或避免在测试中出现缓慢情况。
  鉴于UI测试之类的活动可能并不需要执行分析,因此开发人员可以在应用执行测试之前,阻止Google Analytics之类的分析代码。
  Cypress允许开发人员像在单元测试中那样,人工创建不同的状态。此过程并不会拖慢整个测试进程。
  Cypress通过丰富而直观的用户界面和仪表板,向用户展示了测试被执行的每一个细节,包括:声明、网络请求、页面加载、stubs、以及监控等。
  默认情况下,它能够支持并行测试(或称并行化)。同时,它能够让用户按照浏览器、测试标签等条件,对测试进行分组。下图便是Cypress并行测试的简短过程:
  来源
  --https://docs.cypress.io/img/guides/parallelization/parallelization-overview.88fddb02.png
  Cypress还可以与流行的CI/CD工具相集成,其中包括:Jenkins、Bamboo、Circle CI、Bitbucket、GitLab等。
  Cypress的缺点
  Cypress仅适用于Chrome、Firefox、Edge、Brave和Electron浏览器。因此Cypress的跨浏览器测试方面比较受限。
  它仅支持使用JavaScript框架创建的测试用例。
  它不支持远程执行。
  Cypressk在其网站声称,Cypress将永远不会支持处理多个浏览器选项卡。
  默认情况下,Cypress并不支持多个浏览器的实例,也不能同时控制多个已打开的浏览器。对此,Cypress目前的解决方法(https://docs.cypress.io/guides/references/trade-offs.html#Multiple-browsers-open-at-the-same-time)是通过与其他后端进程(如,Selenium、Puppeteer等)同步,以驱动另一个已打开的浏览器的实例。
  目前,Cypress的测试仅限于用来确定具有相同来源的访问域,因此用户无法在同一测试中,访问到不同来源的两个域。当然,他们可以访问在不同测试中,不同来源的两或多个域。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号