本文档介绍了 uv 的全面测试基础设施,重点介绍了从 packse 场景生成快照测试的自动化场景生成系统。该测试基础设施确保了在不同的依赖解析场景、Python 版本和包管理操作中行为的可靠性。
有关 CI/CD 管道和发布自动化的信息,请参阅 CI/CD 管道。
该测试基础设施围绕基于场景的测试方法构建,该方法从结构化的依赖解析场景生成全面的测试套件。该系统自动创建、执行和维护三个核心操作的快照测试:包安装、依赖编译和锁文件生成。
该基础设施包含几个关键组件
来源: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)→ 编译场景来源: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 二进制文件锁定测试验证 uv lock 功能,用于基于项目的依赖管理。这些测试验证锁文件的生成和幂等性。
测试模式:
来源:scripts/scenarios/templates/install.mustache43-56 scripts/scenarios/templates/compile.mustache23-41 scripts/scenarios/templates/lock.mustache55-85
测试基础设施利用 cargo insta 进行快照测试,提供自动回归检测和便捷的测试维护。
系统使用专门的过滤器来规范化测试输出
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
标准工作流程
用于在本地开发新场景
本地服务场景:
覆盖索引 URL 并重新生成:
开发版本检测:系统会自动检测可编辑的 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