CI/测试工作流程 🧪
持续集成(CI)对于通过及早发现问题来保持高质量代码至关重要。本指南涵盖以下方面的 CI 测试和质量检查 Ultralytics项目的 CI 测试和质量检查。
CI 行动 🔄
所有 PR 在合并前必须通过自动 CI 检查。我们的 CI 管道包括
CI 测试
主要 CI 测试运行单元测试、内衬检查和综合测试。
Docker 部署
使用 Docker 验证部署,确保 Dockerfile 和相关脚本正常运行。
断开的链接
扫描代码库,查找markdown 和 HTML 文件中的断开或死链接。
代码QL 分析
GitHub 用于查找潜在安全漏洞和维护代码质量的语义分析工具。
PyPI 发布
验证项目能否打包并无误地发布到PyPI 。
平台测试 🖥️
测试在多个环境中运行:
- 操作系统:Ubuntu、Windows、macOS
- Python:3.8, 3.9, 3.10, 3.11, 3.12
代码覆盖率 📊
我们使用Codecov对代码覆盖率进行测量和可视化,以便深入了解测试对代码库的影响。
覆盖范围整合
Codecov 集成提供
- 详细的覆盖范围洞察
- 提交之间的覆盖率比较
- 代码上的可视化叠加显示覆盖行
- 覆盖百分比
ultralytics包装
查看完整报道详情,请访问codecov.io/github/ultralytics/ultralytics。
了解保险范围
代码覆盖率显示测试期间执行代码的百分比。高覆盖率表明代码测试良好,但并不保证没有错误。覆盖率有助于识别可能容易出错的未测试区域。
在本地运行测试 🖥️
安装开发依赖项
运行所有测试
运行特定测试
# Single file
pytest tests/test_engine.py
# Single test function
pytest tests/test_engine.py::test_train
# Tests matching pattern
pytest -k "export"
# Slow tests only
pytest -m slow
覆盖运行
平行测试
写作测试 ✍️
测试结构
from pathlib import Path
from ultralytics import YOLO
def test_model_export():
"""Test ONNX model export."""
model = YOLO("yolo11n.pt")
model.export(format="onnx")
assert Path("yolo11n.onnx").exists()
最佳做法
- 描述性名称:
test_export_onnx_format()不test_1() - 单一断言:每个函数测试一件事
- 快速测试:使用小型模型/数据集
- 固定装置:使用 pytest 固定装置进行设置/调试
- 标记:
@pytest.mark.slow用于长期测试
测试组织
tests/
├── test_engine.py # Training, validation, prediction
├── test_nn.py # Model architecture
├── test_data.py # Dataset handling
├── test_utils.py # Utility functions
└── test_exports.py # Export formats
测试标记
import pytest
@pytest.mark.slow
def test_full_training():
"""Test full training run (slow)."""
model = YOLO("yolo11n.pt")
model.train(data="coco128.yaml", epochs=1)
代码质量检查 🎯
使用 Ruff 格式
# Check formatting
ruff check ultralytics/
# Auto-fix issues
ruff check --fix ultralytics/
# Format code
ruff format ultralytics/
进一步了解我们开发工作流程中的代码标准。
类型检查
文档字符串格式化
CI 故障排除 🔧
测试在本地通过,但在 CI 中失败
常见原因
- 特定平台问题:在目标操作系统上进行测试
- Python 版本差异:检查版本兼容性
- 缺少依赖项:验证 CI 配置
- 定时/并发问题:添加重试或增加超时
慢速 CI 运行
解决方案
- 使用
@pytest.mark.slow昂贵的测试 - 模拟外部依赖关系
- 减少测试数据集的大小
- 并行
pytest-xdist
缺陷测试
修复:
- 为依赖网络的测试增加重试
- 增加慢速操作的超时
- 修复异步代码中的竞赛条件
- 使用确定性随机种子
性能基准 📈
传播和信息部门跟踪关键指标:
- 推理速度(每秒)
- 内存使用情况
- 模型尺寸
- 出口时间
显著回归阻止合并。如果指标发生变化:
- 核实预期变化
- 公关中的文件理由
- 获得维护者的批准
CI 状态 📋
在docs.ultralytics.com/help/CI 查看所有ultralytics 软件源的CI 状态。
主存储库徽章
跳过 CI 检查 ⚠️
添加 [skip ci] 来提交跳过 CI 的信息(少用):
只适用于
- 仅更改文件
- 非代码文件更新
- 紧急修补程序(经批准)
资源 📚
- 官方 CI 指南- 完整的 CI 文档
- 开发工作流程- 公关流程和代码标准
- GitHub 操作文档- CI 配置
- pytest 文档- 测试框架
- Codecov- 报道
📅创建于 6 天前
✏️已更新 6 天前