Trovare i risultati del test della piattaforma dispositivo per sviluppatori

Questa guida descrive come trovare i risultati dei test e degli eseguibili attivati seguendo la guida Device Run di Developer Device Platform.

Prima di iniziare

Questi passaggi presuppongono che tu abbia già creato un progetto Google Cloud , completato i passaggi di configurazione nella guida Guida rapida di Developer Device Platform e che tu abbia eseguito l'autenticazione con gcloud nel terminale.

Dalla riga di comando

Visualizza un riepilogo di base del risultato del test o dell'eseguibile con questo comando e il tuo ID sessione:

gcloud beta device-run sessions describe SESSION_ID

che restituisce risultati simili ai seguenti:

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

Per ogni ID tipo di dispositivo specificato con il flag --device, viene generato un job nella sessione. L'indice del job seguirà l'ordine degli ID dispositivo. Gli errori dei test sono previsti e devono essere esaminati e risolti tramite miglioramenti ed esecuzioni iterative.

Per ottenere ulteriori dettagli su una sessione, aggiungi --full al comando describe eseguito in precedenza, in questo modo:

gcloud beta device-run sessions describe SESSION_ID --full

che restituisce risultati simili ai seguenti:

Strumentazione 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

Eseguibile 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 per iOS

Ecco l'output effettivo sottoposto a sanitizzazione di gcloud beta device-run sessions describe SESSION_ID --full da un'esecuzione di XCTest per iOS in tempo reale con tutti i flag attivati:

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 questo output, individua i file estratti per l'app in fase di test in .../artifacts/output.txt (senza com.example.app/Documents/).

Nel browser web

Per i dettagli completi, carica l'URL del bucket contenente i risultati del test dall'output del test. Dovrebbe essere simile a: https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/SESSION_ID/

Le sessioni vengono visualizzate nel seguente formato di percorso nello spazio di archiviazione: gs://BUCKET_NAME/automation/sessions/SESSION_ID/job-000/EXECUTION_ID/

Per sfogliare i log nell'interfaccia web della console Google Cloud , segui questi passaggi:

  1. In un browser, aggiungi il nome del progetto utilizzato nel comando gcloud config set project all'URL https://console.cloud.google.com/?project= e carica la pagina.
  2. Espandi il menu in alto a sinistra.
  3. Trova Cloud Storage.
  4. Nel menu Spazio di archiviazione, seleziona Bucket.
  5. Nella prima colonna, fai clic sul nome del progetto.
  6. Fai clic su Automazione.
  7. Fai clic su Sessioni.
  8. Nel campo Filtro, incolla l'ID sessione dell'ultima esecuzione del test (vedi l'output del test).
  9. Fai clic sul nome della sessione risultante.
  10. Seleziona job-* per visualizzare junit.xml (per le esecuzioni di strumentazione Android e XCTest iOS), che contiene i dettagli dei risultati uniti di tutte le esecuzioni e gli scenari di test nel job.
  11. Apri execution-* (o execution-*-rerun-* quando i nuovi tentativi di test instabili sono configurati con --flaky-test-attempts) per un'analisi dettagliata di ogni singola esecuzione o shard. A seconda del tipo di sessione e dei flag configurati, questa cartella può contenere numerosi artefatti. Per maggiori dettagli, consulta Comprendi i risultati.
  12. Visita gli URL pubblici e di autenticazione per comprendere i risultati.

Struttura dei file

Esplora i file di log nel bucket Cloud Storage per saperne di più sull'esecuzione della sessione. La struttura del file è simile alla seguente:

Strumentazione 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

Eseguibile 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 per 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

In questo output, scopri il percorso di pull in artifacts/. Per --paths-to-pull=com.example.app:/Documents/output.txt, quando esegue il pull dall'app in fase di test (AUT), il servizio rimuove /Documents e posiziona il file direttamente in artifacts/output.txt (non artifacts/com.example.app/Documents/output.txt). Se viene eseguito il pull da un'app aggiuntiva (--additional-apps), viene posizionato in artifacts/<bundle_id>-genfiles/output.txt.

Comprendere i risultati

Per le esecuzioni di strumentazione Android e XCTest iOS, i file junit.xml generati nell'output sono file XML JUnit standard. Un junit.xml a livello di esecuzione viene scritto in ogni directory execution-* e un junit.xml unito viene scritto in ogni directory job-*. Questi file contengono i risultati per metodo di test, consentendoti di esaminare lo stato specifico di superamento o mancato superamento, il tempo di esecuzione e le tracce degli errori per ogni singolo metodo di test. Puoi integrare e analizzare facilmente questi file con la maggior parte dei sistemi di integrazione continua e distribuzione continua (CI/CD) e degli strumenti di generazione dei report sui test.

Oltre ai risultati dei test strutturati, ogni directory execution-* contiene log e artefatti specifici della piattaforma:

  • Le esecuzioni di strumentazione Android includono instrument.log per l'output non elaborato dello strumento di esecuzione della strumentazione e logcat.txt per il log di sistema Android a livello di dispositivo. Se abilitata con --bugreport, --dumpsys o --video, la directory di esecuzione include anche bugreport.zip, dumpsys.txt e registrazioni video dello schermo.
  • Le esecuzioni di eseguibili Android includono output.log, che acquisisce l'output standard (stdout) e l'errore standard (stderr) scritti dall'eseguibile, e logcat.txt (raccolto per impostazione predefinita per ogni job Android), che acquisisce il log di sistema Android a livello di dispositivo, insieme a eventuali artefatti --bugreport, --dumpsys o --video facoltativi.
  • Le esecuzioni di XCTest per iOS includono system.log (raccolto per impostazione predefinita per ogni job XCTest per iOS), che acquisisce il syslog non elaborato del dispositivo iOS, e tutti i report sugli arresti anomali di diagnostica .ips se un processo si è arrestato in modo anomalo durante l'esecuzione del test. Se abilitato con --video, ogni video dello scenario di test dell'interfaccia utente registrato viene archiviato in testcases/TEST_CLASS/TEST_METHOD/video.mp4.
  • I file del dispositivo estratti specificati con --paths-to-pull vengono archiviati nella sottocartella artifacts/ della directory di esecuzione.
    • Per le esecuzioni su Android, i file estratti conservano il percorso del dispositivo in artifacts/ (ad esempio, artifacts/sdcard/output.txt o artifacts/data/local/tmp/results.json).
    • Per le esecuzioni di XCTest per iOS, i file estratti da un container di dati dell'app utilizzando --paths-to-pull=BUNDLE_ID:DEVICE_PATH sono organizzati per ID pacchetto in artifacts/:
      • Se com.example.app è l'app in fase di test, viene salvata direttamente in artifacts/output.txt.
      • Se com.example.app è un'app aggiuntiva (--additional-apps), viene salvata in artifacts/com.example.app-genfiles/output.txt.

Documentazione di supporto

Passaggi successivi

Ora prova l'API Device Streaming di Developer Device Platform.