Testergebnisse für die Entwicklergeräteplattform aufrufen

In diesem Leitfaden wird beschrieben, wie Sie die Ergebnisse von Tests und ausführbaren Dateien finden, die gemäß dem Leitfaden „Developer Device Platform Device Run“ ausgelöst wurden.

Hinweis

Bei diesen Schritten wird davon ausgegangen, dass Sie bereits ein Google Cloud Projekt erstellt, die Einrichtungsschritte im Schnellstartleitfaden zur Developer Device Platform ausgeführt und sich im Terminal mit gcloud authentifiziert haben.

In der Befehlszeile

Mit diesem Befehl und Ihrer Sitzungs-ID können Sie eine grundlegende Zusammenfassung der Ergebnisse Ihres Tests oder Ihrer ausführbaren Datei aufrufen:

gcloud beta device-run sessions describe SESSION_ID

Die Ergebnisse sehen in etwa so aus:

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

Für jede Geräte-ID, die Sie mit dem Flag --device angegeben haben, wird in der Sitzung ein Job generiert. Der Jobindex folgt der Reihenfolge Ihrer Geräte-IDs. Testfehler sind zu erwarten und sollten durch iterative Verbesserungen und Ausführungen untersucht und behoben werden.

Wenn Sie zusätzliche Details zu einer Sitzung erhalten möchten, fügen Sie dem zuvor ausgeführten Befehl describe das Flag --full hinzu:

gcloud beta device-run sessions describe SESSION_ID --full

Die Ergebnisse sehen in etwa so aus:

Android-Instrumentierung

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

Ausführbare Android-Datei

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

iOS XCTest

Hier sehen Sie die tatsächliche bereinigte Ausgabe von gcloud beta device-run sessions describe SESSION_ID --full aus einer Live-iOS-XCTest-Ausführung, bei der alle Flags aktiviert sind:

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

In dieser Ausgabe finden Sie die abgerufenen Dateien für die zu testende App unter .../artifacts/output.txt (ohne com.example.app/Documents/).

Im Webbrowser

Vollständige Details finden Sie in der URL des Buckets mit Ihren Testergebnissen aus der Testausgabe. Sie sollte so aussehen: https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/SESSION_ID/

Sitzungen werden im Speicher unter folgendem Pfadformat angezeigt: gs://BUCKET_NAME/automation/sessions/SESSION_ID/job-000/EXECUTION_ID/

So suchen Sie in der Web-UI der Google Cloud Console nach Ihren Logs:

  1. Fügen Sie in einem Browser den Namen Ihres Projekts, wie er im gcloud config set project Befehl verwendet wird, an die URL https://console.cloud.google.com/?project= an und laden Sie die Seite.
  2. Maximieren Sie das Menü oben links.
  3. Suchen Sie nach Cloud Storage.
  4. Wählen Sie im Speichermenü Buckets aus.
  5. Klicken Sie in der ersten Spalte auf den Namen Ihres Projekts.
  6. Klicken Sie auf Automatisierung.
  7. Klicken Sie auf Sitzungen.
  8. Fügen Sie im Feld Filter die Sitzungs-ID aus Ihrem letzten Testlauf ein (siehe Testausgabe).
  9. Klicken Sie auf den Namen der resultierenden Sitzung.
  10. Wählen Sie job-* aus, um junit.xml aufzurufen. Diese Datei enthält zusammengeführte Ergebnisdetails für alle Ausführungen und Testfälle im Job (für Android-Instrumentierungs- und iOS XCTest-Ausführungen).
  11. Öffnen Sie execution-* (oder execution-*-rerun-*, wenn mit --flaky-test-attempts Wiederholungen für instabile Tests konfiguriert sind), um eine Aufschlüsselung der einzelnen Ausführungen oder Shards zu erhalten. Je nach Sitzungstyp und konfigurierten Flags kann dieser Ordner zahlreiche Artefakte enthalten. Weitere Informationen finden Sie unter Was bedeuten die Ergebnisse ?.
  12. Rufen Sie die öffentlichen und authentifizierten URLs auf, um die Ergebnisse zu verstehen.

Dateistruktur

In den Logdateien in Ihrem Cloud Storage-Bucket finden Sie weitere Informationen zur Ausführung Ihrer Sitzung. Die Dateistruktur sieht in etwa so aus:

Android-Instrumentierung


-   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

Ausführbare Android-Datei


-   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

iOS XCTest


-   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

In dieser Ausgabe sehen Sie den abgerufenen Pfad unter artifacts/. Wenn Sie mit --paths-to-pull=com.example.app:/Documents/output.txt Daten aus der zu testenden App abrufen, entfernt der Dienst /Documents und platziert die Datei direkt unter artifacts/output.txt (nicht artifacts/com.example.app/Documents/output.txt). Wenn die Datei aus einer zusätzlichen App (--additional-apps) abgerufen wird, wird sie unter artifacts/<bundle_id>-genfiles/output.txt platziert.

Was bedeuten die Ergebnisse?

Bei Android-Instrumentierungs- und iOS-XCTest-Ausführungen sind die in der Ausgabe generierten junit.xml-Dateien Standard-JUnit-XML-Dateien. Für jedes execution-*-Verzeichnis wird eine junit.xml-Datei auf Ausführungsebene und für jedes job-*-Verzeichnis eine zusammengeführte junit.xml-Datei geschrieben. Diese Dateien enthalten die Ergebnisse pro Testmethode. So können Sie den jeweiligen Status (bestanden oder nicht bestanden), die Ausführungszeit und die Fehler-Traces für jede einzelne Testmethode überprüfen. Sie können diese Dateien problemlos in die meisten CI/CD-Systeme (Continuous Integration/Continuous Delivery) und Berichtstools für Tests einbinden und parsen.

Neben strukturierten Testergebnissen enthält jedes execution-*-Verzeichnis plattformspezifische Logs und Artefakte:

  • Android-Instrumentierungsausführungen enthalten instrument.log für die Rohausgabe des Instrumentierungs-Runners und logcat.txt für das Android-Systemprotokoll auf Geräteebene. Wenn die Flags --bugreport, --dumpsys oder --video aktiviert sind, enthält das Ausführungsverzeichnis auch bugreport.zip, dumpsys.txt und Bildschirmvideoaufzeichnungen.
  • Ausführungen von ausführbaren Android-Dateien enthalten output.log, in der die Standardausgabe (stdout) und der Standardfehler (stderr) der ausführbaren Datei erfasst werden, sowie logcat.txt (standardmäßig für jeden Android-Job erfasst), in der das Android-Systemprotokoll auf Geräteebene erfasst wird, zusammen mit optionalen Artefakten, die mit --bugreport, --dumpsys oder --video erfasst wurden.
  • iOS-XCTest-Ausführungen enthalten system.log (standardmäßig für jeden iOS-XCTest-Job erfasst), in der das Syslog des iOS-Geräts im Rohformat erfasst wird, sowie alle .ips-Diagnoseabsturzberichte, wenn ein Prozess während der Testausführung abgestürzt ist.
  • Abgerufene Gerätedateien , die mit --paths-to-pull angegeben wurden, werden im Unterordner artifacts/ des Ausführungsverzeichnisses gespeichert.
    • Bei Android-Ausführungen behalten abgerufene Dateien ihren Gerätepfad unter artifacts/ bei (z. B. artifacts/sdcard/output.txt oder artifacts/data/local/tmp/results.json).
    • Bei iOS-XCTest-Ausführungen werden Dateien, die mit --paths-to-pull=BUNDLE_ID:DEVICE_PATH aus einem App-Datencontainer abgerufen wurden, unter artifacts/ nach Paket-ID organisiert:
      • Wenn com.example.app die zu testende App ist, wird sie direkt unter artifacts/output.txt gespeichert.
      • Wenn com.example.app eine zusätzliche App (--additional-apps) ist, wird sie unter artifacts/com.example.app-genfiles/output.txt gespeichert.

Zusätzliche Dokumentation

Nächste Schritte

Als Nächstes können Sie unsere Developer Device Platform Device Streaming API ausprobieren.