Cypress-03 Key differences(主要区别)

  • What makes Cypress unique
  • How its architecture differs from Selenium
  • New testing approaches not possible before

官方文档:https://docs.cypress.io/guides/overview/key-differences.html#Architecture

Architecture(架构)

大多数测试工具(如Selenium)都是通过在浏览器外运行和跨网络执行远程命令来操作的。柏树正好相反。Cypress与您的应用程序在相同的运行循环中执行。Cypress的背后是一个Node.js服务器进程。Cypress和Node.js进程不断地相互通信、同步和执行任务。访问这两个部分(前端和后端)使我们能够实时响应应用程序的事件,同时在浏览器之外处理任务需要更高的权限。

Cypress还在网络层运行,实时读取和修改web流量。这使得Cypress不仅可以修改进出浏览器的所有内容,还可以修改可能影响其自动浏览器功能的代码

Cypress最终从上到下控制整个自动化过程,这使得它能够理解浏览器内外发生的所有事情。这意味着Cypress能够提供比任何其他测试工具更一致的结果。

因为Cypress是安装在本地机器上的,所以它还可以进入操作系统执行自动化任务。这使得执行截屏、录制视频、一般文件系统操作和网络操作等任务成为可能。

Native access(本地访问)

因为Cypress在您的应用程序中运行,这意味着它对每个对象都具有本地访问权。无论是窗口、文档、DOM元素、应用程序实例、函数、计时器、服务工作者,还是其他任何东西,您都可以在Cypress测试中访问它。没有对象序列化,没有网络协议——您可以访问所有东西。您的测试代码可以访问应用程序代码可以访问的所有相同对象。

New kind of testing(新型的)

拥有对应用程序、网络流量和对每个主机对象的本机访问的最终控制权,可以开启一种以前从未有过的测试新方法。取而代之的不是锁定你的应用程序和不可能轻易的控制你的应用程序- Cypress允许您更改应用程序任何方面。您可以像在单元测试中一样,人为地创建这些状态,而不是缓慢而昂贵的测试,例如为给定的情况创建所需的状态。例如,你可以:

Stub浏览器或应用程序的函数,并强制它们按照测试用例中的需要进行操作。

公开数据存储(如在Redux中),这样您就可以通过编程直接从测试代码更改应用程序的状态。

通过强制服务器发送空响应来测试“空视图”之类的边缘情况。

测试应用程序如何响应服务器上的错误,方法是将响应状态代码修改为500,以便计时器或轮询自动启动,而不必在测试中等待所需的时间。

添加您自己的事件侦听器来响应您的应用程序。您可以更新您的应用程序代码,使其在Cypress中的测试中有不同的表现。您可以从Cypress内部控制WebSocket消息,有条件地加载第三方脚本,或者直接在应用程序上调用函数。

Shortcuts

试图通过测试来访问应用程序的各个区域?不喜欢一个动作产生的副作用?厌倦了一遍又一遍地重复同样的重复而缓慢的动作?对于大多数测试用例,您可以简单地跳过它们。Cypress可以防止您总是被迫“像用户一样”来生成给定情况的状态。使用Cypress,您可以通过编程方式交互和控制您的应用程序。您不再需要使用UI来构建状态。

这意味着您不必访问登录页面,输入用户名和密码,并等待页面加载和/或为您运行的每个测试重定向。Cypress为您提供了快捷方式和编程登录的能力。使用类似于cy .request()的命令,您可以直接发送HTTP请求,但这些请求必须与浏览器同步。cookie将自动发送并应用回。Worried about CORS?完全不用,可以完全忽略。您可以像用户一样选择何时进行测试,以及何时跳过缓慢且重复的部分。

Flake resistant

Cypress知道并理解应用程序中同步发生的所有事情。它在页面加载和页面卸载的时刻被通知。当Cypress触发事件时,它不可能错过元素。Cypress甚至知道一个元素的动画有多快,并且会等待它停止对特定网络请求的动画来完成。

Cypress在浏览器中执行绝大多数命令,因此没有网络延迟。命令执行并尽可能快地驱动应用程序。要处理具有复杂UI的现代JavaScript框架,可以使用断言告诉Cypress应用程序的期望状态应该是什么。Cypress将自动等待您的应用程序达到此状态后再继续。您可以完全避免手工等待或重试。Cypress会自动等待元素的存在,并且永远不会产生已经过时的元素

你可能感兴趣的:(Cypress)