菜单

测试基础设施

相关源文件

本文档介绍了 uv 的全面测试基础设施,重点介绍了从 packse 场景生成快照测试的自动化场景生成系统。该测试基础设施确保了在不同的依赖解析场景、Python 版本和包管理操作中行为的可靠性。

有关 CI/CD 管道和发布自动化的信息,请参阅 CI/CD 管道

系统概览

该测试基础设施围绕基于场景的测试方法构建,该方法从结构化的依赖解析场景生成全面的测试套件。该系统自动创建、执行和维护三个核心操作的快照测试:包安装、依赖编译和锁文件生成。

该基础设施包含几个关键组件

  • 场景生成系统:将 packse 场景转换为 Rust 测试文件
  • 模板引擎:使用 Mustache 模板生成结构化测试代码
  • 快照测试:与 cargo insta 集成以进行回归测试
  • 多类别测试:支持安装、编译和锁定操作测试

测试基础设施架构

来源:scripts/scenarios/generate.py80-253 scripts/scenarios/templates/install.mustache1-119 scripts/scenarios/templates/compile.mustache1-107 scripts/scenarios/templates/lock.mustache1-90

场景生成流水线

场景生成过程通过结构化的流水线将 packse 依赖场景转换为可执行的 Rust 测试。generate.py 脚本通过加载场景、通过模板处理场景并生成测试文件来协调此过程。

生成过程流程

关键功能和组件

功能文件目的
main()scripts/scenarios/generate.py80-253协调整个生成过程
packse.inspect.inspect()外部加载和处理场景元数据
chevron_blue.render()外部使用场景数据渲染 Mustache 模板
update_common_mod_rs()scripts/scenarios/generate.py255-278更新 PACKSE_VERSION 常量

分类逻辑根据 resolver_options 确定测试类型

  • 通用解析universal=true)→ 锁定场景
  • 特定于 Python(指定 python)→ 编译场景
  • 默认 → 安装场景

来源:scripts/scenarios/generate.py124-172 scripts/scenarios/generate.py164-171

测试类别和模板

测试基础设施支持三个不同的测试类别,每个类别都有专门的模板和测试执行模式。

安装测试

安装测试使用 uv pip install 验证包安装行为。这些测试会创建虚拟环境并验证包是否已正确安装,且版本符合预期。

模板结构:

验证函数:

  • assert_installed() - 验证包安装和版本
  • assert_not_installed() - 确认包不存在
  • assert_command() - 在测试环境中执行 Python 命令

编译测试

编译测试使用 uv pip compile 验证依赖解析。这些测试侧重于约束解析和 requirements.txt 生成,而不实际安装包。

主要功能:

  • 通过 --python-version 指定 Python 版本
  • 通过 UV_TEST_PYTHON_PATH 支持多个 Python 二进制文件
  • 预发布版和二进制/源代码构建选项
  • Requirements.in 文件生成和处理

锁定测试

锁定测试验证 uv lock 功能,用于基于项目的依赖管理。这些测试验证锁文件的生成和幂等性。

测试模式:

来源:scripts/scenarios/templates/install.mustache43-56 scripts/scenarios/templates/compile.mustache23-41 scripts/scenarios/templates/lock.mustache55-85

快照测试集成

测试基础设施利用 cargo insta 进行快照测试,提供自动回归检测和便捷的测试维护。

快照工作流程

Snapshot 配置

系统使用专门的过滤器来规范化测试输出

  • 包名称规范化(替换 package- 前缀)
  • 通过 context.filters() 进行路径和时间戳过滤
  • 针对特定版本的过滤以实现一致的快照

执行命令:

来源:scripts/scenarios/generate.py220-250 scripts/scenarios/templates/install.mustache62-77 scripts/scenarios/templates/lock.mustache66-74

开发工作流

测试基础设施支持自动化和面向开发的场景测试工作流程。

自动化生成

主脚本./scripts/sync_scenarios.sh 后端scripts/scenarios/generate.py

标准工作流程

本地开发工作流

用于在本地开发新场景

  1. 本地服务场景:

  2. 覆盖索引 URL 并重新生成:

  3. 开发版本检测:系统会自动检测可编辑的 packse 安装,并使用来自 packse.__development_base_path__/scenarios 的捆绑场景。

配置管理

版本跟踪:系统通过 update_common_mod_rs() 更新 PACKSE_VERSION 来维护版本一致性,该版本位于 crates/uv/tests/it/common/mod.rs

环境变量:

  • UV_TEST_INDEX_URL - 覆盖本地测试的包索引
  • UV_TEST_PYTHON_PATH - 为编译测试指定 Python 二进制文件位置

来源:scripts/scenarios/generate.py22-33 scripts/scenarios/generate.py91-107 scripts/scenarios/generate.py255-278