菜单

CLI 与二进制文件

相关源文件

本文档描述了 Cypress 的命令行界面 (CLI) 和二进制管理系统。这些组件使用户能够通过命令行命令与 Cypress 交互,管理 Cypress 二进制文件的生命周期(下载、安装、验证)以及执行测试。

有关测试运行器的信息,请参阅 核心测试基础设施

系统概览

CLI & 二进制系统包含两个主要组件

  1. 命令行界面 (CLI):处理用户命令,如 cypress runcypress open
  2. 二进制管理:负责 Cypress 二进制文件的下载、安装、验证和执行

CLI 作为面向用户的接口,而二进制管理系统则处理 Cypress 可执行文件的底层生命周期。

架构图

来源:cli/lib/cli.js1-608 cli/lib/exec/spawn.js1-412 cli/lib/tasks/verify.js1-389 cli/lib/tasks/install.js1-330 cli/lib/tasks/download.js1-395 cli/lib/errors.js1-420

命令行界面

CLI 使用 commander 库来解析命令和选项,并将执行委托给相应的模块。

可用命令

命令描述
cypress open打开 Cypress GUI
cypress run无头模式运行 Cypress 测试
cypress install安装 Cypress 二进制文件
cypress verify验证 Cypress 二进制文件
cypress cache管理二进制缓存
cypress info打印 Cypress 和系统信息
cypress version显示版本信息

来源:cli/lib/cli.js132-145 cli/lib/cli.js231-467

命令处理流程

来源:cli/lib/cli.js310-598

CLI 选项处理

CLI 包含复杂的选项处理,可处理各种标志和环境变量

  • 将空格分隔的参数转换为逗号分隔的列表
  • 正确解析布尔值、字符串和数值
  • 去除环境变量中的字符串值引用
  • 验证选项组合(例如 --headed--headless

来源:cli/lib/cli.js25-57 cli/lib/cli.js58-93 cli/lib/cli.js310-392 cli/lib/util.js192-251

二进制管理

二进制管理系统负责 Cypress 二进制文件的生命周期。

二进制文件生命周期

来源:cli/lib/tasks/install.js71-139 cli/lib/tasks/verify.js166-222 cli/lib/exec/spawn.js166-410

下载系统

下载系统处理 Cypress 二进制文件的获取,具备以下功能

  • 默认从 Cypress CDN 下载
  • 支持通过 CYPRESS_DOWNLOAD_MIRROR 自定义下载镜像
  • 通过环境变量处理代理配置
  • 通过校验和验证下载的完整性
  • 支持重试和重定向

来源:cli/lib/tasks/download.js17-39 cli/lib/tasks/download.js59-85 cli/lib/tasks/download.js196-394

验证系统

验证系统确保 Cypress 二进制文件

  1. 存在于预期的位置
  2. 具有可执行权限
  3. 通过冒烟测试确保功能正常

在 Linux 上,它会管理 Xvfb 以实现无头操作,并在检测到显示错误时自动使用 Xvfb 重试。

来源:cli/lib/tasks/verify.js20-165 cli/lib/tasks/verify.js225-369 cli/lib/exec/xvfb.js1-109

二进制文件存储和状态管理

二进制文件存储在缓存目录中,该目录因平台而异

  • Windows%APPDATA%\Cypress\Cache
  • macOS~/Library/Caches/Cypress
  • Linux~/.cache/Cypress

状态管理系统

  • 跟踪已安装的版本
  • 维护每个二进制文件的验证状态
  • 允许缓存操作(列表、清除、修剪)

来源:cli/lib/util.js257-275 cli/lib/tasks/state.js1-370 cli/lib/cli.js514-553

进程启动

启动系统负责使用正确的参数和环境启动 Cypress 二进制文件。

启动进程

启动系统处理:

  1. 特定于平台的行为(Windows/macOS/Linux 差异)
  2. 无头 Linux 的 Xvfb 管理
  3. 进程标准输入管道和过滤
  4. 错误和退出代码处理
  5. 信号传播(SIGINT, SIGTERM)

来源:cli/lib/exec/spawn.js126-161 cli/lib/exec/spawn.js193-355 cli/lib/exec/xvfb.js76-104

错误过滤

启动系统过滤掉不影响功能的常见“噪音”错误

  • Linux 上的 Gtk 警告
  • macOS High Sierra 警告
  • Electron 特有消息
  • 显示服务器错误
  • 调试/驱动程序消息

这为用户提供了更清晰的输出,同时仍保留重要错误。

来源:cli/lib/exec/spawn.js16-119 cli/lib/exec/spawn.js320-335

模块 API

除了 CLI,Cypress 还提供了一个用于程序控制的 JavaScript API

模块 API 以编程接口的形式提供了与 CLI 相同的功能,并像 CLI 一样规范化选项。

来源:cli/lib/cypress.js12-103 cli/lib/cli.js310-392 cli/lib/util.js192-251

环境变量

CLI 支持各种环境变量来自定义行为

可变描述
CYPRESS_INSTALL_BINARY指定要安装的二进制文件版本或路径
CYPRESS_DOWNLOAD_MIRROR用于二进制文件的自定义下载镜像
CYPRESS_CACHE_FOLDER用于二进制文件缓存的自定义位置
CYPRESS_RUN_BINARY要运行的特定二进制文件的路径
CYPRESS_VERIFY_TIMEOUT二进制文件验证超时
CYPRESS_DOWNLOAD_PATH_TEMPLATE用于构建下载 URL 的模板
CYPRESS_SKIP_VERIFY跳过二进制文件验证
NO_COLOR禁用彩色输出

来源:cli/lib/tasks/verify.js249-262 cli/lib/tasks/download.js17-39 cli/lib/tasks/download.js59-85 cli/lib/util.js518-555

错误处理

CLI 提供了用户友好的错误消息,包含

  1. 清晰的错误描述
  2. 建议的解决方案
  3. 用于支持的系统信息
  4. 相关文档或 GitHub issue 的链接

处理的常见错误场景

  • 缺失或损坏的二进制文件
  • 下载失败
  • 缺少依赖项
  • 权限问题
  • 网络问题
  • 验证失败

来源:cli/lib/errors.js16-585 cli/lib/tasks/verify.js41-165

特定平台处理

CLI 包含针对不同平台的专门逻辑

  • Linux:管理 Xvfb 以进行无头操作,处理显示服务器问题
  • macOS:处理权限和文件系统要求
  • Windows:解决路径长度限制和进程管理差异
  • CI 环境:针对持续集成平台的特殊优化

来源:cli/lib/exec/spawn.js126-161 cli/lib/exec/xvfb.js76-104 cli/lib/tasks/verify.js371-382 cli/lib/util.js80-115

缓存管理

CLI 提供了用于管理二进制文件缓存的命令

  • cypress cache list - 列出缓存的版本
  • cypress cache path - 显示缓存位置
  • cypress cache clear - 删除所有缓存的二进制文件
  • cypress cache prune - 移除除当前版本外的所有版本

这有助于用户管理磁盘空间和排除二进制文件问题。

来源:cli/lib/cli.js514-553