Análisis de tests de Xcode
Tuist Test Insights te ofrece análisis de tests de Xcode para supervisar la salud de tu suite de tests identificando tests lentos o comprendiendo rápidamente las ejecuciones de CI fallidas. A medida que tu suite de tests crece, resulta cada vez más difícil detectar tendencias como tests que se ralentizan gradualmente o fallos intermitentes. Tuist Test Insights te proporciona la visibilidad necesaria para mantener una suite de tests rápida y fiable.
Con Test Insights, puedes responder a preguntas como:
- ¿Se han vuelto más lentos mis tests? ¿Cuáles?
- ¿Qué tests son inestables y necesitan atención?
- ¿Por qué falló mi ejecución de CI?
Configuración#
Para empezar a hacer seguimiento de tus tests, puedes aprovechar el comando tuist inspect test añadiéndolo a la post-acción de test de tu esquema:

Si estás usando Mise, tu script deberá activar tuist en el entorno de la post-acción:
# -C ensures that Mise loads the configuration from the Mise configuration
# file in the project's root directory.
$HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect test
La variable de entorno PATH de tu entorno no se hereda en la post-acción del esquema, por lo que debes usar la ruta absoluta de Mise, que dependerá de cómo hayas instalado Mise. Además, no olvides heredar la configuración de compilación desde un objetivo de tu proyecto para poder ejecutar Mise desde el directorio indicado por $SRCROOT.
Tus ejecuciones de tests ahora se rastrean siempre que hayas iniciado sesión en tu cuenta de Tuist. Puedes acceder a tus análisis de tests en el panel de control de Tuist y ver cómo evolucionan con el tiempo:

Además de las tendencias generales, también puedes profundizar en cada test individual, por ejemplo al depurar fallos o tests lentos en la CI:

Proyectos generados#
Los esquemas autogenerados incluyen automáticamente la post-acción tuist inspect test.
Si no te interesa hacer seguimiento de los análisis de tests en tus esquemas autogenerados, desactívalos mediante la opción de generación testInsightsDisabled.
Si estás usando proyectos generados con esquemas personalizados, puedes configurar post-acciones para los análisis de tests:
let project = Project(
name: "MyProject",
targets: [
// Your targets
],
schemes: [
.scheme(
name: "MyApp",
shared: true,
buildAction: .buildAction(targets: ["MyApp"]),
testAction: .testAction(
targets: ["MyAppTests"],
postActions: [
// Test insights: Track test duration and flakiness
.executionAction(
title: "Inspect Test",
scriptText: """
$HOME/.local/bin/mise x -C $SRCROOT -- tuist inspect test
""",
target: "MyAppTests"
)
]
),
runAction: .runAction(configuration: "Debug")
)
]
)
Si no estás usando Mise, tus scripts pueden simplificarse a:
testAction: .testAction(
targets: ["MyAppTests"],
postActions: [
.executionAction(
title: "Inspect Test",
scriptText: "tuist inspect test"
)
]
)
Integración continua#
Para hacer seguimiento de los análisis de tests en la CI, deberás asegurarte de que tu CI esté autenticada.
Además, necesitarás:
- Usar el comando
tuist xcodebuildal invocar acciones dexcodebuild. - Añadir
-resultBundlePatha tu invocación dexcodebuild.
Cuando xcodebuild prueba tu proyecto sin -resultBundlePath, no se generan los archivos de paquete de resultados necesarios. La post-acción tuist inspect test requiere estos archivos para analizar tus tests.
Historial de Git#
En la CI, Tuist también sube el historial de commits del checkout: SHAs de los commits, sus padres, fechas de commit y la rama en la que estaba la ejecución y la rama base de su pull request. No se suben contenidos de archivos, mensajes de commit ni autores. Esto es lo que indica a Tuist qué commits llegaron a tu rama predeterminada, por ejemplo los que probó una cola de fusiones. Tuist lee el historial que ya tiene el checkout y, cuando el checkout no tiene la rama base, solicita al remoto su último commit (git ls-remote). Fuera de la cobertura de código, no obtiene historial.
| Variable | Efecto |
|---|---|
TUIST_GIT_UPLOAD_ENABLED=false | No lee ni sube ningún historial de Git. |
TUIST_GIT_UNSHALLOW_ENABLED=false | Lee solo el checkout, sin contactar con el remoto. |