Encontrar os resultados do teste da plataforma do dispositivo de desenvolvimento

Este guia descreve como encontrar os resultados de testes e executáveis acionados seguindo o guia Developer Device Platform Device Run.

Antes de começar

Estas etapas pressupõem que você já criou um Google Cloud projeto, concluiu as etapas de configuração na plataforma de dispositivos para desenvolvedores Guia de início rápido e fez a autenticação com gcloud no terminal.

Na linha de comando

Confira um resumo básico do resultado do teste ou executável com este comando e o ID da sessão:

gcloud beta device-run sessions describe SESSION_ID

Que retorna resultados semelhantes a:

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 especificado com a flag --device, um job é gerado na sessão. O índice do job segue a ordem dos IDs de dispositivo. As falhas de teste são esperadas e precisam ser investigadas e resolvidas por melhorias e execuções iterativas.

Para mais detalhes sobre uma sessão, anexe --full ao comando describe executado anteriormente, desta forma:

gcloud beta device-run sessions describe SESSION_ID --full

Que retorna resultados semelhantes a:

Instrumentação do 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

Executável do 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 do iOS

Confira a saída higienizada real de gcloud beta device-run sessions describe SESSION_ID --full de uma execução do XCTest do iOS em tempo real com todas as flags ativadas:

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

Nessa saída, encontre os arquivos extraídos do app em teste em .../artifacts/output.txt (sem com.example.app/Documents/).

No navegador da Web

Para conferir todos os detalhes, carregue o URL do bucket que contém os resultados do teste na saída do teste. Ele deve ser semelhante a: https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/SESSION_ID/

As sessões aparecem no seguinte formato de caminho no armazenamento: gs://BUCKET_NAME/automation/sessions/SESSION_ID/job-000/EXECUTION_ID/

Para procurar seus registros na interface da Web do Google Cloud console, siga estas etapas:

  1. Em um navegador, anexe o nome do projeto usado no comando gcloud config set project ao URL https://console.cloud.google.com/?project= e carregue a página.
  2. Expanda o menu no canto superior esquerdo.
  3. Encontre Cloud Storage.
  4. No menu de armazenamento, selecione Buckets.
  5. Na primeira coluna, clique no nome do projeto.
  6. Clique em Automação.
  7. Clique em Sessões.
  8. No campo Filtro, cole o ID da sessão da execução de teste mais recente (consulte a saída do teste).
  9. Clique no nome da sessão resultante.
  10. Selecione job-* para conferir junit.xml (para execuções de instrumentação do Android e iOS XCTest), que contém detalhes de resultados combinados em todas as execuções e casos de teste no job.
  11. Abra execution-* (ou execution-*-rerun-* quando as novas tentativas de teste instáveis são configuradas com --flaky-test-attempts) para conferir uma análise detalhada de cada execução ou fragmento individual. Dependendo do tipo de sessão e das flags configuradas, essa pasta pode conter vários artefatos. Consulte Entender os resultados para mais detalhes.
  12. Acesse os URLs públicos e autenticados para entender os resultados.

Estrutura do arquivo

Explore os arquivos de registro no bucket do Cloud Storage para entender melhor a execução da sessão. A estrutura do arquivo é semelhante a:

Instrumentação do 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

Executável do 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 do 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

Nessa saída, entenda o caminho extraído em artifacts/. Para --paths-to-pull=com.example.app:/Documents/output.txt, ao extrair do app em teste (AUT, na sigla em inglês), o serviço remove /Documents e coloca o arquivo diretamente em artifacts/output.txt (não artifacts/com.example.app/Documents/output.txt). Se extraído de um app adicional (--additional-apps), ele será colocado em artifacts/<bundle_id>-genfiles/output.txt.

Entender os resultados

Para execuções de instrumentação do Android e XCTest do iOS, os arquivos junit.xml gerados na saída são arquivos XML JUnit padrão. Um junit.xml no nível de execução é gravado em cada diretório execution-*, e um junit.xml mesclado é gravado em cada diretório job-*. Esses arquivos contêm os resultados por método de teste, permitindo que você revise o status de aprovação ou falha específico, o tempo de execução e os traces de erro de cada método de teste individual. É possível integrar e analisar esses arquivos com a maioria dos sistemas de integração contínua e entrega contínua (CI/CD) e ferramentas de relatórios de teste.

Além dos resultados de testes estruturados, cada diretório execution-* contém registros e artefatos específicos da plataforma:

  • Execuções de instrumentação do Android incluem instrument.log para saída bruta do executor de instrumentação e logcat.txt para o registro do sistema Android em todo o dispositivo. Quando ativado com --bugreport, --dumpsys ou --video, o diretório de execução também inclui bugreport.zip, dumpsys.txt e gravações de vídeo da tela.
  • Execuções executáveis do Android incluem output.log, que captura a saída padrão (stdout) e o erro padrão (stderr) gravados pelo executável, e logcat.txt (coletado por padrão para cada job do Android), que captura o registro do sistema Android em todo o dispositivo, além de artefatos opcionais --bugreport, --dumpsys, ou --video.
  • Execuções do XCTest do iOS incluem system.log (coletado por padrão para cada job do XCTest do iOS), que captura o syslog bruto do dispositivo iOS, e relatórios de falhas de diagnóstico .ips se um processo falhar durante a execução do teste.
  • Arquivos de dispositivos extraídos especificados com --paths-to-pull são armazenados na subpasta artifacts/ do diretório de execução.
    • Para execuções do Android, os arquivos extraídos preservam o caminho do dispositivo em artifacts/ (por exemplo, artifacts/sdcard/output.txt ou artifacts/data/local/tmp/results.json).
    • Para execuções do XCTest do iOS, os arquivos extraídos de um contêiner de dados do app usando --paths-to-pull=BUNDLE_ID:DEVICE_PATH são organizados por ID do pacote em artifacts/:
      • Se com.example.app for o app em teste, ele será salvo diretamente em artifacts/output.txt.
      • Se com.example.app for um app adicional (--additional-apps), ele será salvo em artifacts/com.example.app-genfiles/output.txt.

Documentação de apoio

A seguir

Em seguida, teste nossa API Device Streaming da Developer Device Platform .