菜单

端到端测试

相关源文件

本文档解释了 Sway 编程语言生态系统中的端到端测试基础设施。端到端测试验证 Sway 工具链的所有组件是否协同工作正常,从源代码编译到在 Fuel VM 上执行。有关合约特定测试的信息,请参阅合约测试

E2E 测试基础设施概述

Sway 的端到端测试基础设施旨在验证 Sway 程序开发、编译和执行的完整工作流程。这些测试确保对工具链任何部分的更改都不会破坏系统的整体功能。

图表:E2E 测试流程

来源:test/Cargo.toml14-28

测试基础设施组件

E2E 测试基础设施由多个关键组件协同工作,为 Sway 工具链提供全面的验证。

图表:E2E 测试基础设施

来源:test/Cargo.toml14-28 test/Cargo.toml9-44

关键组件

组件目的
forc-testSway 专用测试运行器和实用工具
libtest-mimic测试组织和并行执行
insta用于检测回归的快照测试
filecheck文件内容验证
fuel-vm用于运行时验证的 VM 实现
forc-util事务处理实用工具
duct进程执行和管理
gag用于验证的输出捕获

来源:test/Cargo.toml14-28

测试类别

Sway 生态系统中的端到端测试可以分为几种类型,每种类型都侧重于工具链的不同方面。

编译测试

编译测试验证有效的 Sway 代码能够正确编译,并且无效代码能够产生适当的错误消息。这些测试确保编译器的正确性和稳定性。

运行时测试

运行时测试在 Fuel VM 上执行编译后的 Sway 程序以验证其行为。这些测试验证编译器的代码生成能力和 VM 的执行能力。

集成测试

集成测试验证 Sway 生态系统中的不同组件(编译器、包管理器、VM)是否协同工作正常。

测试执行流程

测试执行过程包括从测试发现到结果报告的多个步骤

图表:测试执行顺序

来源:test/Cargo.toml14-28

编写端到端测试

Sway 中的端到端测试通常涉及创建测试夹具(Sway 源文件)以及预期输出或行为规范。

测试夹具

测试夹具通常是用于练习特定语言特性或边缘情况的 Sway 源文件。这些夹具根据所测试的功能在目录中组织。

快照测试

Sway 测试基础设施通过 insta crate 使用快照测试来检测回归。快照测试将当前输出(编译器诊断、VM 执行结果)与之前保存的“已知良好”快照进行比较。

测试断言

测试可以对以下方面进行断言

  • 成功编译
  • 预期编译器错误
  • 运行时行为
  • 生成的汇编或字节码

运行端到端测试

端到端测试可以使用使用 libtest-mimic 构建的测试工具运行。这提供了一个类似于 Rust 内置测试运行器的熟悉接口。

cargo run -p test -- e2e

可以指定额外的过滤和选项来运行特定的测试子集

cargo run -p test -- e2e --filter="feature_name"

来源:test/Cargo.toml27

测试输出验证

测试输出通过多种方法组合验证

  1. 快照比较 - 使用 insta crate 将输出与已知良好参考进行比较
  2. 文件验证 - 使用 filecheck 根据模式验证文件内容
  3. 差异可视化 - 使用 prettydiff 在测试失败时显示差异

这种多层方法有助于确保对工具链的更改不会引入回归。

来源:test/Cargo.toml26-29

CI 集成

端到端测试集成到 CI/CD 流水线中,以确保更改不会破坏现有功能。测试套件会在拉取请求时和发布前自动运行。

结论

Sway 中的端到端测试基础设施提供了一个全面的框架,用于验证整个工具链,从源代码到执行。通过协同测试所有组件,它确保 Sway 生态系统对开发者来说保持稳定和可靠。