本文档解释了 Sway 编程语言生态系统中的端到端测试基础设施。端到端测试验证 Sway 工具链的所有组件是否协同工作正常,从源代码编译到在 Fuel VM 上执行。有关合约特定测试的信息,请参阅合约测试。
Sway 的端到端测试基础设施旨在验证 Sway 程序开发、编译和执行的完整工作流程。这些测试确保对工具链任何部分的更改都不会破坏系统的整体功能。
图表:E2E 测试流程
E2E 测试基础设施由多个关键组件协同工作,为 Sway 工具链提供全面的验证。
图表:E2E 测试基础设施
来源:test/Cargo.toml14-28 test/Cargo.toml9-44
| 组件 | 目的 |
|---|---|
forc-test | Sway 专用测试运行器和实用工具 |
libtest-mimic | 测试组织和并行执行 |
insta | 用于检测回归的快照测试 |
filecheck | 文件内容验证 |
fuel-vm | 用于运行时验证的 VM 实现 |
forc-util | 事务处理实用工具 |
duct | 进程执行和管理 |
gag | 用于验证的输出捕获 |
Sway 生态系统中的端到端测试可以分为几种类型,每种类型都侧重于工具链的不同方面。
编译测试验证有效的 Sway 代码能够正确编译,并且无效代码能够产生适当的错误消息。这些测试确保编译器的正确性和稳定性。
运行时测试在 Fuel VM 上执行编译后的 Sway 程序以验证其行为。这些测试验证编译器的代码生成能力和 VM 的执行能力。
集成测试验证 Sway 生态系统中的不同组件(编译器、包管理器、VM)是否协同工作正常。
测试执行过程包括从测试发现到结果报告的多个步骤
图表:测试执行顺序
Sway 中的端到端测试通常涉及创建测试夹具(Sway 源文件)以及预期输出或行为规范。
测试夹具通常是用于练习特定语言特性或边缘情况的 Sway 源文件。这些夹具根据所测试的功能在目录中组织。
Sway 测试基础设施通过 insta crate 使用快照测试来检测回归。快照测试将当前输出(编译器诊断、VM 执行结果)与之前保存的“已知良好”快照进行比较。
测试可以对以下方面进行断言
端到端测试可以使用使用 libtest-mimic 构建的测试工具运行。这提供了一个类似于 Rust 内置测试运行器的熟悉接口。
cargo run -p test -- e2e
可以指定额外的过滤和选项来运行特定的测试子集
cargo run -p test -- e2e --filter="feature_name"
测试输出通过多种方法组合验证
insta crate 将输出与已知良好参考进行比较filecheck 根据模式验证文件内容prettydiff 在测试失败时显示差异这种多层方法有助于确保对工具链的更改不会引入回归。
端到端测试集成到 CI/CD 流水线中,以确保更改不会破坏现有功能。测试套件会在拉取请求时和发布前自动运行。
Sway 中的端到端测试基础设施提供了一个全面的框架,用于验证整个工具链,从源代码到执行。通过协同测试所有组件,它确保 Sway 生态系统对开发者来说保持稳定和可靠。