Web自动化测试工具哪家强? Selenium与Cypress的比较

news2024/9/22 9:55:58

随着互联网技术在全球范围内的迅速发展,各种基于浏览器的Web应用程序也已成为当今软件开发的主流。围绕如何更好、更有效的测试Web应用的技术也是层出不穷。Cypress和Selenium是目前广泛使用,且很有代表性的两种Web自动化测试工具。互联网上对Cypress和Selenium的讨论非常多。各大论坛上,针对谁是最佳Web自动化测试工具的争论也是此起彼伏。下面我截取了一些典型的讨论供大家参考。

“Is Cypress better than Selenium WebDriver? I get asked this a lot. Frankly, the easiest path of a ‘this vs that’ talk is to try and find out which is ‘best’.
But I will not take that path. Instead, I will try and explain how Cypress is different from Selenium WebDriver.”
                                — Gil Tayar, Sr. Architect @ Applitools

Is Cypress fast? Yes. Is Cypress interactive? Yep. Is Cypress reliable? You bet. And best of all… it’s cool!

But is Cypress an alternative to Selenium WebDriver?

Cypress and Selenium are both automation frameworks for web app testing. Selenium is an established solution, while Cypress is emerging. Cypress supports JavaScript, while Selenium supports many languages. Cypress supports end-to-end testing. Selenium does too, but also offers security and unit testing.

Web技术已经进化了,web的测试技术最终还是跟上了脚步,是谁呢?

对在浏览器中运行的任何东西进行快速、简单和可靠的测试,当然是cypress

本文将以我在实际工作中的切身体会例举出Cypress与Selenium的各自优缺点,尽可能客观的进行分析比较。希望我的分析总结能对正纠结于选择最适合自己产品的Web自动化测试工具的朋友提供一些帮助。

~ 工作原理 ~

Web自动化测试就是站在用户的角度测试Web应用程序业务逻辑的正确性。测试的重点是围绕Web服务暴露的接口检查其数据的正确性。这个过程是将Web应用程序当做黑盒,通过自动化测试技术提高测试执行的效率,降低人工回归的成本。这种端到端的测试离不开定位页面元素、获取页面元素信息以及操作页面元素三个核心要素。

Selenium和Cypress都是比较好的端到端自动化测试工具。但我们在各自的官方网站上不难看出,Selenium(https://www.selenium.dev/)与Cypress(https://www.cypress.io/)在工作原理上有着本质的区别。

Selenium

Selenium的核心是webdriver,如图 1所示。webdriver通过向浏览器发送指令来控制浏览器里加载的页面元素,进而完成和用户一样的页面操作。

图片

图 1  Selenium工作原理

Cypress

Cypress 是在 Mocha API (https://mochajs.org/)的基础上开发的一套开箱即用的端到端测试框架。如图 2所示,Cypress 和 Webdriver的工作方式完全相反,它与应用程序在相同的生命周期里执行。具体来讲,在测试开始并首次加载Cypress时,Cypress Web内部应用程序先把自己托管到本地的一个随机端口上,然后使用webpack将测试代码中的所有模块绑定到同一个JavaScript文件中,启动指定的浏览器,并将测试代码注入到空白页面里,同时运行测试代码。当识别出测试脚本中发出的第一个cy.visit()命令后,Cypress将会更改其本地的URL以匹配远端应用程序的地址,使得测试代码和应用程序可以在一个生命周期中运行。

图片

图 2 Cypress工作原理

~ 优缺点对比 ~

任何自动化测试工具都有其独到的特点,Selenium和Cypress亦是如此。下面我们列举出Selenium和Cypress各自的优缺点,方便我们直观的进行比较。

现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:110685036

Selenium支持更多语言和浏览器

由于webdriver提供了几乎所有浏览器的版本,因此,Selenium能在各种浏览器上运行自动化测试脚本。而Cypress目前还不支持所有浏览器。以下是Selenium与Cypress各自支持浏览器的列表对比。

图片

Selenium与Cypress都支持诸如Windows、Mac以及Linux/Unix等操作系统。

Selenium支持多更多编程语言,而Cypress只支持JavaScript。以下是Selenium与Cypress目前支持的编程语言列表对比。

图片

Selenium更易出现稳定性的问题

由于Selenium的核心是webdriver,而不同版本的浏览器又需要用对应版本的webdriver来驱动。因此,用selenium实现的自动化测试用例往往需要在配置文件中指定webdriver的版本号,如下代码所示。这就给测试用例的稳定性带来了一定的隐患。我们经常发现,有些浏览器由于自动升级,如果对应的webdriver没有得到及时的更新,导致测试用例突然出现大面积的运行失败。这时,我们不得不更新配置文件中的webdriver版本号来升级测试环境。然后,再重新调试测试用例确保它们都能在新版本的浏览器中稳定的运行。周而复始,这种维护工作量可想而知。

图片

Cypress由于在运行测试用例时,使用webpack将测试代码中的所有模块绑定到同一个JavaScript文件中,同时将该JavaScript文件注入到Cypress启动浏览器的空白页面里,并在其中运行测试代码。这就起到了Cypress测试用例能与应用程序在相同的生命周期里执行的效果。它不需要Selenium webdriver的支持,更没有webdriver版本兼容的问题。因此,基于Cypress的测试用例更稳定。从下面的代码示例能看出,基于Cypress的测试用例比较简洁,且完全没有必要专门指定测试浏览器等环境的版本信息。

图片

Cypress的运行速度更快

Cypress 测试代码和应用程序均运行在由 Cypress 全权控制的浏览器中。而且它们运行在同一个Domain 下的不同 iframe 中,所以 Cypress 的测试代码可以直接操作 DOM、Window Objects、Local Storages而无须通过网络访问。

反观Selenium,由于它所有的操作都需要发指令给webdriver,并通过webdriver启动对应的浏览器,然后在其中运行。这样的设计架构会带来运行同一操作的测试代码,在Selenium框架下会比在Cypress框架下耗费更多的时间。

Cypress提供自动等待的功能

用Selenium编写自动化测试用例的过程中,相信大家会有如下深刻的体会:

  • 你看到页面跳转到你需要的位置了。

  • 你也看到你想要的页面元素呈现在浏览器中了。

  • 但是,Selenium还是报告错误说,没找到页面元素或该页面元素不可用。如以下错误所示。

图片

解决以上的问题有时候就是多加一些等待时间,让页面元素充分加载到浏览器中,这样Selenium才能找到你想要的页面元素。

图片

Cypress完美的解决了上述痛点,它能自动等待页面元素至可靠操作状态时才执行命令或断言。我们不难用下面的示例代码体会到,有了自动等待页面元素的功能,开发人员在开发和调试测试用例时,就可以完全忽略时序问题,把工作重心放在产品功能和操作上。

图片

不同页面间的代码共享

我们知道有些单页面应用(SPA)中的页面元素,比如搜索框、导航菜单等,是在很多页面中复用的。这就使得我们在设计自动化测试脚本的时候需要有全局观,能事先把这些元素及其对应的操作封装成公共的函数,方便在不同页面间共享。

在Selenium中,一个比较普遍的方法就是基于页面模块来设计。我们常常称这种方法为面向页面的设计模式(Page Object Model)。以下代码示例展示了如何按照页面来封装对象。这种设计方法的最大好处就是可以在相同页面中或者不同页面间共享代码,使得对页面元素的操作如同调用普通函数一样简单。

图片

然而,在Cypress中却并没有类似的概念,取而代之的是方法和命令。具体来讲,在同一个测试脚本中,开发人员可以把一些公共的操作(例如获取导航栏、获取搜索栏等)封装成函数。也可以把一些页面间公共的操作(例如登录系统等)放到命令文件里。这就起到了测试用例间共享代码的作用。命令文件可以在工程目录下的cypress/support/commands.js位置找到,命令示例如下所示。有关Cypress命令的详细介绍请参见其官方网站https://docs.cypress.io/api/cypress-api/custom-commands.html#Syntax。

图片

运行环境搭建

Selenium的运行环境搭建本身不太复杂,但它相对与Cypress还是要稍微复杂一些。我们从图 3不难看出这一点。

图片

图3  有了Cypress一切看似简单

结合我的实际经验,通过下表我例举了一些重要步骤做具体对比。需要注意的是,有关Selenium的运行环境搭建步骤是在Java开发语言的前提下展开的。

图片

~  各自独有的特性 ~

Selenium和Cypress都有各自独有的一些特性。由于篇幅原因,本文只列出一些典型的特性供大家参考。

Selenium IDE

Selenium提供了可以运行在Chrome和Firefox浏览器上的插件,如图 4所示。该浏览器插件就是Selenium IDE。它提供的录制、回放等功能,特别适合初次接触Selenium的用户。用户在不知如何编写测试代码时,可以用Selenium IDE直接把页面上的操作录制下来并产生对应的代码供参考。

图片

图4  Selenium IDE界面截图

Cypress提供了更多的API

由于Cypress相较于Selenium独特的框架设计,使得Cypress在运行自动化测试用例的过程中能与Node.js频繁的交换、同步彼此信息。因此,Cypress可以访问并操作系统网络层和文件系统。从而使得截取、录制屏幕等操作变得非常容易。而且,Cypress的运行速度相较于Selenium更快。翻看Cypress官方文档,你会发现Cypress不光可以定位、操作页面元素,它还可以直接发送HTTP消息给待测web应用程序并将其响应无缝的展现在浏览器里面。总之,Cypress可以自上而下的控制自动化测试的整个进程。有关Cypress API的更多描述信息请参考其官方文档https://docs.cypress.io/api/api/table-of-contents.html。

~  总结 ~

Selenium和Cypress都是目前在GitHub上比较活跃的开源项目。图 5展示了Selenium从2004年项目之初到今天一直有源源不断的代码提交。而Cypress是在2014年才开始的,是比较新的项目,如图 6所示。但它在6年的发展过程中,提交了大量的代码,功能不断完善。Cypress的代码峰值提交量甚至超过了Selenium,可见Cypress的发展速度的确非常迅猛。这也从侧面证明了Cypress虽然是比较新的项目,但它提供的功能得到了业内越来越多同行的认可,成为了Web自动化测试工具的新星。

图片

图5  Selenium代码提交数量 


 

图片

图 6  Cypress代码提交数量

Selenium作为老牌Web自动化测试工具,支持更多的编程语言和浏览器,像python易学、会Java的人多,得到了业内人士的广泛使用。Selenium IDE提供的录制、回放等功能拉低了Selenium的上手门槛。而Cypress独特的框架设计使得Cypress在运行自动化测试用例的过程中可以自上而下的控制自动化测试的全进程,且运行速度更快、更稳定。

参考文献

  •  Selenium官方网站:https://www.selenium.dev/

  • Selenium官方文档:https://www.selenium.dev/documentation/en/

  •  Cypress官方网站:https://www.cypress.io/

  •  Cypress官方文档:https://docs.cypress.io/guides/overview/why-cypress.html

  •  前端自动化测试框架Cypress入门:https://zhuanlan.zhihu.com/p/149256830

  • Cypress 框架的详细介绍:

    https://cloud.tencent.com/developer/article/1641053


今天的分享就到此结束了,大家还有什么不懂的可以评论区下提问哈,如果我的文章对你有所帮助的话,可以点赞三联支持一下哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1080295.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

知识增强语言模型提示 零样本知识图谱问答10.8+10.11

知识增强语言模型提示 零样本知识图谱问答 摘要介绍相关工作方法零样本QA的LM提示知识增强的LM提示与知识问题相关的知识检索 实验设置数据集大型语言模型基线模型和KAPIN评估指标实现细节 实验结果和分析结论 摘要 大型语言模型(LLM)能够执行 零样本cl…

网络安全概述——常见网络攻击与网络病毒、密码体制、安全协议等

目录 1、信息安全五大要素 2、常见的网络攻击类型 2-1)网络攻击的分类: 2-2)常见网络攻击: DOS 攻击的分类: 2-3)常见网络攻击的防范措施 3、计算机病毒 3-1)常见病毒的前缀及其简要描述…

Vuex的简介以及入门案例

🏅我是默,一个在CSDN分享笔记的博主。📚📚 🌟在这里,我要推荐给大家我的专栏《Vue》。🎯🎯 🚀无论你是编程小白,还是有一定基础的程序员,这个专栏…

测评6大最常见的免费开源报表

最近发现几款不错的开源报表,现在给大家分享一下,希望能带来帮助! 1、项目名称:积木报表 项目简介:积木报表,免费的企业级 WEB 报表工具。专注于 “专业、 易用 、优质” 的报表设计器和大屏设计器。支持打…

接口自动化测试详解(文档)

phpunit 接口自动化测试系列 Post接口自动化测试用例 Post方式的接口是上传接口,需要对接口头部进行封装,所以没有办法在浏览器下直接调用,但是可以用Curl命令的-d参数传递接口需要的参数。当然我们还以众筹网的登录接口为例,讲…

大数据之Hudi数据湖_版本兼容与Maven安装配置_解决Hudi与Hadoop3.0的兼容问题_编译hudi源码---大数据之Hudi数据湖工作笔记0002

然后我们来看一下,hudi我们这次安装的时候,各个组件的版本信息 这个hudi对各个版本的支持还是很多的,需要在安装的时候查一下 具体的 可以这样查一下 去看一下具体的hudi对spark的支持是多少,对flink的支持的版本是多少等等可以很容易查到 然后hudi

NSSCTF[SWPUCTF 2021 新生赛]hardrce(无字母RCE)

代码审计&#xff1a; 使用get方式请求给wllm传参 使用preg_match函数正则匹配过滤掉了一些符号 \t,\r,\n,\,\[,\^,\],\",\-,\$,\*,\?,\<,\>,\,\ 以及 [a-zA-Z] 即所有的大小写字母 如果传入内容满足这些条件则会执行eval函数 URL编码取反绕过正则实现RCE&…

【网络安全】「漏洞原理」(一)SQL 注入漏洞之概念介绍

前言 严正声明&#xff1a;本博文所讨论的技术仅用于研究学习&#xff0c;旨在增强读者的信息安全意识&#xff0c;提高信息安全防护技能&#xff0c;严禁用于非法活动。任何个人、团体、组织不得用于非法目的&#xff0c;违法犯罪必将受到法律的严厉制裁。 【点击此处即可获…

聊聊MySql索引的类型以及失效场景

文章目录 概念常见的索引1.B树索引2.哈希索引3.全文索引4.空间索引5.聚集索引 如何设计合理&#xff1f;1.明确索引需求2.选择索引列3.选择索引类型4.考虑索引维护开销5.设计联合索引6.删除不必要索引7.关注索引统计信息8.测试查询效果 常见不生效场景1.全表扫描2.索引列计算3.…

容器轻松上阵,优雅下线才是胜负之道

概述 优雅关闭&#xff1a; 在关闭前&#xff0c;执行正常的关闭过程&#xff0c;释放连接和资源&#xff0c;如我们操作系统执行shutdown。 目前业务系统组件众多&#xff0c;互相之间调用关系也比较复杂&#xff0c;一个组件的下线、关闭会涉及到多个组件。 对于任何一个线…

(2022|NIPS,CogLM,分层,LoPAR,icetk)CogView2:通过分层 Transformer 更快更好地文本到图像生成

CogView2: Faster and Better Text-to-Image Generation via Hierarchical Transformers 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.…

基于SpringBoot+Vue的教师人事档案管理系统

1 简介 基于SpringBootVue的教师人事档案管理系统&#xff0c;教师人事档案管理系统利用信息的合理管理&#xff0c;动态的、高效的、安全的实现了教师的各种需求&#xff0c;改变了传统的网上查看方式&#xff0c;使教师可以足不出户的在线查看最适合自己个人档案、奖惩信息、…

百度一面:谈谈 @Transactional 的原理和坑

百度一面&#xff1a;谈谈 Transactional 的原理和坑 这篇文章&#xff0c;会先讲述 Transactional 的 4 种不生效的 Case&#xff0c;然后再通过源码解读&#xff0c;分析 Transactional 的执行原理&#xff0c;以及部分 Case 不生效的真正原因。 项目准备 下面是 DB 数据和…

js的BoM事件(二)

js的BoM事件&#xff08;二&#xff09;&#xff0c;上一篇的补充 一.alert,confirm二.prompt三.open四.close 一.alert,confirm 实例&#xff1a; alert(hi); confirm(message);二.prompt <body><button ></button><script>var btndocument.querySe…

dbeaver 插入别名设置禁用

1&#xff0c;前提 最近换了一个数据库连接工具&#xff0c;初次使用&#xff0c;非常别扭。 2&#xff0c;问题 首先遇到的第一个问题是 每次输入from table时&#xff0c;后面就会自动添加一个表别名 tt&#xff0c;然后语句就变成这样 from table tt &#xff0c;所以每次…

全面深入了解自动化测试

一、自动化测试 在软件测试中&#xff0c;自动化测试指的是使用独立于待测软件的其他软件来自动执行测试、比较实际结果与预期并生成测试报告这一过程。在测试流程已经确定后&#xff0c;测试自动化可以自动执行的一些重复但必要测试工作。也可以完成手动测试几乎不可能完成的…

飞凌嵌入式受邀参加「NXP创新技术论坛」

2023年10月10日&#xff0c;「NXP创新技术论坛」在深圳湾万丽酒店举行&#xff0c;飞凌嵌入式作为NXP金牌合作伙伴受邀参加此次论坛&#xff0c;与众多智能工业行业的伙伴深入交流市场趋势与行业洞察&#xff0c;共同促进未来市场的发展。 本次论坛&#xff0c;飞凌嵌入式展示了…

GaussDB向量数据库为盘古大模型再添助力

在今年7月7日的华为开发者大会2023(Cloud)期间,华为云盘古大模型3.0正式发布。目前盘古大模型已在政务、金融、制造、医药研发、气象等诸多行业发挥巨大价值。此次华为云发布的GaussDB向量数据库,具备一站式部署、全栈自主创新优势,不仅如此,它的ANN算法在行业排名第一,…

龙讯旷腾:如何建立基于第一性原理的正向研发模式,原子级计算伴随的时间和空间尺度增长将带来的变革

2023年10月8-11日&#xff0c;由中国材料研究学会主办的第四届中国新材料产业发展大会在浙江温州隆重举行。来自全国各地的6000余名新材料专家、企业家、投资家、当地高等院校和企事业单位的代表以及51位两院院士出席了本次大会。龙讯旷腾总经理吕海峰特邀做“先进材料数字化研…

点击、拖曳,15分钟搞定BI零售数据分析

早几年做数据分析还很依赖IT&#xff0c;过程复杂、耗时长、灵活性差&#xff0c;但这几年随着BI智能数据分析技术的成长&#xff0c;零售数据分析发生了翻天覆地的变化&#xff0c;其中最直观的一点就是&#xff1a;点击、拖曳&#xff0c;15分钟内就能搞定BI零售数据分析。 …