es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo detener la ejecución de las pruebas de xcodebuild después del primer fallo.

Tengo alrededor de 300 pruebas de XCTest de interfaz de usuario que quiero ejecutar en cada solicitud de extracción.
Uso algunos comandos, como este:

xcodebuild \
-project App.xcodeproj \
-scheme App \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 8,OS=15.0' \
test

Pero quiero detenerme después del primer fallo (para ahorrar tiempo en el servidor de compilación). ¿Hay alguna forma de hacerlo?

Actualización:
xcodebuild no tiene ninguna bandera para esto.
Ahora intento obtener el flujo de resultados y verificar si alguna prueba ha fallado.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en desarrollo de iOS, no hay una opción o bandera directa en xcodebuild para detener la ejecución después del primer caso de prueba fallido. Sin embargo, puedes lograrlo obteniendo el flujo de resultados y verificando si algún test ha fallado. Si algún test ha fallado, puedes terminar el proceso de xcodebuild para ahorrar tiempo en el servidor de compilación.

    Aquí tienes una aproximación que puedes seguir:

    1. Modifica tu comando existente para redirigir la salida a un archivo de texto, de la siguiente manera:
    xcodebuild \
      -project App.xcodeproj \
      -scheme App \
      -sdk iphonesimulator \
      -destination 'platform=iOS Simulator,name=iPhone 8,OS=15.0' \
      -resultBundlePath TestResults \
      test > output.txt
    

    Este comando generará un paquete de resultados en el directorio TestResults y redireccionará la salida de la consola a un archivo de texto llamado output.txt.

    1. Después de que el comando finalice, lee el contenido del archivo de salida y verifica si contiene algún caso de prueba fallido. Puedes hacer esto utilizando un script como este:
    resultado=$(cat output.txt)
    echo "$resultado" | grep "failed test"  # verifica si algún test ha fallado
    
    if [ $? -eq 0 ]; then  # si algún test ha fallado
      echo "Se ha producido un fallo en algún caso de prueba. Terminando..."  # muestra un mensaje
      kill -9 $(ps aux | grep '[x]codebuild' | awk '{print $2}')  # termina el proceso de xcodebuild
    fi
    

    Este script lee el contenido del archivo output.txt, busca la cadena “failed test” utilizando el comando grep y verifica el estado de salida del comando grep. Si el estado es 0 (lo que significa que se encontró la cadena), imprime un mensaje y termina el proceso de xcodebuild.

    Puedes ejecutar este script después del comando de xcodebuild y antes de cualquier otro comando en tu canalización de CI/CD. De esta manera, si algún caso de prueba falla, el proceso de xcodebuild se terminará inmediatamente y podrás ahorrar tiempo en el servidor de compilación.

    ¡Espero que esto te sea útil! Avísame si tienes alguna pregunta.

Comments are closed.