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 que se activan después de la guía Ejecución de dispositivos de la plataforma de dispositivos para desarrolladores.

Antes de comenzar

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

En la línea de comandos

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

gcloud beta device-run sessions describe SESSION_ID

Que muestra 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

Por cada ID de tipo de dispositivo que especificaste con la marca --device, se genera un trabajo en la sesión. El índice de trabajo seguirá el orden de tus IDs de dispositivo. Se esperan fallas en las pruebas, y 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 ejecutado anteriormente de la siguiente manera:

gcloud beta device-run sessions describe SESSION_ID --full

Que muestra 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 desinfectado 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 para la app en prueba en .../artifacts/output.txt (sin com.example.app/Documents/).

En el navegador web

Para obtener todos los detalles, carga la URL del bucket que contiene los resultados de la prueba desde el resultado de la prueba. Debería ser similar a 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 buscar tus registros en la Google Cloud interfaz web de la consola, sigue estos pasos:

  1. En un navegador, agrega el nombre de tu proyecto tal 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ú en 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 Automation.
  7. Haz clic en Sessions.
  8. En el campo Filter, pega el ID de sesión de la ejecución de prueba más reciente (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 la instrumentación de Android y las ejecuciones de XCTest de iOS ), que contiene detalles de los resultados combinados en todas las ejecuciones y casos de prueba del trabajo.
  11. Abre execution-* (o execution-*-rerun-* cuando se vuelven a intentar las 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 varios artefactos. Consulta Comprender 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 obtener más información sobre la ejecución de tu sesión. La estructura del archivo es similar 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/. Para --paths-to-pull=com.example.app:/Documents/output.txt, cuando se extrae de la app en prueba (AUT), el servicio quita /Documents y coloca el archivo directamente en artifacts/output.txt (no 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.

Comprender los resultados

Para la instrumentación de Android y las ejecuciones de XCTest de iOS, los archivos junit.xml generados en tu resultado son archivos XML de JUnit estándar. Se escribe un junit.xml a nivel de 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 de aprobación o falla específico, el tiempo de ejecución y los seguimientos de errores para cada método de prueba individual. Puedes integrar y analizar estos archivos fácilmente 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 pruebas estructurados, 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 en 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 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 syslog sin procesar del dispositivo iOS, y cualquier .ips informe de fallas de diagnóstico si un proceso falló durante la ejecución de prueba.
  • Los archivos de dispositivos extraídos especificados con --paths-to-pull se almacenan en la subcarpeta artifacts/ del directorio de ejecución.
    • Para 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).
    • Para las ejecuciones de XCTest de 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 de paquete en artifacts/:
      • Si com.example.app es la app en prueba, 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 nuestra API de Device Streaming de la Developer Device Platform .