菜单

测试系统

相关源文件

本文档概述了 Tauri 框架中使用的测试架构、实践和工作流程。测试系统确保在多种平台和功能配置下的可靠性,同时验证框架的核心功能。有关为 Tauri 开发做贡献的信息,请参阅 为 Tauri 做贡献,有关发布流程的详细信息,请参阅 发布流程

测试方法概述

Tauri 采用多层测试策略,涵盖单元测试、集成测试、跨平台验证和性能基准测试。测试系统旨在验证在各种操作系统(Windows、macOS、Linux)和架构(x86_64、aarch64)以及移动目标(iOS、Android)上的功能。

来源: .github/workflows/test-core.yml29-74

测试类型和组织

单元测试

Tauri 中的单元测试遵循 Rust 的常规模式,即模块内测试,测试通常放置在与被测试代码相同文件中的 tests 子模块中。这些测试侧重于单个函数和组件,以在隔离环境中验证它们的正确行为。

集成测试

集成测试验证 Tauri 框架不同组件之间的交互。这些测试通常涉及创建一个最小的 Tauri 应用程序实例,并测试前端和后端组件之间的通信。

跨平台测试

鉴于 Tauri 的跨平台性质,测试会在多个平台上运行以确保一致的行为。测试系统使用矩阵策略来运行跨

  • 操作系统:Windows、macOS、Linux
  • 架构:x86_64、aarch64
  • 移动平台:iOS、Android

来源: .github/workflows/test-core.yml33-74

性能测试

Tauri 包括性能基准测试,用于衡量和跟踪框架的性能特征。这些基准测试侧重于

  1. CPU 密集型操作
  2. 文件传输性能
  3. 启动时间和内存使用量

来源: .github/workflows/bench.yml67-73

持续集成

GitHub Actions 工作流

Tauri 使用 GitHub Actions 进行持续集成,有多个工作流程专门用于测试框架的各个方面

  1. 核心测试工作流程 - 测试跨平台和功能配置下的核心 Tauri Crates
  2. 未使用的依赖项检查 - 确保代码库中没有未使用的依赖项
  3. 基准测试工作流程 - 运行性能基准测试并记录结果

来源: .github/workflows/test-core.yml5-11 .github/workflows/udeps.yml5-11 .github/workflows/bench.yml5-15

测试矩阵策略

核心测试工作流程利用矩阵策略来测试

  1. 平台和目标:

    • Windows (x86_64-pc-windows-msvc)
    • Linux (x86_64-unknown-linux-gnu)
    • macOS (aarch64-apple-darwin)
    • iOS (aarch64-apple-ios)
    • Android (aarch64-linux-android)
  2. 功能配置:

    • 无默认功能 (--no-default-features)
    • 所有功能 (--all-features)

对于 Android 等交叉编译目标,工作流程使用 cross 工具进行构建和测试。

来源: .github/workflows/test-core.yml33-74 .github/workflows/test-core.yml96-104

编写 Tauri 组件的测试

单元测试模式

在为 Tauri 组件编写测试时,请遵循以下模式

  1. 模块内测试:将测试放在与被测试代码相同文件中的 tests 子模块中
  2. 隔离性:确保测试是隔离的,并且不依赖于外部状态
  3. 跨平台注意事项:注意特定于平台的行为
  4. 功能标志:在适当时测试不同的功能标志组合

集成测试

Tauri 的集成测试通常涉及

  1. 创建最小的 Tauri 应用程序
  2. 测试 JS 和 Rust 之间的 IPC 通信
  3. 验证窗口创建和管理
  4. 测试插件功能

测试跨平台代码

当测试在不同平台上有不同行为的代码时

  1. 使用条件编译 (#[cfg(target_os = "...")]) 编写特定于平台的测试
  2. 考虑通过通用接口抽象平台特定的行为
  3. 注意平台限制(例如,某些 API 可能在所有平台上都不可用)

性能测试和基准测试

Tauri 维护一个全面的基准测试系统,以跟踪性能指标随时间的变化。

来源: .github/workflows/bench.yml67-73 .github/workflows/bench.yml82-92

基准测试系统会构建具有特定特征的测试应用程序

  1. HelloWorld:衡量基本启动性能
  2. CPU 密集型:测试计算密集型操作
  3. 文件传输:评估 I/O 性能

这些基准测试使用 hyperfine 等工具进行计时,并使用 memory_profiler 进行内存使用情况跟踪。结果存储在单独的存储库中,并可随时间跟踪以识别性能回归。

来源: .github/workflows/bench.yml53-63

依赖项分析

Tauri 使用 cargo-udeps 来识别和删除未使用的依赖项,这有助于维护精简的代码库并缩短编译时间。

udeps 工作流程

  1. 在特定 Crates 更改时运行
  2. 使用 Rust nightly 分析依赖项
  3. 报告任何未使用的依赖项以供移除

来源: .github/workflows/udeps.yml20-154

测试 Tauri 代码的最佳实践

  1. 全面的覆盖率:测试有利路径和错误条件
  2. 平台意识:注意特定于平台的行为
  3. 功能标志测试:使用不同的功能标志组合进行测试
  4. 性能考虑:注意性能影响,特别是对于移动目标
  5. 隔离性:确保测试之间不相互干扰
  6. CI 集成:确保新测试在 CI 环境中正常工作

通过遵循这些测试实践,Tauri 框架在其支持的平台和配置中保持了可靠性和性能。