本文档概述了 Cypress 的架构,解释了不同组件如何协同工作以提供端到端和组件测试功能。有关特定子系统的信息,请参阅导航中的相应维基页面。
Cypress 被组织成一个包含多个相互关联的系统的单体仓库。总的来说,Cypress 由以下几部分组成:
该架构通过允许 Cypress 在浏览器内部和外部运行,实现了其独特的测试方法。
来源: package.json1-288 packages/server/package.json1-243 packages/driver/package.json1-110 cli/package.json1-183
Cypress 的架构围绕几个核心组件构建,这些组件协同工作以提供测试功能。
来源: packages/server/lib/project-base.ts1-66 packages/server/lib/socket-base.ts1-60 packages/server/package.json1-243
服务器是核心的 Node.js 进程,它:
服务器实现为 ServerBase 类,它与 ProjectBase 一起处理项目特定的操作。
来源: packages/server/lib/project-base.ts65-126 packages/server/lib/socket-base.ts46-79
命令执行系统是 Cypress 测试机制的核心。它负责命令的排队和执行、断言的管理以及重试的处理。
来源: packages/driver/package.json1-110
Cypress 使用 Socket.io 在 Node.js 服务器和浏览器之间进行通信。这使得双向通信能够:
两个专用 Socket 类处理不同的测试模式:
SocketE2E 用于端到端测试SocketCT 用于组件测试来源: packages/socket/package.json1-58 packages/server/lib/socket-base.ts46-168
Cypress 使用不同的协议来自动化浏览器:
这使得 Cypress 能够控制浏览器行为、截屏、管理 Cookie 和模拟用户交互。
来源: cli/CHANGELOG.md94-97 packages/launcher/package.json1-51
当 Cypress 启动时,它会经历几个步骤来初始化项目并为测试做准备。
项目初始化主要由 ProjectBase 类处理,该类:
来源: packages/server/lib/project-base.ts65-170
对于云录制和 Studio 功能,Cypress 使用协议管理器来捕获和传输测试数据。
协议管理器处理:
来源: packages/server/lib/cloud/protocol.ts37-59 packages/types/src/protocol.ts1-47
Cypress 实现了复杂的网络处理,以支持网络模拟、请求拦截和代理管理等功能。
主要组成部分包括:
cy.intercept() 功能来源: packages/https-proxy/package.json1-45 packages/proxy/package.json1-63 packages/network/package.json1-49 packages/rewriter/package.json1-24
Cypress 提供了一个图形用户界面,用于项目选择、测试执行和结果可视化。
主要 UI 组件:
来源:packages/reporter/package.json1-46 packages/runner/package.json1-54
Cypress 通过框架特定的适配器和开发服务器支持组件测试
组件测试架构
Cypress 以二进制应用程序的形式分发,捆绑了 Electron、Chrome 和其他依赖项
二进制分发系统
来源:package.json7-17 cli/package.json119-132
此图说明了测试执行期间数据在不同组件之间如何流动
来源:packages/server/lib/project-base.ts127-227 packages/server/lib/socket-base.ts130-368
Cypress 存储库被组织成一个包含多个包的单体仓库
| 目录 | 目的 |
|---|---|
cli/ | 命令行界面和 npm 包 |
packages/ | 核心包(server、driver 等) |
npm/ | 已发布的 npm 包(webpack、react 等) |
tooling/ | 构建和开发工具 |
system-tests/ | Cypress 本身的端到端测试 |
主要包包括
| 包 | 目的 |
|---|---|
服务器 | 协调测试的 Node.js 服务器 |
driver | 浏览器端测试执行引擎 |
reporter | 测试结果可视化 |
runner | 测试运行器界面 |
socket | Socket.io 通信层 |
network | 网络处理实用程序 |
proxy | 用于请求拦截的 HTTP 代理 |
来源:package.json247-255 packages/server/package.json1-243 packages/driver/package.json1-110 packages/reporter/package.json1-46 packages/runner/package.json1-54 packages/socket/package.json1-58 packages/network/package.json1-49 packages/proxy/package.json1-63
Cypress 的架构设计旨在提供一个全面的测试平台,该平台可以在浏览器内和浏览器外运行。Node.js 服务器、浏览器自动化和各种专用组件的组合,使 Cypress 能够提供传统测试框架所不具备的独特测试功能。
这个高级概述为理解 Cypress 代码库奠定了基础。有关特定子系统的更详细信息,请参阅相应的维基页面。