本文档概述了驱动 Cypress 测试功能的底层系统。它解释了实现 Cypress 命令排队和执行、管理被测应用程序 (AUT) 状态以及处理浏览器交互的内部架构。
核心测试基础设施负责命令执行模型、浏览器自动化和测试稳定性机制,这些构成了所有 Cypress 测试能力的基础。有关网络拦截等特定测试功能的信息,请参阅 网络拦截。
Cypress 的核心测试基础设施由几个关键组件组成,它们协同工作,提供了一个强大、确定性的测试环境。
来源:[packages/driver/src/cypress.ts], [packages/driver/src/cypress/cy.ts], [packages/driver/src/cypress/command_queue.ts], [packages/driver/src/cypress/commands.ts], [packages/driver/src/cypress/chainer.ts]
Cypress 的核心是其命令执行系统,它实现了一个异步的、类似 Promise 的操作链。
来源:[packages/driver/src/cypress/cy.ts:178-246], [packages/driver/src/cypress/command_queue.ts:231-402]
命令执行系统遵循以下关键原则:
Cypress 有两种主要类型的命令:
| 命令类型 | 描述 | 示例 |
|---|---|---|
| 父命令 | 启动新链并传递新主体 | cy.get(), cy.visit() |
| 子命令 | 继续链并操作之前的主体 | .click(), .type() |
| 双重命令 | 可以充当父命令或子命令 | cy.contains() |
| 查询 | 返回函数的特殊命令 | cy.find() |
来源:[packages/driver/src/cypress/commands.ts:87-120], [packages/driver/src/cypress/command_queue.ts:293-297]
来源:[packages/driver/src/cypress/command.ts:7-39]
当命令执行时:
queued 状态创建。pending 状态。passed 状态,并将主体传递给下一个命令。failed 状态,并且测试将失败。$Cypress 类([packages/driver/src/cypress.ts])是 Cypress 测试基础设施的主要入口点。它:
cy 对象主要方法包括
configure():设置初始配置run():通过 Mocha 运行器执行测试onSpecWindow():初始化 spec 窗口环境action():处理组件之间的事件和操作来源:[packages/driver/src/cypress.ts:167-368], [packages/driver/src/cypress.ts:400-765]
$Cy 类([packages/driver/src/cypress/cy.ts])是测试作者的主要接口,它作为全局 cy 对象暴露。它:
主要方法包括
addCommand():注册新命令addQuery():注册新查询enqueue():将命令添加到队列runQueue():触发命令队列执行setSubjectForChainer():更新链式调用的主体fail():处理测试失败来源:[packages/driver/src/cypress/cy.ts:210-290], [packages/driver/src/cypress/cy.ts:356-782]
$CommandQueue 类([packages/driver/src/cypress/command_queue.ts])管理命令的排队和执行。
主要方法包括
enqueue():将命令添加到队列run():执行队列中的下一个命令runCommand():执行特定命令函数cleanup():在完成或失败后重置状态来源:[packages/driver/src/cypress/command_queue.ts:114-605]
$Command([packages/driver/src/cypress/command.ts]):表示具有其属性和状态的单个命令。$Chainer([packages/driver/src/cypress/chainer.ts]):提供测试作者交互的可链接 API。来源:[packages/driver/src/cypress/command.ts:6-183], [packages/driver/src/cypress/chainer.ts:5-38]
Cypress 包含一个复杂的应用程序稳定性检测系统,这对于确定何时继续执行测试至关重要。
来源:[packages/driver/src/cypress/cy.ts:491-578], [packages/driver/src/cy/commands/navigation.ts:170-410]
稳定性系统:
关键的稳定性事件包括:
Cypress 在测试运行器中创建两个 iframe:
来源:[packages/runner/src/iframe/iframe.scss:22-38]
来源:[packages/driver/src/cy/listeners.ts:70-162], [packages/driver/src/cy/commands/navigation.ts:152-168]
浏览器集成包括:
Cypress 通过 Commands API 提供系统来注册内置命令和自定义命令。
来源:[packages/driver/src/cypress/commands.ts:42-204], [packages/driver/src/cypress/cy.ts:664-781]
命令注册系统:
Cypress 包含一个强大的错误处理系统,该系统:
来源:[packages/driver/src/cypress/error_messages.ts:1-119], [packages/driver/src/cypress/cy.ts:364-469]
核心测试基础设施为 Cypress 独特的测试方法提供了基础。其命令执行模型、稳定性检测和浏览器集成系统协同工作,创造了一个可靠、确定的测试环境。
理解这些核心系统对于 Cypress 的高级用法、创建自定义命令和排除测试问题至关重要。