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 d'exécution sur l'appareil de la plate-forme d'appareil pour les développeurs.

Avant de commencer

Ces étapes supposent que vous avez déjà créé un Google Cloud projet, suivi les étapes de configuration du guide de démarrage rapide de la plate-forme d'appareil pour les développeurs Quickstart et que vous vous êtes authentifié auprès de gcloud dans le terminal.

Dans la ligne de commande

Affichez un résumé de base du résultat de votre test ou de votre exécutable avec cette commande et votre ID de session :

gcloud beta device-run sessions describe SESSION_ID

Qui renvoie des résultats semblables à :

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'indicateur --device, une tâche est générée dans la session. L'index de la tâche suit l'ordre de vos ID d'appareil. Les échecs de test sont attendus et doivent être examinés et résolus par des améliorations et des exécutions itératives.

Pour obtenir des informations 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 à :

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 la sortie réelle nettoyée de gcloud beta device-run sessions describe SESSION_ID --full à partir 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 cette sortie, recherchez les fichiers extraits pour l'application testée dans .../artifacts/output.txt (sans com.example.app/Documents/).

Dans un navigateur Web

Pour obtenir des informations complètes, chargez l'URL du bucket contenant les résultats de vos tests à partir de la sortie du test. Elle doit ressembler à : https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/SESSION_ID/

Les sessions s'affichent au format de chemin suivant dans le stockage : gs://BUCKET_NAME/automation/sessions/SESSION_ID/job-000/EXECUTION_ID/

Pour parcourir vos journaux dans l'interface Web de la Google Cloud console, 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= et chargez la page.
  2. Développez le menu en haut à gauche.
  3. Recherchez Cloud Storage.
  4. Dans le menu de 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 dernière exécution de test (voir la sortie du test).
  9. Cliquez sur le nom de la session résultante.
  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 pour toutes les exécutions et les scénarios de test de la tâche.
  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 indicateurs configurés, ce dossier peut contenir de nombreux artefacts. Pour en savoir plus, consultez Comprendre les résultats.
  12. Consultez les 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 à :

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, comprenez le chemin extrait sous artifacts/. Pour --paths-to-pull=com.example.app:/Documents/output.txt, lors de l'extraction à partir de 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 iOS XCTest, 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 spécifique, le temps d'exécution et les traces d'erreur pour chaque méthode de test individuelle. 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 création de rapports 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 des 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 tâche 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 iOS XCTest incluent system.log (collecté par défaut pour chaque tâche iOS XCTest), qui capture le syslog brut de l'appareil iOS, et tous les rapports de plantage de diagnostic .ips si un processus a planté lors de l'exécution du test.
  • 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'appareil sous artifacts/ (par exemple, artifacts/sdcard/output.txt ou artifacts/data/local/tmp/results.json).
    • Pour les exécutions iOS XCTest, 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, elle est enregistrée 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

Étape suivante

Ensuite, essayez notre API de streaming d'appareil de la plate-forme d'appareil pour les développeurs Device Streaming API.