Ejecución de dispositivos de la plataforma de dispositivos para desarrolladores para iOS

En esta guía, se describe cómo ejecutar una XCTest de iOS con la CLI de gcloud beta device-run y encontrar los resultados en la consola de Google Cloud . Se supone que tienes una cuenta y un proyecto de Google Cloud .

Para usar la CLI de device-run, deberás proporcionar el ID del proyecto de Google Cloud. Consulta gcloud beta device-run para obtener un resumen de los comandos.

Antes de comenzar

En estos pasos, se supone que ya hiciste lo siguiente:

  1. Creaste un proyecto de Google Cloud .
  2. Configura la Plataforma de dispositivos para desarrolladores siguiendo la guía de inicio rápido.
  3. Te autenticaste con gcloud en la terminal.
  4. Revisé la descripción general de Device Run para obtener información general.
  5. Compilaste tus pruebas y las empaquetaste en un archivo ZIP.

Paso 1: Elige tipos de dispositivos

Con la CLI de device-run, las pruebas de iOS se pueden ejecutar en todos los dispositivos físicos disponibles. Para ver la lista completa de dispositivos disponibles, visita el Catálogo de dispositivos interactivo o ejecuta el siguiente comando:

gcloud beta device-run devices list

Resultado de ejemplo:

ID                MAKE   NAME           MODEL        HARDWARE_TYPE  OS_VERSION  CAPACITY  AVAILABILITY  PRODUCTS
iphonese3-18-4    Apple  iPhone SE 3             iphonese3    PHYSICAL       18.4        NONE      NONE          Automation
iphonese3-26-3    Apple  iPhone SE 3             iphonese3    PHYSICAL       26.3        NONE      NONE          Automation

Consulta el Catálogo de dispositivos para obtener información sobre cómo filtrar esta lista. Para segmentar un dispositivo específico para la ejecución de la prueba, usa su ID correspondiente (p. ej., iphonese3-18-4) en el comando de envío.

Paso 2: Prepara y empaqueta tu XCTest

Antes de ejecutar las pruebas, debes compilarlas, asegurarte de que estén firmadas, verificar las firmas de código y empaquetar los artefactos resultantes en un archivo ZIP que contenga tu configuración de .xctestrun y los paquetes de prueba de la aplicación.

1. Crea tus pruebas para dispositivos iOS físicos

Abre tu proyecto en Xcode, compila tu app y prueba los destinos para realizar pruebas:

  1. Asegúrate de que la firma de código esté configurada correctamente en Xcode (especifica un perfil de aprovisionamiento y una identidad de desarrollador válidos) tanto para el destino de la app como para el destino del ejecutor de pruebas.
  2. Compila para realizar pruebas con Xcode (Product > Build For > Testing) o con xcodebuild.

    En el caso de un espacio de trabajo, haz lo siguiente:

    xcodebuild build-for-testing \
      -workspace YourProject.xcworkspace \
      -scheme YourScheme \
      -derivedDataPath ./build \
      -destination "generic/platform=iOS"
    

    Para un proyecto independiente, haz lo siguiente:

    xcodebuild build-for-testing \
      -project YourProject.xcodeproj \
      -scheme YourScheme \
      -derivedDataPath ./build \
      -destination "generic/platform=iOS"
    

Esto genera los productos de compilación en ./build/Build/Products.

2. Verifica los productos y las firmas de la compilación

Después de la compilación, verifica que el manifiesto de la aplicación, el ejecutor y .xctestrun se hayan generado en ./build/Build/Products/. Si se firmó de forma local, puedes verificar las firmas del paquete con codesign:

  1. Verifica el paquete de aplicación:

    codesign --verify --deep --verbose ./build/Build/Products/Debug-iphoneos/YourApp.app
    

    Resultado esperado: YourApp.app: valid on disk

  2. Si ejecutas una XCUITest, también verifica el paquete del ejecutor de pruebas:

    codesign --verify --deep --verbose ./build/Build/Products/Debug-iphoneos/YourApp-Runner.app
    

    Resultado esperado: YourApp-Runner.app: valid on disk

3. Crea el archivo ZIP

Comprime el directorio Debug-iphoneos y el archivo .xctestrun ubicado en la carpeta de productos de salida de la compilación en un solo archivo ZIP.

Ejecuta el siguiente comando desde el directorio de productos de compilación:

cd ./build/Build/Products
zip -r MyTests.zip Debug-iphoneos *.xctestrun

Esto crea el MyTests.zip empaquetado que está listo para usarse con la marca --test.

Paso 3: Ejecuta tu XCTest

Ten en cuenta que estas marcas son obligatorias:

  • Dispositivo: Especifica un dispositivo con --device: --device iphonese3-18-4
  • Test: Especifica el archivo ZIP de prueba con --test: --test ./MyTests.zip

Para ejecutar tu XCTest, usa el comando gcloud beta device-run sessions submit xctest. Debes proporcionar el archivo ZIP de prueba (MyTests.zip) compilado en el paso anterior.

Para ejecutar una sesión de prueba básica, haz lo siguiente:

gcloud beta device-run sessions submit xctest \
  --device iphonese3-18-4 \
  --test ./MyTests.zip

Cuando comienza la ejecución, la CLI muestra el ID de sesión creado y el destino de Cloud Storage en el que se almacenarán los resultados:

Creating session [session-ee78b0ed] in location [global].
Result files will be stored at [https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/session-ee78b0ed/].

Waiting for session [session-ee78b0ed] to complete....

Paso 4: Cómo configurar la ejecución de la prueba

Puedes personalizar la ejecución de la prueba con las siguientes marcas opcionales (aunque se requiere al menos una instancia de la marca --device):

  • Varios dispositivos: Especifica la marca --device varias veces para ejecutar la misma prueba en varios dispositivos de forma simultánea: --device iphonese3-18-4 --device iphonese3-26-3 o --device iphonese3-18-4,iphonese3-26-3
  • Apps adicionales: Instala uno o más paquetes .ipa adicionales antes de iniciar la prueba con --additional-apps: --additional-apps=/path/to/AdditionalApp.ipa
  • Archivo .xctestrun personalizado: Pasa un archivo de configuración personalizado con --xctestrun-file: --xctestrun-file=/path/to/CustomTests.xctestrun
  • Tiempo de espera de la prueba: Limita la duración de la ejecución: --xctest-timeout=10m (el rango válido es de 1m a 1h y el valor predeterminado es 5m).
  • Etiquetas: Adjunta metadatos definidos por el usuario a la sesión: --labels=env=staging,owner=my-team
  • Push files to device: Envía archivos al contenedor de datos de la app antes de la ejecución de la prueba: --other-files-to-push=/tmp/data.txt=com.example.app:/Documents/data.txt
  • Pull files from device: Extrae archivos del contenedor de datos de app después de la ejecución de prueba: --paths-to-pull=com.example.app:/Documents/output.txt
  • Reintentos de pruebas inestables: Establece la cantidad máxima de intentos para volver a ejecutar pruebas inestables: --flaky-test-attempts=3 (el valor predeterminado es 1 intento).
  • Bucket de Cloud Storage personalizado: Especifica un bucket de Cloud Storage personalizado para las entradas y salidas: --bucket-name=my-custom-bucket (el valor predeterminado es PROJECT_ID-devicerun).
  • Dado que subir archivos ZIP o IPA grandes puede llevar mucho tiempo, puedes hacer referencia directamente a tus archivos con sus rutas de acceso de gs:// de Cloud Storage para ahorrar tiempo de carga.

Paso 5: Explora y administra la ejecución de la prueba

Puedes hacer un seguimiento de las ejecuciones activas y administrar las sesiones históricas con los siguientes comandos:

  • Describe session: Consulta el progreso en tiempo real o los resultados finales de una sesión: gcloud beta device-run sessions describe SESSION_ID Agrega --full para ver detalles completos, incluidas las asignaciones de dispositivos, los IDs de ejecución y las rutas de artefactos de Cloud Storage.
  • List sessions: Consulta tus ejecuciones recientes: gcloud beta device-run sessions list --limit=10
  • Cancelar sesión: Detiene una sesión de prueba en ejecución: gcloud beta device-run sessions cancel SESSION_ID
  • Cancelar operación: Detiene una operación pendiente o activa: gcloud beta device-run operations cancel OPERATION_ID

¿Qué sigue?

A continuación, busca y analiza los registros.