Accéder aux résultats des tests de la plate-forme de développement de votre appareil

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/

Pour parcourir vos journaux dans l'interface Web de la console Google Cloud , procédez comme suit :

  1. Dans un navigateur, ajoutez le nom de votre projet tel qu'il est utilisé dans la commande gcloud config set project à l'URL https://console.cloud.google.com/?project=, puis chargez la page.
  2. Ouvrez le menu en haut à gauche.
  3. Recherchez Cloud Storage.
  4. Dans le menu "Stockage", sélectionnez Buckets.
  5. Dans la première colonne, cliquez sur le nom de votre projet.
  6. Cliquez sur Automatisation.
  7. Cliquez sur Sessions.
  8. Dans le champ Filtre, collez l'ID de session de votre dernier test (voir le résultat du test).
  9. Cliquez sur le nom de la session qui s'affiche.
  10. 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.
  11. 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.
  12. 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.log pour la sortie brute de l'exécuteur d'instrumentation et logcat.txt pour le journal système Android à l'échelle de l'appareil. Lorsqu'il est activé avec --bugreport, --dumpsys ou --video, le répertoire d'exécution inclut également bugreport.zip, dumpsys.txt et 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, et logcat.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, --dumpsys ou --video facultatifs.
  • 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 .ips si 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 dans testcases/TEST_CLASS/TEST_METHOD/video.mp4.
  • Les fichiers d'appareil extraits spécifiés avec --paths-to-pull sont stockés dans le sous-dossier artifacts/ 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.txt ou artifacts/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_PATH sont organisés par ID de bundle sous artifacts/ :
      • Si com.example.app est l'application testée, il est enregistré directement dans artifacts/output.txt.
      • Si com.example.app est une application supplémentaire (--additional-apps), elle est enregistrée dans artifacts/com.example.app-genfiles/output.txt.

Pièces justificatives

Étapes suivantes

Ensuite, essayez l'API Device Streaming de notre Developer Device Platform.