Ce guide explique comment trouver les résultats des tests et des exécutables déclenchés en suivant le guide Device Run de Developer Device Platform.
Avant de commencer
Ces étapes supposent que vous avez déjà créé un projet Google Cloud , suivi les étapes de configuration du guide de démarrage rapide de Developer Device Platform et que vous vous êtes authentifié avec gcloud dans le terminal.
En ligne de commande
Pour afficher un résumé de base de votre test ou du résultat exécutable, utilisez cette commande et votre ID de session :
gcloud beta device-run sessions describe SESSION_ID
qui renvoie des résultats semblables à ceux-ci :
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
Pour chaque ID de type d'appareil que vous avez spécifié avec l'option --device, un job est généré dans la session. L'index de job suivra l'ordre des ID de vos appareils. Les échecs de test sont attendus et doivent être examinés et résolus par le biais d'améliorations et d'exécutions itératives.
Pour obtenir des détails supplémentaires sur une session, ajoutez --full à la commande describe précédemment exécutée, comme suit :
gcloud beta device-run sessions describe SESSION_ID --full
qui renvoie des résultats semblables à ceux-ci :
Instrumentation 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
Exécutable 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 iOS
Voici le résultat nettoyé réel de gcloud beta device-run sessions
describe SESSION_ID --full d'une exécution iOS XCTest en direct avec tous les indicateurs activés :
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
Dans ce résultat, recherchez les fichiers extraits pour l'application testée dans .../artifacts/output.txt (sans com.example.app/Documents/).
Dans un navigateur Web
Pour en savoir plus, chargez l'URL du bucket contenant les résultats de votre test à partir de la sortie du test. Il doit ressembler à ceci :
https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/SESSION_ID/
Les sessions apparaissent au format de chemin d'accès suivant dans l'espace de stockage :
gs://BUCKET_NAME/automation/sessions/SESSION_ID/job-000/EXECUTION_ID/
Navigation
Pour parcourir vos journaux dans l'interface Web de la console Google Cloud , procédez comme suit :
- Dans un navigateur, ajoutez le nom de votre projet tel qu'il est utilisé dans la commande
gcloud config set projectà l'URLhttps://console.cloud.google.com/?project=, puis chargez la page. - Ouvrez le menu en haut à gauche.
- Recherchez Cloud Storage.
- Dans le menu "Stockage", sélectionnez Buckets.
- Dans la première colonne, cliquez sur le nom de votre projet.
- Cliquez sur Automatisation.
- Cliquez sur Sessions.
- Dans le champ Filtre, collez l'ID de session de votre dernier test (voir le résultat du test).
- Cliquez sur le nom de la session qui s'affiche.
- Sélectionnez job-* pour afficher
junit.xml(pour les exécutions d'instrumentation Android et iOS XCTest), qui contient les détails de la fusion de résultats de toutes les exécutions et de tous les scénarios de test du job. - Ouvrez execution-* (ou execution-*-rerun-* lorsque les nouvelles tentatives de test irrégulier sont configurées avec
--flaky-test-attempts) pour obtenir une répartition de chaque exécution ou segment individuel. Selon le type de session et les options configurées, ce dossier peut contenir de nombreux artefacts. Pour en savoir plus, consultez Comprendre les résultats. - Accédez aux URL publiques et authentifiées pour comprendre les résultats.
Structure des fichiers
Explorez les fichiers journaux de votre bucket Cloud Storage pour en savoir plus sur l'exécution de votre session. La structure du fichier ressemble à ceci :
Instrumentation 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
Exécutable 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 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
Dans cette sortie, identifiez le chemin d'accès extrait sous artifacts/. Pour --paths-to-pull=com.example.app:/Documents/output.txt, lors de l'extraction depuis l'application testée (AUT), le service supprime /Documents et place le fichier directement dans artifacts/output.txt (et non artifacts/com.example.app/Documents/output.txt). S'il est extrait d'une application supplémentaire (--additional-apps), il est placé dans artifacts/<bundle_id>-genfiles/output.txt.
Comprendre les résultats
Pour les exécutions d'instrumentation Android et XCTest iOS, les fichiers junit.xml générés dans votre sortie sont des fichiers XML JUnit standards. Un fichier junit.xml au niveau de l'exécution est écrit dans chaque répertoire execution-*, et un fichier junit.xml fusionné est écrit dans chaque répertoire job-*. Ces fichiers contiennent les résultats par méthode de test, ce qui vous permet d'examiner l'état de réussite ou d'échec, le temps d'exécution et les traces d'erreur pour chaque méthode de test. Vous pouvez facilement intégrer et analyser ces fichiers avec la plupart des systèmes d'intégration et de livraison continues (CI/CD) et des outils de reporting de test.
En plus des résultats de test structurés, chaque répertoire execution-* contient des journaux et des artefacts spécifiques à la plate-forme :
- Les exécutions d'instrumentation Android incluent
instrument.logpour la sortie brute de l'exécuteur d'instrumentation etlogcat.txtpour le journal système Android à l'échelle de l'appareil. Lorsqu'il est activé avec--bugreport,--dumpsysou--video, le répertoire d'exécution inclut égalementbugreport.zip,dumpsys.txtet les enregistrements vidéo de l'écran. - Les exécutions d'exécutables Android incluent
output.log, qui capture la sortie standard (stdout) et l'erreur standard (stderr) écrites par votre exécutable, etlogcat.txt(collecté par défaut pour chaque job Android), qui capture le journal système Android à l'échelle de l'appareil, ainsi que tous les artefacts--bugreport,--dumpsysou--videofacultatifs. - Les exécutions de test iOS XCTest incluent
system.log(collecté par défaut pour chaque tâche iOS XCTest), qui capture le syslog brut de l'appareil iOS, ainsi que tous les rapports de plantage de diagnostic.ipssi un processus a planté pendant l'exécution du test. Lorsqu'elle est activée avec--video, chaque vidéo de scénario de test d'UI enregistrée est stockée danstestcases/TEST_CLASS/TEST_METHOD/video.mp4. - Les fichiers d'appareil extraits spécifiés avec
--paths-to-pullsont stockés dans le sous-dossierartifacts/du répertoire d'exécution.- Pour les exécutions Android, les fichiers extraits conservent leur chemin d'accès à l'appareil sous
artifacts/(par exemple,artifacts/sdcard/output.txtouartifacts/data/local/tmp/results.json). - Pour les exécutions XCTest iOS, les fichiers extraits d'un conteneur de données d'application à l'aide de
--paths-to-pull=BUNDLE_ID:DEVICE_PATHsont organisés par ID de bundle sousartifacts/:- Si
com.example.appest l'application testée, il est enregistré directement dansartifacts/output.txt. - Si
com.example.appest une application supplémentaire (--additional-apps), elle est enregistrée dansartifacts/com.example.app-genfiles/output.txt.
- Si
- Pour les exécutions Android, les fichiers extraits conservent leur chemin d'accès à l'appareil sous
Pièces justificatives
- Principes fondamentaux des tests des applications Android
- Créer des tests instrumentés
- Documentation XCTest
- À propos des buckets Cloud Storage
Étapes suivantes
Ensuite, essayez l'API Device Streaming de notre Developer Device Platform.