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/
Navegação
Para procurar seus registros na interface da Web do Google Cloud console, siga estas etapas:
- Em um navegador, anexe o nome do projeto usado no comando
gcloud config set projectao URLhttps://console.cloud.google.com/?project=e carregue a página. - Expanda o menu no canto superior esquerdo.
- Encontre 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 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. - 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. - 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.logpara 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. - 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, 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 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.ipsse um processo falhar durante a execução do teste. - Arquivos de dispositivos 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 (link em inglês)
- Sobre buckets do Cloud Storage
A seguir
Em seguida, teste nossa API Device Streaming da Developer Device Platform .