不可否认,Selenium是用于功能性测试和Web应用测试领域的首选自动化框架之一。测试人员可以利用在线的Selenium Grid,在不同的浏览器和平台组合上,运行测试。不过,不知您是否已注意到,作为该领域的后起之秀--Cypress,正在以惊人的速度迎头赶上。Cypress也是一种用于测试Web应用的自动化开源测试框架。下面我将全方位地和您讨论Selenium和Cypress之间的各项差异,以便您在实际项目中,做出明智的选择。
创新互联公司基于分布式IDC数据中心构建的平台为众多户提供四川绵阳服务器托管 四川大带宽租用 成都机柜租用 成都服务器租用。
作为一种广为流行的自动化开源测试框架,Selenium主要被用于Web应用测试和跨浏览器测试的场景中。Selenium WebDriver是Selenium套件的关键组件之一。
目前,Selenium支持诸如Python、Ruby、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项目始于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和相应的浏览器使用通用的协议(即W3C协议)进行通信,因此开发人员往往认为Selenium 4具有更稳定且统一的特点。
Cypress是为开发人员和质量保证工程师打造的下一代前端测试工具,可被用来测试浏览器中运行的所有内容。与Selenium运行在浏览器外部不同,Cypress能够与应用程序在同一循环中被执行。也就是说,节点服务器(Node server)的进程能够与Cypress相互通信,同步并执行任务。由于可以访问到网络层,因此Cypress能够即时读取和更改网络的流量。
凭借着独特的DOM操作技术,Cypress的各项测试皆可访问到DOM中的Web元素、应用实例、计时器、以及服务worker等内容。
由于对自动化过程具有完全的掌控力,因此Cypress可以修改进出浏览器的所有内容,以及那些可能会干扰Web浏览器自动化功能的代码。同时,因为Cypress被安装在本地,所以可以通过访问操作系统,来控制各项自动化任务。
来源--https://docs.cypress.io/img/guides/parallelization/parallelization-overview.88fddb02.png
您可以选择使用本地Selenium Grid,或是在LambdaTest之类基于云端的Selenium Grid上,进行可扩展的跨浏览器测试。
下面,我们来讨论一个使用Selenium进行自动化测试的示例:
1. 在Windows 10上的Chrome 86.0中输入URL https://lambdatest.github.io/sample-todo-app/。
2. 选择前两个复选框。
3. 将“Happy Testing at LambdaTest”发送到id为sampletodotext的文本框处。
4. 单击添加按钮,并验证是否已添加了该文本。
5. 如果标题与预期的窗口标题不匹配,则需要声明。
下面是在LambdaTest的云端Selenium Grid上进行测试的Java代码:
由于Mocha框架运行在Node.js上,因此在安装Cypress之前,您需要安装依赖项软件包:Node JS和类似Visual Studio Code的IDE。
在安装好Node JS后,我们可以使用Node软件包管理器npm,从终端上安装Mocha和Cypress。
请在终端上运行以下命令,以安装Mocha:
- npm install mocha
请在终端上运行以下命令,以安装Cypress:
- npm install cypress
如上图绿色框所示,Cypress5.5.0已成功安装。接着,我们通过如下命令,来启动Cypress:
- npx cypress open
它将打开Cypress仪表板,以便运行各种测试:
Cypress在\integration\examples中提供了各种示例脚本:
若想快速检查测试,应将脚本放在同一个文件夹中。我们参照上述Selenium的测试案例,额外添加了wait usingcy.wait()方法,以及用于从DOM处获取所需的Web元素的cy.get()方法。
Cypress随附了丰富的API集,以及特定于浏览器的,诸如:执行按钮单击,设置视图等命令。
在以上代码中,cy.visit()用于打开特定的URL。它类似于driver.getSelenium。cy.get()方法则用于在DOM中定位特定的Web元素。一旦访问到了某个元素,就可以在该元素上执行适当的操作了。例如,我们找到元素--#sampletodotext,便可在文本框中输入“Happy Testing at LambdaTest”。cy.log()方法用于将消息打印到Cypress的控制台日志中。
在Cypress中,我们可以轻松地通过cy.contains()方法,来获取包含特定文本的DOM元素。
在安装了Cypress的主机上,有Chrome 86、Firefox 82、Edge 86和Electron 85,四种浏览器可供选择。
因此,为了执行上述测试,我们只需导航至Cypress仪表板中的测试标签,在首选浏览器(如Chrome 86)中单击测试文件(即Cypress_ToDoApp.js)即可。下图是正在进行的测试快照:
测试成功的快照如下图所示。可见,Cypress能够实时地显示执行状态,并提示代码中是否存在问题。
Cypress在如下方面大幅简化了开发人员和质量检查工程师的工作。
从Cypress的实现可以看出,Web元素没有使用标准的Web定位符(即XPath、Name等)来予以标识。那么,脚本将如何在DOM中定位元素呢?
Cypress在测试运行器中具有一项被称为“Selector Playground”的出色功能,可方便查找Web元素。您可以在待测试的URL旁,单击“Open Selector Playground”按钮,然后将鼠标悬停在需要提供详细信息的元素上。
通过点击该Web元素,其详细信息将会填充并显示在“cy.get”或“cy.contains”中(紧挨着显示测试文件名的区域)。
由于“Selector Playground”类似于Chrome(或Firefox)中的检查工具,因此用户无需额外学习该功能,即可修改并执行目标代码。
由于Cypress在运行测试时会捕获快照,因此它能够灵活地追溯到曾经执行过的某个时间点。具体而言,您只需将鼠标悬停在命令日志中的某个命令上,然后检查该步骤曾经的历史记录即可。Cypress默认最多可以保留50个测试值的快照和命令数据。
下面显示的是在LambdaTest的ToDo页面上第一个元素(li1)被单击后,执行“时间点跳转”的截图。
可见,当您想在测试脚本中检查某个特定操作的效果时,“时间点跳转”功能就能派上用场了。
如前所述,Cypress的测试是在浏览器内部执行的。由于被安装在本地,因此它可以获取Web浏览器内、外部发生的所有情况。这便是您可能不会察觉到Cypress测试中有任何网络延迟的主要原因。而且,由于Cypress使用的是与浏览器相同的DOM事件,因此其命令的执行速度要比Selenium快得多。
此外,Cypress使用Mocha的BDD语法,来实现单元测试和集成测试。Mocha JS本身提供了出色的异步支持。而Chai-jQuery、Sinn.JS和Sinon-Chai则为Mocha提供了编写带有错误消息的可读声明等功能。
下表是对上述讨论过的,有关Cypress和Selenium在不同方面的总结与比较。
可见,Cypress是一个新兴且不断迭代的工具,而Selenium是自动化测试领域的成熟工具。如果您精通JavaScript,并且正在寻找可以在本地主机上执行自动化测试的工具,那么请选用Cypress。同时如果您的Web应用是使用React、Angular等时下流行的JavaScript框架构建的,并且对于跨浏览器测试的要求不高,那么也请选用Cypress。
如果您希望测试代码能够在各种浏览器和操作系统上流畅运行,则请使用Selenium。此外,由于Selenium测试也可以在基于云的Selenium Grid上执行,因此您可以用到由LambdaTest平台提供的大规模并行测试的优势。
总之,Selenium和Cypress没有绝对的完胜者,但是它们之间的确有着众多差异。您可以从实际项目的测试覆盖率需求、团队的技能储备、以及长远发展的角度,通过试用,来选择最适合的一种工具。
文章名称:自动化框架Selenium与Cypress,哪家强?
网站路径:http://www.shufengxianlan.com/qtweb/news2/237902.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联