- Introduced tests for the Moge3 ONNX model, including input validation, inference, and caching mechanisms. - Added tests for ONNX runtime configurations and session management. - Implemented tests for image upscaling functionality using ONNX models, ensuring proper handling of alpha channels and memory management. - Created tests for panorama generation, verifying depth and visibility metrics. - Developed tests for prediction artifacts, ensuring correct depth and normal data handling. - Added server job tests for background removal and depth plane geometry generation, validating input handling and output correctness. - Included environment tests to ensure proper dependency management and CI configurations.
4.7 KiB
Context
项目当前只有一个默认 dev 依赖组。uv run pytest 因此会同步 Blender、AI 推理、模型导出和文档构建的全部工具,即使 CI 只需要运行不涉及真实模型的测试。测试也没有稳定的能力分类,工作流只能运行整个集合。
依赖和测试存在两条不同边界:产品中的 AI 调度、界面和协议可以通过 mock 在常规环境验证;真实模型实现、ONNX Runtime 行为及模型资产生产需要额外的大型依赖。分类应以执行所需能力为准,而不是看到 AI 业务名称就全部排除。
Goals / Non-Goals
Goals:
- 依赖组名称表达可用能力,而不是单一测试用途。
- CI 只同步核心与 Blender 能力所需依赖。
- AI 模型执行测试由开发者在本地显式运行。
- 模型资产生产和文档构建拥有独立环境。
- 测试选择规则可见、可校验,新测试不易被意外遗漏。
Non-Goals:
- 不改变扩展安装后的 AI 运行环境及依赖版本。
- 不移除依赖 Blender 的 CI 覆盖。
- 不下载真实模型权重作为测试前置条件。
- 不修改产品功能、模型格式或打包产物。
Decisions
使用能力名称划分依赖组
依赖组采用以下职责:
dev:uv 默认加载的通用开发环境,包括 pytest 和通用图像测试依赖。blender:Blender API、节点和几何验证所需的增量依赖。ai:本地 AI 推理实现验证所需的增量依赖。models:下载、转换和导出模型资产所需工具;它独立于日常 AI 推理验证。docs:文档构建和发布工具。
选择能力名称可以让同一组依赖同时服务业务开发、调试和测试。备选方案 test-core、test-ai 会错误地把依赖限定为测试用途;继续把所有工具放在 dev 则无法减少 CI 下载。
以目录表达测试执行边界
将要求 AI 专用运行时的测试放入 tests/ai。CI 直接运行 tests/anyimage 和 tests/tools;本地 AI 验证直接运行 tests/ai;全量验证运行 tests。
AI 界面、Operator 调度、参数序列化、模型目录和下载流程等使用 mock 且不加载模型运行时的测试不标记为 ai,继续在 CI 中执行。这样排除的是昂贵执行环境,而不是 AI 业务覆盖。
目录名称直接表达执行环境,不增加 marker 和筛选表达式。实现时必须验证未安装 ai 和 models 组时,常规测试目录能够完成收集,避免顶层导入泄漏可选依赖。
CI 显式选择环境
测试与发布工作流使用 --group blender,由 uv 自动加载默认 dev,并直接执行常规测试目录。打包只需默认 dev。所有命令均使用 uv 的默认组语义,不额外传入 --no-default-groups。
dev 只保存所有开发流程都需要的轻量依赖;大型能力必须留在显式组中。发布工作流采用同一测试命令,保证发布门禁与普通 CI 一致。
模型资产生产与 AI 运行分离
torch、onnx 及模型导出脚本的其他依赖归入 models;onnxruntime 和 AI 服务本地验证所需依赖归入 ai。只有两种能力确实共享的包才重复约束同一版本。
模型 CLI 测试若只验证调度和失败处理且使用 mock,可留在默认 dev 环境;只有实际导入或执行模型制作组件的测试进入 AI/模型相关本地集合。
Risks / Trade-offs
- [pytest 在筛选前导入测试模块,AI 顶层导入可能导致 CI 收集失败] → 将可选运行时导入保持在执行边界内,并用不安装 AI 组的干净环境验证收集与测试。
- [测试放错目录使昂贵测试进入 CI] → 让
tests/ai只承载真实依赖 AI 专用运行时的测试,并在干净 CI 环境验证常规目录。 - [AI 业务回归失去 CI 保护] → mock 层协议与集成测试继续保留在常规业务目录。
- [能力组之间重复依赖或版本漂移] → 复用默认
dev环境,并由单一uv.lock锁定版本。 - [本地全量测试命令变长] → 在项目常用命令和测试配置中形成唯一、明确的命令,不保留旧环境兼容层。
Migration Plan
- 建立能力依赖组并刷新锁文件。
- 将 AI 模型执行测试移动到独立目录,确认不安装 AI 依赖时可收集常规测试目录。
- 分别运行核心、Blender、AI 和全量验证。
- 更新测试与发布工作流,确认 CI 的同步计划不包含 AI、模型和文档组。
若迁移失败,可在提交合并前恢复原 dependency group 与工作流;本变更不涉及用户数据或线上状态迁移。
Open Questions
无。实现阶段根据实际 import 链决定个别包归属,但不得改变上述能力边界。