Flujo de trabajo de CI/pruebas 🧪
La integración continua (CI) es fundamental para mantener un código de alta calidad, ya que permite detectar los problemas en una fase temprana. Esta guía aborda las pruebas de CI y los controles de calidad para los proyectos Ultralytics.
Acciones de CI 🔄
Todas las solicitudes de incorporación de cambios deben superar las comprobaciones automatizadas de integración continua antes de su fusión. Nuestro proceso de integración continua incluye:
Pruebas de CI
Prueba de integración primaria que ejecuta pruebas unitarias, comprobaciones de linting y pruebas exhaustivas.
Despliegue de Docker
Comprueba la implementación mediante Docker, asegurándose de que el archivo Dockerfile y los scripts relacionados funcionen correctamente.
Enlaces Rotos
Analiza el código fuente en busca de enlaces rotos o inactivos en archivos markdown HTML.
Análisis de CodeQL
La herramienta de análisis semántico de GitHub para detectar posibles vulnerabilidades de seguridad y garantizar la calidad del código.
PyPI
Comprueba que el proyecto se pueda empaquetar y publicar en PyPI errores.
Pruebas de plataformas 🖥️
Pruebas realizadas en múltiples entornos:
- Sistema operativo: Ubuntu, Windows, macOS
- Python: 3.8, 3.9, 3.10, 3.11, 3.12
Cobertura del código 📊
Utilizamos Codecov para medir y visualizar la cobertura del código, lo que permite conocer en qué medida las pruebas cubren el código fuente.
Integración de la cobertura
La integración de Codecov ofrece:
- Información detallada sobre la cobertura
- Comparaciones de cobertura entre revisiones
- Superposiciones visuales en el código que muestran las líneas ocultas
- Porcentaje de cobertura para el
ultralyticspaquete
Consulte todos los detalles de la cobertura en codecov.ultralytics.
Entender la cobertura
La cobertura del código muestra qué porcentaje del código se ejecuta durante las pruebas. Una cobertura elevada indica que el código se ha probado adecuadamente, pero no garantiza la ausencia de errores. La cobertura ayuda a identificar áreas no probadas que podrían ser propensas a errores.
Ejecutar pruebas localmente 🖥️
Instalar las dependencias de desarrollo
pip install -e ".[dev]"Ejecutar todas las pruebas
pytest tests/Realizar pruebas específicas
# 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 slowCorrer con cobertura
pytest --cov=ultralytics tests/Pruebas en paralelo
# Install pytest-xdist
pip install pytest-xdist
# Run tests in parallel
pytest -n autoRedacción de exámenes ✍️
Estructura de la prueba
from pathlib import Path
from ultralytics import YOLO
def test_model_export():
"""Test ONNX model export."""
model = YOLO("yolo26n.pt")
model.export(format="onnx")
assert Path("yolo26n.onnx").exists()Mejores prácticas
- Nombres descriptivos:
test_export_onnx_format()no estántest_1() - Afirmación única: Prueba una cosa por función
- Pruebas rápidas: Utiliza modelos o conjuntos de datos pequeños
- Calendario: Utiliza los fixtures de pytest para la configuración y la limpieza
- Marcadores:
@pytest.mark.slowpara pruebas de larga duración
Organización de la prueba
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 formatsMarcadores de prueba
import pytest
@pytest.mark.slow
def test_full_training():
"""Test full training run (slow)."""
model = YOLO("yolo26n.pt")
model.train(data="coco128.yaml", epochs=1)Comprobaciones de calidad del código 🎯
Formateo con Ruff
# Check formatting
ruff check ultralytics/
# Auto-fix issues
ruff check --fix ultralytics/
# Format code
ruff format ultralytics/Obtén más información sobre las normas de código en nuestra flujo de trabajo de desarrollo.
Comprobación de tipos
# Run mypy (where configured)
mypy ultralytics/Formato de las cadenas de documentación
pip install ultralytics-actions# Auto-fix
ultralytics-actions-format-python-docstrings .Solución de problemas de CI 🔧
Las pruebas se superan en el entorno local, pero fallan en la integración continua
Causas comunes:
- Problemas específicos de la plataforma: Prueba en el sistema operativo de destino
- Diferencias entre Python: Comprueba la compatibilidad de versiones
- Faltan dependencias: Comprobar la configuración de CI
- Problemas de sincronización y concurrencia: Añadir reintentos o aumentar los tiempos de espera
Ejecuciones lentas de la integración continua
Soluciones:
- Utilice
@pytest.mark.slowpara pruebas costosas - Simular dependencias externas
- Reducir el tamaño de los conjuntos de datos de prueba
- Paralelizar con
pytest-xdist
Pruebas poco fiables
Correcciones:
- Añadir reintentos para las pruebas que dependen de la red
- Aumentar los tiempos de espera para las operaciones lentas
- Corregir las condiciones de carrera en el código asíncrono
- Utilizar semillas aleatorias determinísticas
Índices de rendimiento 📈
CI realiza un seguimiento de los indicadores clave:
- Velocidad de inferencia (FPS)
- Uso de la memoria
- Tamaño del modelo
- Tiempos de exportación
Las regresiones significativas impiden la fusión de bloques. Si cambian las métricas:
- Comprueba si se espera un cambio
- Justificar el documento en la solicitud de incorporación de cambios
- Obtener la aprobación de los responsables del mantenimiento
Estado de CI 📋
Comprueba el estado de la integración continua de todos los repositorios Ultralytics en docs.ultralytics.com/ayuda/CI.
Insignias del repositorio principal
Omitir comprobaciones de integración continua ⚠️
Añadir [skip ci] Para que el mensaje de confirmación omita la integración continua (utilizar con moderación):
git commit -m "Update README [skip ci]"Solo para:
- Cambios que solo afectan a la documentación
- Actualizaciones de archivos que no son de código
- Correcciones de emergencia (previa autorización)
Recursos 📚
- Guía oficial de CI - Documentación completa sobre la integración continua
- Flujo de trabajo de desarrollo - Proceso de relaciones públicas y normas de redacción
- Documentación de GitHub Actions - Configuración de CI
- Documentación de pytest - Marco de pruebas
- Codecov - Informes de cobertura