Neste guia, descrevemos 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 projeto do Google Cloud , concluiu as etapas de configuração no Guia de início rápido da Developer Device Platform e fez a autenticação com o gcloud no terminal.
Na linha de comando
Veja um resumo básico do resultado do teste ou do executável com este comando e seu ID de sessão:
gcloud beta device-run sessions describe SESSION_ID
O 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 vai seguir a ordem dos IDs do dispositivo. As falhas de teste são esperadas e precisam ser investigadas e resolvidas por meio de melhorias e execuções iterativas.
Para ver mais detalhes sobre uma sessão, anexe --full ao comando describe executado anteriormente, desta forma:
gcloud beta device-run sessions describe SESSION_ID --full
O 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 limpa real de gcloud beta device-run sessions
describe SESSION_ID --full de uma execução do XCTest do iOS 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 ver todos os detalhes, carregue o URL do bucket que contém os resultados do teste na saída do teste. Ele deve ser parecido com:
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/
Navegação
Para procurar os registros na interface da Web do console do Google Cloud , siga estas etapas:
- Em um navegador, adicione o nome do projeto usado no comando
gcloud config set projectao URLhttps://console.cloud.google.com/?project=e carregue a página. - Abra o menu no canto superior esquerdo.
- Encontre o Cloud Storage.
- No menu de armazenamento, selecione Buckets.
- Na primeira coluna, clique no nome do projeto.
- Clique em Automação.
- Clique em Sessões.
- No campo Filtro, cole o ID da sessão da execução de teste mais recente (consulte a saída do teste).
- Clique no nome da sessão resultante.
- Selecione job-* para ver
junit.xml(para execuções de instrumentação do Android e XCTest do iOS), que contém detalhes de resultados combinados de todas as execuções e casos de teste no job. - Abra execution-* (ou execution-*-rerun-* quando as novas tentativas de teste instável
estiverem configuradas com
--flaky-test-attempts) para ver um detalhamento de cada execução ou fragmento individual. Dependendo do tipo de sessão e das flags configuradas, essa pasta pode conter vários artefatos, dependendo do tipo de sessão e das flags configuradas. Consulte Entender os resultados para mais detalhes. - Acesse os URLs públicos e autenticados para entender os resultados.
Estrutura do arquivo
Analise 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 é colocado em
artifacts/<bundle_id>-genfiles/output.txt.
Entenda 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 da 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ê analise o status específico de aprovação ou falha, o tempo de execução e os rastreamentos de erros
de cada método de teste individual. É possível integrar e analisar esses arquivos
com a maioria dos sistemas de integração e entrega contínuas (CI/CD) e
ferramentas de relatórios de teste.
Além dos resultados de teste estruturados, cada diretório execution-* contém
registros e artefatos específicos da plataforma:
- As execuções de instrumentação do Android incluem
instrument.logpara a saída bruta do executor de instrumentação elogcat.txtpara o registro do sistema Android em todo o dispositivo. Quando ativado com--bugreport,--dumpsysou--video, o diretório de execução também incluibugreport.zip,dumpsys.txte gravações de vídeo da tela. - As execuções de 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, elogcat.txt(coletado por padrão para cada job do Android), que captura o registro do sistema Android em todo o dispositivo, além de qualquer artefato opcional--bugreport,--dumpsysou--video. - As execuções do XCTest para iOS incluem
system.log(coletado por padrão para cada job do XCTest para iOS), que captura o syslog bruto do dispositivo iOS, e todos os relatórios de diagnóstico de falhas.ipsse um processo falhar durante a execução do teste. Quando ativado com--video, cada vídeo de caso de teste de interface gravado é armazenado emtestcases/TEST_CLASS/TEST_METHOD/video.mp4. - Os arquivos de dispositivo extraídos especificados com
--paths-to-pullsão armazenados na subpastaartifacts/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.txtouartifacts/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_PATHsão organizados por ID do pacote emartifacts/:- Se
com.example.appfor o app em teste, ele será salvo diretamente emartifacts/output.txt. - Se
com.example.appfor um app adicional (--additional-apps), ele será salvo emartifacts/com.example.app-genfiles/output.txt.
- Se
- Para execuções do Android, os arquivos extraídos preservam o caminho do dispositivo em
Documentação de apoio
- Conceitos básicos para testes de apps Android
- Criar testes instrumentados
- Documentação do XCTest
- Sobre os buckets do Cloud Storage
A seguir
Em seguida, teste a API Device Streaming da Developer Device Platform.