Cómo encontrar los resultados de las pruebas de la plataforma de dispositivos para desarrolladores

En esta guía, se describe cómo encontrar los resultados de las pruebas y los ejecutables activados siguiendo la guía de Device Run de Developer Device Platform.

Antes de comenzar

En estos pasos, se supone que ya creaste un proyecto de Google Cloud , completaste los pasos de configuración en la guía de inicio rápido de Developer Device Platform y te autenticaste con gcloud en la terminal.

En la línea de comandos

Consulta un resumen básico de tu prueba o resultado ejecutable con este comando y tu ID de sesión:

gcloud beta device-run sessions describe SESSION_ID

Esto devuelve resultados similares a los siguientes:

Session SESSION_ID finished with result [FAILED].
Result files are stored at [https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/SESSION_ID/].
JOB NAME  EXECUTION NAME  EXECUTION RESULT
job-000   all             FAILED: 2 test cases failed, 5 passed
job-001   all             PASS

Para cada ID de tipo de dispositivo que especificaste con la marca --device, se genera un trabajo en la sesión. El índice del trabajo seguirá el orden de los IDs de tus dispositivos. Se esperan fallas en las pruebas, que se deben investigar y resolver a través de mejoras y ejecuciones iterativas.

Para obtener detalles adicionales sobre una sesión, agrega --full al comando describe que ejecutaste antes, de la siguiente manera:

gcloud beta device-run sessions describe SESSION_ID --full

Esto devuelve resultados similares a los siguientes:

Instrumentación de Android

name: projects/PROJECT_ID/locations/global/sessions/session-370961e1
sessionConfig:
  displayName: instrumentation-session
  jobConfigs:

    -   action:
      androidInstrumentationTest:
        testInstallable:
          files:
        -   gcsInputFile:
              path: gs://BUCKET_NAME/automation/inputs/2026-07-30_11:28.31915956_8514/app_name_test.apk
    allocationConfig:
      deviceConfigs:
    -   actions:
        -   androidInstallPackages:
            installables:
            -   files:
                -   gcsInputFile:
                  path: gs://BUCKET_NAME/automation/inputs/2026-07-30_11:28.31915956_8514/app_name.apk
        -   androidLogcat: {}
        requirement:
          deviceId: pa3q-35
    displayName: job-000
  outputDirectoryConfig:
    gcsOutputDirectory:
      path: gs://BUCKET_NAME/automation/sessions
sessionReport:
  endTime: '2026-07-30T03:30:05.838Z'
  id: 6587313f-fdf7-418a-a9b9-b6fa98dff838
  jobReports:
    -   displayName: job-000
    endTime: '2026-07-30T03:30:04.601Z'
    executionReports:
        -   displayName: all
      endTime: '2026-07-30T03:30:02.151Z'
      id: 29b167dd-dde9-4ea9-b2cd-738049083fc9
      outputFiles:
            -   gcsOutputFile:
          path: gs://PROJECT_ID-devicerun/automation/sessions/session-370961e1/job-000/execution-000/logcat.txt
            -   gcsOutputFile:
          path: gs://PROJECT_ID-devicerun/automation/sessions/session-370961e1/job-000/execution-000/instrument.log
            -   gcsOutputFile:
          path: gs://PROJECT_ID-devicerun/automation/sessions/session-370961e1/job-000/execution-000/junit.xml
      result:
        cause:
          summary:
            message: One or more test assertions or test methods failed. Inspect the
              test runner logs and structured test results for details.
            reason: TEST_CASE_FAILURE
            type: CUSTOMER
        resultType: FAILED
      startTime: '2026-07-30T03:29:32.769Z'
      status:
        progressMessages:
                -   2 test cases failed, 5 passed
        statusType: DONE
    id: 7974e37a-2928-4aaf-abba-3a8b6bae853b
    result:
      cause:
        summary:
          message: Job has one or more failed tests. See execution reports for details.
          reason: JOB_HAS_FAILED_TESTS
      resultType: FAILED
    startTime: '2026-07-30T03:28:53.756Z'
    status:
      statusType: DONE
  result:
    cause:
      summary:
        message: Session has one or more failed jobs. See job reports for details.
        reason: SESSION_HAS_FAILED_JOBS
    resultType: FAILED
  startTime: '2026-07-30T03:28:52.702Z'
  status:
    statusType: DONE

Ejecutable de Android

name: projects/PROJECT_ID/locations/global/sessions/session-8a41c2b0
sessionConfig:
  displayName: android-executable-session
  jobConfigs:

    -   action:
      androidNativeBinary:
        androidNativeBinary:
          gcsInputFile:
            path: gs://BUCKET_NAME/automation/inputs/2026-07-30_11:28.31915956_8514/my_executable
        args:
        -   --example_flag=/data/local/tmp/example_value
        -   --threads=4
    allocationConfig:
      deviceConfigs:
    -   actions:
        -   androidLogcat: {}
        -   androidPushFiles:
            fileConfigs:
            -   destinationPath: /data/local/tmp/model.tflite
                sourceFile:
                  gcsInputFile:
                    path: gs://BUCKET_NAME/automation/inputs/2026-07-30_11:28.31915956_8514/model.tflite
        requirement:
          deviceId: shiba-34
    displayName: job-000
  outputDirectoryConfig:
    gcsOutputDirectory:
      path: gs://BUCKET_NAME/automation/sessions
sessionReport:
  endTime: '2026-07-30T03:30:05.838Z'
  id: 4b9120ec-fdf7-418a-a9b9-b6fa98dff838
  jobReports:
    -   displayName: job-000
    endTime: '2026-07-30T03:30:04.601Z'
    executionReports:
        -   displayName: execution-000
      endTime: '2026-07-30T03:30:02.151Z'
      id: 19a267dd-dde9-4ea9-b2cd-738049083fc9
      outputFiles:
            -   gcsOutputFile:
          path: gs://PROJECT_ID-devicerun/automation/sessions/session-8a41c2b0/job-000/execution-000/logcat.txt
            -   gcsOutputFile:
          path: gs://PROJECT_ID-devicerun/automation/sessions/session-8a41c2b0/job-000/execution-000/output.log
      result:
        resultType: PASSED
      startTime: '2026-07-30T03:29:32.769Z'
      status:
        statusType: DONE
    id: 8874e37a-2928-4aaf-abba-3a8b6bae853b
    result:
      resultType: PASSED
    startTime: '2026-07-30T03:28:53.756Z'
    status:
      statusType: DONE
  result:
    resultType: PASSED
  startTime: '2026-07-30T03:28:52.702Z'
  status:
    statusType: DONE

XCTest de iOS

Este es el resultado real de gcloud beta device-run sessions describe SESSION_ID --full de una ejecución de XCTest de iOS en vivo con todas las marcas habilitadas:

name: projects/PROJECT_ID/locations/global/sessions/session-4b941167-5629-4abb-a8a1-a9814bf16847
sessionConfig:
  displayName: xctest-session
  jobConfigs:

    -   action:
      iosXcTest:
        testsZip:
          gcsInputFile:
            path: gs://BUCKET_NAME/automation/inputs/2026-10-09_11:33.01234567_ABCD/MyTests.zip
    allocationConfig:
      deviceConfigs:
        -   actions:
            -   iosInstallPackages:
            ipas:
                -   gcsInputFile:
                path: gs://BUCKET_NAME/automation/inputs/2026-10-09_11:33.01234567_ABCD/AdditionalApp.ipa
        requirement:
          deviceId: iphonese3-18-4
    displayName: job-000
  outputDirectoryConfig:
    gcsOutputDirectory:
      path: gs://BUCKET_NAME/automation/sessions

En este resultado, busca los archivos extraídos de la app que se está probando en .../artifacts/output.txt (sin com.example.app/Documents/).

En un navegador web

Para obtener todos los detalles, carga la URL en el bucket que contiene los resultados de la prueba desde el resultado de la prueba. Debería verse de la siguiente manera: https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/SESSION_ID/

Las sesiones aparecen en el siguiente formato de ruta de acceso en el almacenamiento: gs://BUCKET_NAME/automation/sessions/SESSION_ID/job-000/EXECUTION_ID/

Para explorar tus registros en la interfaz web de la consola de Google Cloud , sigue estos pasos:

  1. En un navegador, agrega el nombre de tu proyecto como se usa en el comando gcloud config set project a la URL https://console.cloud.google.com/?project= y carga la página.
  2. Expande el menú de la esquina superior izquierda.
  3. Busca Cloud Storage.
  4. En el menú de almacenamiento, selecciona Buckets.
  5. En la primera columna, haz clic en el nombre de tu proyecto.
  6. Haz clic en Automatización.
  7. Haz clic en Sesiones.
  8. En el campo Filtro, pega el ID de sesión de la última ejecución de prueba (consulta el resultado de la prueba).
  9. Haz clic en el nombre de la sesión resultante.
  10. Selecciona job-* para ver junit.xml (para las ejecuciones de instrumentación de Android y XCTest de iOS), que contiene detalles de los resultados combinados de todas las ejecuciones y los casos de prueba del trabajo.
  11. Abre execution-* (o execution-*-rerun-* cuando los reintentos de pruebas inestables se configuran con --flaky-test-attempts) para obtener un desglose de cada ejecución o fragmento individual. Según el tipo de sesión y las marcas configuradas, esta carpeta puede contener numerosos artefactos. Consulta Comprende los resultados para obtener más detalles.
  12. Visita las URLs públicas y autenticadas para comprender los resultados.

Estructura de archivos

Explora los archivos de registro en tu bucket de Cloud Storage para comprender mejor la ejecución de tu sesión. La estructura del archivo se parece a la siguiente:

Instrumentación de Android


-   gs://BUCKET_NAME/automation
    -   inputs/
        -   2026-05-29_10:13.026220_JZTM
            -   app.apk
            -   test.apk
    -   sessions/
        -   SESSION_ID
            -   job-000/
                -   junit.xml
                -   execution-000/
                    -   artifacts/
                        -   sdcard/
                            -   output.txt
                    -   bugreport.zip
                    -   dumpsys.txt
                    -   instrument.log
                    -   junit.xml
                    -   logcat.txt
                    -   video.mp4
                -   execution-001/
                    -   instrument.log
                    -   junit.xml
                    -   logcat.txt
                    -   video.mp4
            -   job-001/
        -   SESSION_ID

Ejecutable de Android


-   gs://BUCKET_NAME/automation
    -   inputs/
        -   2026-05-29_10:13.026220_JZTM
            -   my_executable
            -   model.tflite
    -   sessions/
        -   SESSION_ID
            -   job-000/
                -   execution-000/
                    -   artifacts/
                        -   data/
                            -   local/
                                -   tmp/
                                    -   results.json
                    -   bugreport.zip
                    -   dumpsys.txt
                    -   logcat.txt
                    -   output.log
                    -   video.mp4
            -   job-001/
        -   SESSION_ID

XCTest de iOS


-   gs://BUCKET_NAME/
    -   automation/
        -   inputs/
            -   2026-10-09_11:33.01234567_ABCD/
                -   AdditionalApp.ipa
                -   MyTests.zip
                -   data.txt
        -   sessions/
            -   SESSION_ID/
                -   job-000/
                    -   execution-000/
                        -   artifacts/
                            -   output.txt
                        -   junit.xml
                        -   system.log

En este resultado, comprende la ruta de acceso extraída en artifacts/. En el caso de --paths-to-pull=com.example.app:/Documents/output.txt, cuando se extrae de la app que se está probando (AUT), el servicio quita /Documents y coloca el archivo directamente en artifacts/output.txt (no en artifacts/com.example.app/Documents/output.txt). Si se extrae de una app adicional (--additional-apps), se coloca en artifacts/<bundle_id>-genfiles/output.txt.

Comprende los resultados

Para las ejecuciones de instrumentación de Android y XCTest de iOS, los archivos junit.xml que se generan en el resultado son archivos en formato XML de JUnit estándar. Se escribe un junit.xml a nivel de la ejecución en cada directorio execution-*, y se escribe un junit.xml combinado en cada directorio job-*. Estos archivos contienen los resultados por método de prueba, lo que te permite revisar el estado específico de aprobación o falla, el tiempo de ejecución y los seguimientos de errores de cada método de prueba individual. Puedes integrar y analizar estos archivos con facilidad con la mayoría de los sistemas de integración continua y entrega continua (CI/CD) y las herramientas de informes de pruebas.

Además de los resultados de las pruebas estructuradas, cada directorio execution-* contiene registros y artefactos específicos de la plataforma:

  • Las ejecuciones de instrumentación de Android incluyen instrument.log para el resultado sin procesar del ejecutor de instrumentación y logcat.txt para el registro del sistema Android de todo el dispositivo. Cuando se habilita con --bugreport, --dumpsys o --video, el directorio de ejecución también incluye bugreport.zip, dumpsys.txt y grabaciones de video de la pantalla.
  • Las ejecuciones de ejecutables de Android incluyen output.log, que captura la salida estándar (stdout) y el error estándar (stderr) que escribe tu ejecutable, y logcat.txt (que se recopila de forma predeterminada para cada trabajo de Android), que captura el registro del sistema de Android en todo el dispositivo, junto con cualquier artefacto opcional --bugreport, --dumpsys o --video.
  • Las ejecuciones de XCTest de iOS incluyen system.log (que se recopila de forma predeterminada para cada trabajo de XCTest de iOS), que captura el registro del sistema sin procesar del dispositivo iOS, y cualquier informe de fallas de diagnóstico de .ips si un proceso falló durante la ejecución de la prueba. Cuando se habilita con --video, cada video de caso de prueba de IU grabado se almacena en testcases/TEST_CLASS/TEST_METHOD/video.mp4.
  • Los archivos de dispositivo extraídos que se especifican con --paths-to-pull se almacenan en la subcarpeta artifacts/ del directorio de ejecución.
    • En el caso de las ejecuciones de Android, los archivos extraídos conservan su ruta de acceso del dispositivo en artifacts/ (por ejemplo, artifacts/sdcard/output.txt o artifacts/data/local/tmp/results.json).
    • En el caso de las ejecuciones de XCTest para iOS, los archivos extraídos de un contenedor de datos de la app con --paths-to-pull=BUNDLE_ID:DEVICE_PATH se organizan por ID del paquete en artifacts/:
      • Si com.example.app es la app que se está probando, se guarda directamente en artifacts/output.txt.
      • Si com.example.app es una app adicional (--additional-apps), se guarda en artifacts/com.example.app-genfiles/output.txt.

Documentación de respaldo

¿Qué sigue?

A continuación, prueba la API de Device Streaming de Developer Device Platform.