菜单

运行器与报告器

相关源文件

Runner 和 Reporter 是 Cypress 测试界面的核心组件,可在测试执行期间提供视觉反馈。Runner 负责在 iframe 中显示被测应用程序 (AUT) 并管理测试执行显示,而 Reporter 则呈现测试结果、命令日志和错误信息。本文档重点介绍这些显示系统;有关命令实际执行方式的信息,请参阅 Command Execution

目的和概述

Runner 和 Reporter 协同工作,打造 Cypress 测试 UI 体验

  1. Runner:在 iframe 中显示被测应用程序,管理视口大小,并为不同的测试状态(包括 Cypress Studio 模式)提供视觉指示
  2. Reporter:实时显示测试结果,维护命令执行日志,并在测试失败时提供详细的错误信息

来源:packages/runner/src/iframe/iframe.scss

架构

Runner 和 Reporter 系统是独立的但相互关联的组件,负责测试可视化的不同方面

来源:packages/runner/src/iframe/iframe.scss

运行器系统

Runner 管理被测应用程序的显示,并处理测试执行的视觉方面。

Iframe 管理

Runner 管理两个关键的 iframe

  1. AUT Iframe:以适当的样式和视觉反馈显示被测应用程序
  2. Spec Iframe:包含正在执行的测试代码的隐藏 iframe

来源:packages/runner/src/iframe/iframe.scss:1-38

样式和视觉反馈

Runner 通过 iframe 样式提供重要的视觉提示

  • AUT Iframe 显示为白色背景和阴影
  • 发生错误时,显示会调整以显示错误消息
  • 在 Reporter 调整大小时,一个遮罩可防止鼠标事件被 iframe 拦截

在 Cypress Studio 模式下,Runner 通过边框样式显示不同的视觉状态

  • Studio 打开时显示蓝色边框
  • Studio 加载时显示浅蓝色边框
  • Studio 失败时显示红色边框
  • Studio 准备好交互时显示动画边框

来源:packages/runner/src/iframe/iframe.scss:55-96

Reporter 系统

Reporter 随着测试的执行实时显示测试结果,将它们分层组织,并提供有关测试状态和失败的详细信息。

测试结果显示结构

错误报告

当测试失败或 Runner 遇到错误时,Reporter 会提供详细的错误信息

  • 带源映射的堆栈跟踪
  • 带语法高亮的错误消息
  • 屏幕截图(如果已配置)
  • 视频录制(如果已配置)

对于意外退出,详细的错误消息包括:

  • 退出信号(例如,SIGKILL)
  • 指向 Cypress 文档的链接
  • 平台信息
  • Cypress 版本

来源:cli/__snapshots__/spawn_spec.js:18-35

通信流程

Runner、Reporter 和其他组件在测试执行期间进行通信

调整大小和布局管理

Runner 和 Reporter 具有可调整大小的界面,允许用户调整每个组件的查看区域

  • Reporter 面板可以调整大小以显示更多或更少的测试信息
  • AUT Iframe 会调整大小以填充剩余空间
  • 在调整大小时,一个遮罩可防止鼠标事件被 iframe 拦截

来源:packages/runner/src/iframe/iframe.scss:40-53

Studio 模式视觉状态

Cypress Studio 模式有几种视觉状态,Runner 通过 iframe 样式显示这些状态

Studio 状态视觉指示器CSS 类
开放纯蓝色边框.studio-is-open
加载浅蓝色边框.studio-is-loading
失败红色边框.studio-is-failed
准备就绪动画蓝色/浅蓝色边框.studio-is-ready

当 Studio 加载时,AUT Iframe 上会显示一个带有旋转图标的半透明覆盖层。

来源:packages/runner/src/iframe/iframe.scss:55-96

Runner Iframe 样式

AUT Iframe 的样式设计清晰区分于其他元素

.aut-iframe {
  background-color: #fff;
  box-shadow: 0 6px 10px #555;
  border: none;
  display: block;
  height: 100%;
  overflow: auto;
  width: 100%;
}

Spec Iframe 从视图中隐藏,但对测试执行至关重要

.spec-iframe {
  border: none;
  height: 0;
  position: absolute;
  visibility: hidden;
  width: 0;
}

来源:packages/runner/src/iframe/iframe.scss:22-38

错误处理和意外退出

当测试 Runner 意外退出时,它会提供格式化的错误消息以帮助调试

The Test Runner unexpectedly exited via a exit event with signal SIGKILL

Please search Cypress documentation for possible solutions:

https://on.cypress.io

Check if there is a GitHub issue describing this crash:

https://github.com/cypress-io/cypress/issues

Consider opening a new issue.

----------

Platform: darwin-x64 (Foo-OsVersion)
Cypress Version: 0.0.0-development

来源:cli/__snapshots__/spawn_spec.js:18-35

与其他系统集成

Runner 和 Reporter 与多个其他 Cypress 系统集成

  1. Driver:发送命令执行并接收结果
  2. Server:提供被测应用程序和路由
  3. CLI:在无头模式下以不同的方式格式化 Reporter 输出,以便在终端显示
  4. GraphQL API:提供测试元数据和配置信息

结论

Runner 和 Reporter 构成了 Cypress 测试执行的核心用户界面。Runner 提供被测应用程序的视觉显示,具有适当的框架和视觉反馈,而 Reporter 以分层、信息丰富的方式组织和显示测试结果。它们共同创造了一个交互式的测试体验,帮助开发人员理解测试行为并高效地调试失败。