当前位置: 首页 > news >正文

Cypress 与 Selenium WebDriver

功能测试自动化工具的王座出现了新的争夺:Cypress.io。赛普拉斯速度快吗?是的。赛普拉斯是交互式的吗?是的。赛普拉斯可靠吗?你打赌。最重要的是……这很酷!

但 Cypress 是Selenium WebDriver的替代品吗?Selenium,当前的 Web 自动化和测试框架之王,是否会因担心自己的地位而畏缩,或者它是否对所谓的篡夺者仁慈地微笑,因为它完全知道,好吧,它只是一个孩子!

Cypress 比 Selenium WebDriver 更好吗?我经常被问到这个问题。坦率地说,“这个与那个”文章的最简单途径是尝试找出哪个是“最好的”。但我不会走那条路。相反,我将尝试解释 Cypress 与 Selenium WebDriver 有何不同。

将 PostgreSQL 数据库与 ANF 无缝集成

想象一下无需支付任何许可费即可获得最高性能。加入我们即将举办的研讨会,了解Instaclustr 如何让您比以往更轻松地部署数据库等!

通过描述 Cypress 和 Selenium WebDriver 之间的区别,您将能够了解 Cypress 的工作原理。这篇文章还将尝试解释为什么Cypress 采取了 Web 浏览器自动化的道路,这条道路与 WebDriver 所采取的道路截然不同。

Cypress 与 Selenium WebDriver 有何相似之处?它们都控制和自动化 Web 浏览器,从而使您能够编写模拟用户操作的功能测试,并验证结果是否正确。但这就是相似之处结束的地方,也是差异开始的地方。希望了解这两种测试工具之间的差异以及造成这种差异的原因能够帮助您选择使用哪种工具以及何时使用。

让我们开始探索这些差异。

适用于前端开发人员!
Selenium WebDriver 专为 Web 应用程序的端到端回归测试而构建。Selenium 前端测试框架主要由 QA 开发人员使用,但开发人员并不多。这是因为前端开发人员测试自己的代码的想法并不常见。

但前端开发人员的世界正在开始发生一场小革命。前端开发人员开始编写自己的测试。是的,他们正在迎接敏捷软件方法的挑战。他们明白,如果不编写自己的测试,敏捷开发就不可能发生。他们正在编写单元测试,但也在编写集成,是的,还有使用真实浏览器检查其前端的端到端功能测试,就像 QA 开发人员编写的自动化测试一样。“左移”运动有很多这样的趋势。

前端开发人员对端到端测试的需求与 QA 开发人员的需求不同。前端开发人员不需要部署应用程序(前端、后端和数据库系统)的临时环境。他们只需在本地运行前端部分就可以了,并且可以轻松地模拟后端 。

这一事实——Cypress 的目标受众是前端开发人员——是 Cypress 和 WebDriver 之间所有差异的核心。它们是针对不同用户的不同工具。

仅限 JavaScript!
前端 Web 开发人员只使用一种语言编写——JavaScript。它是浏览器可以执行的唯一语言,因此它们别无选择。这种限制有其缺点和优点,但事实是存在的——前端开发人员只有一种语言(尽管有像TypeScript 这样的变体)。

而且,由于 Cypress 是为前端开发人员设计的,因此 Cypress 测试只能用 JavaScript 编写。不支持其他语言。与 Selenium WebDriver 相比,Selenium WebDriver 的 API 与多种语言绑定,包括 Java、C#、Python、Ruby、R、Dart、Objective-C,当然还有 JavaScript。

所以记住——如果你想做 Cypress 测试,你就必须学习 JavaScript。这很酷,因为今天的 JavaScript 不是你祖父母的 JavaScript。它是一种现代的、强大的、简洁的语言,如今被广泛使用,并拥有世界上最大的开源包存储库(http://stackoverflow.com/questions/1744777/),这个代码存储库在几年前超过了曾经最大的存储库,即存储库。

仅限摩卡!
Cypress 不仅限制您可以编写的语言,还限制您使用的测试框架。Mocha 是您用来编写测试的测试框架(测试框架在 JavaScript 中的作用类似于JUnit 在 Java 中的作用,或NUnit 在 C# 中的作用)。您无法在其他 JavaScript 框架(例如Jest 或Tape)中编写测试。

另一方面,Selenium WebDriver 不会将测试框架强加给您。此外,您甚至不必使用测试框架。您可以编写一个不是测试的常规程序,一个仅驱动浏览器的程序。许多项目都以这种方式使用 WebDriver,例如抓取网页和收集信息。

但Cypress很早就决定,它专门负责编写前端测试的任务,并且只能在测试框架内使用,而测试框架必须是Mocha。

cy.visit 将使浏览器导航到给定的 url。

cy.get 将返回对相关元素的引用,您可以在该元素上键入、单击或检查有关使用 contains 和其他断言的断言。

正如您所看到的,从表面上看,它与 Selenium Webdriver 惊人地相似,尽管更简单,而且功能更强大。

仅限 Chrome!
Cypress 测试运行程序仅适用于 Chrome。它不支持 Firefox、Safari、Edge 或 IE。这可能会让习惯了 WebDriver对所有这些浏览器的惊人支持的 QA 开发人员感到震惊。但是,是的,Cypress 只是 Chrome。有一个针对跨浏览器支持的问题,但该问题已经存在了近一年了。赛普拉斯的优先事项似乎在其他地方。

为什么前端开发人员只想在 Chrome 中运行测试?我相信这个问题有多种答案。首先,现在 Chrome、Firefox、Safari 和 Edge 之间的差异很小,而且对于大多数应用程序来说,差异越来越小。因此,在开发中进行测试时,仅在 Chrome 中进行检查可能就足够了。

其次,在所有浏览器上运行所有测试需要时间,正如我们上面所说,前端开发人员不想等待他们的测试。

第三,许多公司都有 QA 开发人员在所有浏览器上运行端到端测试,因此他们可以接受偶尔出现的非常罕见的错误并被 QA 团队发现。那些没有进行广泛的跨浏览器测试的公司呢?然后,他们就可以接受这些罕见的错误时不时地溜到用户手中。

第四,前端开发人员确实关心,并希望 Cypress 支持更多浏览器,但考虑到上述原因,这并不是他们的优先事项。

它在浏览器中运行!
除了前端开发人员习惯使用 JavaScript 之外,还有另一个更技术性的原因:仅支持 JavaScript。

您在 Cypress 测试脚本中编写的代码不会像在 WebDriver 中那样在浏览器外部运行。它运行浏览器。它正在执行您的测试代码。事实上,它正在执行您正在测试的应用程序代码的测试代码!

当您运行测试时,首先,Cypress 将准备您的代码以在浏览器中运行(从技术上讲,它将使用 webpack 将代码中的所有模块捆绑到一个 JS 文件中)。准备好后,它将运行 Chrome,并将您的测试代码注入到空白页面中。然后它将在浏览器中运行该测试代码。

该测试代码首先导航到应用程序页面(使用 `cy.navigate(' http://localhost:8080  ')`),该页面在 . Cypress 将使 iframe 导航到该页面,但您的代码正在浏览器中运行,并且(有点神奇地)可以访问与该 iframe 相同的内容,因此所有命令(例如“单击”或“类型”)都发生在内部浏览器,使用常规 .

为了进行比较,让我们回顾一下 Selenium WebDriver 架构以及这对于 Selenium 测试的运行方式意味着什么。看一下下图。

使用 Selenium WebDriver,您有三个流程:

硒网络驱动程序
浏览器驱动程序,例如ChromeDriver、GeckoDriver(适用于 Firefox)、EdgeDriver、SafariDriver等。
浏览器本身
这些进程之间的所有通信意味着 Selenium 测试需要很长时间才能运行。这将我们引向下一点:

它很快!
这种浏览器内执行是基于赛普拉斯测试的速度。使用 Cypress,您只有一个进程:浏览器本身。使用 Cypress,您的测试代码与应用程序代码一起运行。

因此,自动化命令(例如,单击按钮)不会像 WebDriver 那样通过进程外通信将命令发送到浏览器。相反,Cypress 使用DOM 事件向按钮发送单击命令。快得多。

虽然 WebDriver 的进程外自动化涉及异步通信,但 Cypress 的自动化命令大多是同步的且位于内存中。这会产生极快的测试。

我相信正是这种速度才是前端开发者迷恋Cypress的主要原因。WebDriver,至少在感知方面,没有给他们提供他们需要的速度。前端开发人员希望一直运行他们的测试,并且无法承受需要运行数十分钟的套件的奢侈。他们想要运行他们的套件,并且需要它在一两分钟内运行,而不是更长时间。

这种速度差异真的像赛普拉斯文档声称的那样很大吗?从我公认的小实验来看,是的,但我不相信这种差异值得 WebDriver 所具有的其他好处。亲自尝试一下小样本测试,然后亲自看看!

它有内置的服务器模拟!
但赛普拉斯被认为更快还有另一个原因。让我们提醒自己,Cypress 是为前端开发人员设计的。我们还要提醒自己,前端开发人员有时不使用真正的后端,而是模拟发送到服务器的XML HttpRequest 。无论您使用的是 Cypress 还是 Selenium WebDriver,这都可以实现极快的测试,只需几秒。

Cypress 明白这一点,并且拥有用于模拟服务器响应的内置设施,这些设施对于其目标受众(前端开发人员)至关重要。Selenium WebDriver 没有这方面的设施,为了模拟服务器响应,WebDriver 测试需要运行一个返回正确响应的模拟服务器。虽然可能,但它是一种较慢且不太方便的选择:用于模拟的快速且内存中的设施总是优于缓慢的进程外设施。

这不仅仅是执行速度。就编写测试的速度而言,模拟服务器的内置工具的便利性怎么强调都不为过。事实上,每个测试都明确地描述了模拟响应,这比模拟相同响应的单独服务器程序更容易编码(和理解!)。

相关文章:

Cypress 与 Selenium WebDriver

功能测试自动化工具的王座出现了新的争夺:Cypress.io。赛普拉斯速度快吗?是的。赛普拉斯是交互式的吗?是的。赛普拉斯可靠吗?你打赌。最重要的是……这很酷! 但 Cypress 是Selenium WebDriver的替代品吗?S…...

Leetcode 第 365 场周赛题解

Leetcode 第 365 场周赛题解 Leetcode 第 365 场周赛题解题目1:2873. 有序三元组中的最大值 I思路代码复杂度分析 题目2:2874. 有序三元组中的最大值 II思路代码复杂度分析思路2 题目3:2875. 无限数组的最短子数组思路代码复杂度分析 题目4&a…...

什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别?软件测试等相关概念入门篇

1、什么是软件测试? 常见理解: 软件测试就是找BUG,发现缺陷 真正理解: 软件测试就是验证软件产品特性是否满足用户的需求 测试定义: 测试人员验证软件是否符合需求的这个过程就是测试 2、为什么要有测试 标准情况下&a…...

VI/VIM的使用

1、vi的基本概念   基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下: 1) 命令行模…...

【虹科干货】Redis Enterprise vs ElastiCache——如何选择缓存解决方案?

使用Redis 或 Amazon ElastiCache 来作为缓存加速已经是业界主流的解决方案,二者各有什么优势?又有哪些区别呢? 文况速览: - Redis 是什么? - Redis Enterprise 是什么? - Amazon ElastiCache 是什么&…...

2.2.2 交换机间相同vlan的通信

实验2.2.2 交换机间相同vlan的通信 一、任务描述二、任务分析三、实验拓扑四、具体要求五、任务实施1.设置交换机的名称,创建VLAN,配置access并分配接口。对两台交换机进行相同的VLAN划分,下面是SWA配置过程,同理可实现SWB的配置。…...

C的魅力在于指针

原有的adrv9025 代理框架很好用,在其原有的平台上做改进...

【Linux常用命令14】Linux系统监控常用命令

proc文件系统 /proc/cmdline 加载kernel时的相关指令与参数 /proc/cpuinfo CPU相关信息,包含频率、类型与运算功能 /proc/devices 记录了系统各个主要设备的主设备号码 /proc/filesystems 记录系统加载的文件系统 /proc/loadavg 平均负载值 top看到就是这个 /proc/…...

Python Watchdog:高效的文件系统监控

1. 写在前面 在软件开发中,有时候需要通过 Python 去监听指定区域文件或目录的创建、修改,或者删除,从而引发特定的事件处理。本篇博客为你介绍第三方模块 Watchdog 实现对文件事件的监控。 公众号: 滑翔的纸飞机 2. Watchdog 2…...

C++中多态的原理【精华】

虚函数表 通过一道题我们先感受一下编译器针对多态的处理 #include <iostream> using namespace std;class Base { public:virtual void Func1(){cout << "Func1()" << endl;} private:int _b 1;char _c };int main() {cout << sizeof(B…...

亿赛通电子文档安全管理系统 Update.jsp SQL注入

目录 0x01 漏洞介绍 0x02 影响产品 0x03 语法特征 0x04 漏洞复现页面 0x05 漏洞修复建议 0x01 漏洞介绍 亿赛通电子文档安全管理系统是国内最早基于文件过滤驱动技术的文档加解密产品之一&#xff0c;保护范围涵盖终端电脑&#xff08;Windows、Mac、Linux系统平台&#…...

神经网络中的反向传播:综合指南

塔曼纳 一、说明 反向传播是人工神经网络 &#xff08;ANN&#xff09; 中用于训练深度学习模型的流行算法。它是一种监督学习技术&#xff0c;用于调整网络中神经元的权重&#xff0c;以最小化预测输出和实际输出之间的误差。 在神经网络中&#xff0c;反向传播是计算损失函数…...

协同创新、奔赴未来——“华为云杯”2023人工智能创新应用大赛华丽谢幕

9月27日&#xff0c;在苏州工业园区管理委员会、华为云计算技术有限公司的指导下&#xff0c;由SISPARK&#xff08;苏州国际科技园&#xff09;、华为&#xff08;苏州&#xff09;人工智能创新中心联合主办&#xff0c;东北大学工业智能与系统优化国家级前沿科学中心、浙江大…...

介绍Node.js中fs模块 代码和注释。

Node.js中的fs模块提供了一些用于文件系统操作的API&#xff0c;包括文件读写、目录操作等。 读取文件 使用fs.readFile()方法可以读取文件内容。该方法的第一个参数是文件路径&#xff0c;第二个参数是可选的选项对象&#xff0c;第三个参数是回调函数。回调函数的第一个参数…...

【QT 读取JSON】 深入浅出 使用QT内置的QJson模块解析Json文件 匠心之作

目录 0 引言1 Json数据分析2 解析Json数据 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;QT专栏&#x1f4a5; 标题&#xff1a;【QT 读取JSON】 使用QT内置的QJson模块解析Json文件❣️ 寄语&#xff1a;人生的意义或许可以发挥自己全部的潜力&…...

初识javaweb2 tomcat

如果是tomcat启动成功却无法通过localhost:8080进入页面&#xff0c;先去查看是否是端口号被占用&#xff0c; 再用命令中断占用的进程&#xff0c;如果简单的命令窗口无法中断&#xff0c;切换到管理员身份运行即可 netstat -ano|findstr "8080" 查看那个进程占用了…...

使用OPENROWSET :在一个数据库中查询另一个数据库的数据

当你需要在一个数据库中查询另一个数据库的数据时&#xff0c;SQL Server提供了多种方法来实现这一目标。一种常见的方法是使用链接服务器&#xff08;Linked Server&#xff09;&#xff0c;另一种方法是使用 OPENROWSET 函数。本篇博客将重点介绍如何使用 OPENROWSET 函数在当…...

基于STM32设计的智慧农业管理系统(ESP8266+腾讯云微信小程序)

一、项目介绍 基于STM32设计的智慧农业控制系统(ESP8266+腾讯云微信小程序) 1.1 项目背景 随着人们对食品安全和生态环境的日益重视,智慧农业逐渐成为一个备受关注的领域。智能化管理可以提高农业生产效率,减少资源浪费,改善生态环境。因此,基于物联网技术的智慧农业管理系…...

Flutter视图原理之三棵树的建立过程

目录 三棵树的关系树的构建过程1.updateChild函数&#xff08;element的复用&#xff09;2.inflateWidget函数3.mount函数3.1 componentElement的实现3.2 RenderObjectElement的实现3.2.1 attachRenderObject函数 4.performRebuild函数 总结三棵树创建流程 三棵树的关系 Flutt…...

详细解析冒泡排序,JS如何基本实现的。

目录 冒泡排序是什么: 使用冒泡排序是为了什么: DEMO示例: 冒泡排序是什么: 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的比较排序算法&#xff0c;它通过多次遍历待排序的元素&#xff0c;比较相邻元素的大小&#xff0c;如果它们的顺序不正确就交换它们&…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...