This guide describes how to find the results of tests and executables triggered following the Developer Device Platform Device Run guide.
Before you begin
These steps assume that you have already created a Google Cloud project,
completed the setup steps in the Developer Device Platform
Quickstart guide, and authenticated
with gcloud in the terminal.
At the command line
See a basic summary of your test or executable result with this command and your session ID:
gcloud beta device-run sessions describe SESSION_ID
Which returns results resembling:
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
For each device type ID you specified with the --device flag, one job is
generated in the session. The job index will follow the order of your device
IDs. Test failures are expected and should be investigated and resolved through
iterative improvements and runs.
To get additional details about a session, append --full to the previously run
describe command like so:
gcloud beta device-run sessions describe SESSION_ID --full
Which returns results resembling:
Android instrumentation
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
Android executable
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
Here is the actual sanitized output of gcloud beta device-run sessions
describe SESSION_ID --full from a live iOS XCTest run with all flags
enabled:
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 this output, find pulled files for the App Under Test at
.../artifacts/output.txt (without com.example.app/Documents/).
In web browser
For full details, load the URL to the bucket containing your test results from
the test output. It should resemble:
https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/SESSION_ID/
Sessions appear in the following path format in storage:
gs://BUCKET_NAME/automation/sessions/SESSION_ID/job-000/EXECUTION_ID/
Navigating
To browse for your logs in the Google Cloud console web interface, follow these steps:
- In a browser, append your project name as used in the
gcloud config set projectcommand to the URLhttps://console.cloud.google.com/?project=and load the page. - Expand the menu at top left.
- Find Cloud Storage.
- From the storage menu, select Buckets.
- In the first column, click the name of your project.
- Click Automation.
- Click Sessions.
- In the Filter field, paste the session ID from your latest test run (see the test output).
- Click the resulting session name.
- Select job-* to view
junit.xml(for Android instrumentation and iOS XCTest runs), which contains merged result details across all executions and test cases in the job. - Open execution-* (or execution-*-rerun-* when flaky test retries
are configured with
--flaky-test-attempts) for a breakdown of each individual execution or shard. Depending on your session type and configured flags, this folder can contain numerous artifacts, depending on your session type and configured flags. See Understand the results for more details. - Visit the public and authenticated URLs to understand the results.
File structure
Explore the log files in your Cloud Storage bucket to understand more about your session execution. The file structure resembles:
Android instrumentation
- 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
Android executable
- 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 this output, understand the pulled path under artifacts/. For
--paths-to-pull=com.example.app:/Documents/output.txt, when pulling from the
App Under Test (AUT), the service strips /Documents and places the file
directly at artifacts/output.txt (not
artifacts/com.example.app/Documents/output.txt). If pulled from an additional
app (--additional-apps), it is placed at
artifacts/<bundle_id>-genfiles/output.txt.
Understand the results
For Android instrumentation and iOS XCTest runs, the junit.xml files generated
in your output are standard JUnit XML files. An execution-level junit.xml is
written to each execution-* directory, and a merged junit.xml is written to
each job-* directory. These files contain the per-test-method results, letting
you review the specific pass or fail status, execution time, and error traces
for each individual test method. You can readily integrate and parse these files
with most Continuous Integration and Continuous Delivery (CI/CD) systems and
test reporting tools.
In addition to structured test results, each execution-* directory contains
platform-specific logs and artifacts:
- Android instrumentation runs include
instrument.logfor raw instrumentation runner output andlogcat.txtfor the device-wide Android system log. When enabled with--bugreport,--dumpsys, or--video, the execution directory also includesbugreport.zip,dumpsys.txt, and screen video recordings. - Android executable runs include
output.log, which captures the standard output (stdout) and standard error (stderr) written by your executable, andlogcat.txt(collected by default for every Android job), which captures the device-wide Android system log, along with any optional--bugreport,--dumpsys, or--videoartifacts. - iOS XCTest runs include
system.log(collected by default for every iOS XCTest job), which captures the raw iOS device syslog, and any.ipsdiagnostic crash reports if a process crashed during the test execution. - Pulled device files specified with
--paths-to-pullare stored under theartifacts/subfolder of the execution directory.- For Android runs, pulled files preserve their device path under
artifacts/(for example,artifacts/sdcard/output.txtorartifacts/data/local/tmp/results.json). - For iOS XCTest runs, files pulled from an app data container using
--paths-to-pull=BUNDLE_ID:DEVICE_PATHare organized by bundle ID underartifacts/:- If
com.example.appis the App Under Test, it is saved directly atartifacts/output.txt. - If
com.example.appis an additional app (--additional-apps), it is saved atartifacts/com.example.app-genfiles/output.txt.
- If
- For Android runs, pulled files preserve their device path under
Supporting documentation
- Fundamentals of testing Android apps
- Build instrumented tests
- XCTest documentation
- About Cloud Storage buckets
What's next
Next up, try our Developer Device Platform Device Streaming API.