개발자 기기 플랫폼 테스트 결과 확인

이 가이드에서는 개발자 기기 플랫폼 기기 실행 가이드에 따라 트리거된 테스트 및 실행 파일의 결과를 찾는 방법을 설명합니다.

시작하기 전에

이 단계에서는 이미 프로젝트를 만들고 개발자 기기 플랫폼 빠른 시작 가이드의 설정 단계를 완료했으며 터미널에서 gcloud로 인증했다고 가정합니다. Google Cloud

명령줄에서

이 명령어와 세션 ID를 사용하여 테스트 또는 실행 파일 결과의 기본 요약을 확인합니다.

gcloud beta device-run sessions describe SESSION_ID

다음과 유사한 결과를 반환합니다.

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

--device 플래그로 지정한 각 기기 유형 ID에 대해 세션에서 하나의 작업이 생성됩니다. 작업 색인은 기기 ID의 순서를 따릅니다. 테스트 실패는 예상되며 반복적인 개선 및 실행을 통해 조사하고 해결해야 합니다.

세션에 관한 추가 세부정보를 가져오려면 이와 같이 이전에 실행한 describe 명령어에 --full을 추가합니다.

gcloud beta device-run sessions describe SESSION_ID --full

다음과 유사한 결과를 반환합니다.

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

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

iOS XCTest

다음은 모든 플래그 가 사용 설정된 라이브 iOS XCTest 실행에서 gcloud beta device-run sessions describe SESSION_ID --full의 실제 삭제된 출력입니다.

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

이 출력에서 테스트 중인 앱의 가져온 파일을 .../artifacts/output.txt 에서 찾습니다 (com.example.app/Documents/ 제외).

웹브라우저에서

전체 세부정보를 보려면 테스트 출력에서 테스트 결과가 포함된 버킷의 URL을 로드합니다. 다음과 유사해야 합니다. https://console.cloud.google.com/storage/browser/BUCKET_NAME/automation/sessions/SESSION_ID/

세션은 스토리지에서 다음 경로 형식으로 표시됩니다. gs://BUCKET_NAME/automation/sessions/SESSION_ID/job-000/EXECUTION_ID/

Google Cloud 콘솔 웹 인터페이스에서 로그를 찾아보려면 다음 단계를 따르세요.

  1. 브라우저에서 gcloud config set project 명령어에 사용된 프로젝트 이름을 URL https://console.cloud.google.com/?project=에 추가하고 페이지를 로드합니다.
  2. 왼쪽 상단에서 메뉴를 펼칩니다.
  3. Cloud Storage 를 찾습니다.
  4. 스토리지 메뉴에서 버킷 을 선택합니다.
  5. 첫 번째 열에서 프로젝트 이름을 클릭합니다.
  6. 자동화 를 클릭합니다.
  7. 세션 을 클릭합니다.
  8. 필터 필드에 최신 테스트 실행의 세션 ID를 붙여넣습니다 (테스트 출력 참고).
  9. 결과 세션 이름을 클릭합니다.
  10. job-* 을 선택하여 junit.xml (Android 계측 및 iOS XCTest 실행용)을 확인합니다. 여기에는 작업의 모든 실행 및 테스트 사례에서 병합된 결과 세부정보가 포함됩니다.
  11. 각 개별 실행 또는 샤드의 분석을 보려면 execution-* (또는 불안정한 테스트 재시도가 --flaky-test-attempts로 구성된 경우 execution-*-rerun-*)을 엽니다. 세션 유형 및 구성된 플래그에 따라 이 폴더에는 세션 유형 및 구성된 플래그에 따라 여러 아티팩트가 포함될 수 있습니다. 자세한 내용은 결과 이해 를 참고하세요.
  12. 공개 및 인증된 URL을 방문하여 결과를 이해합니다.

파일 구조

Cloud Storage 버킷의 로그 파일을 탐색하여 세션 실행에 관해 자세히 알아보세요. 파일 구조는 다음과 같습니다.

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

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

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

이 출력에서 artifacts/ 아래의 가져온 경로를 이해합니다. --paths-to-pull=com.example.app:/Documents/output.txt의 경우 테스트 중인 앱 (AUT)에서 가져올 때 서비스는 /Documents를 삭제하고 파일을 artifacts/output.txt (artifacts/com.example.app/Documents/output.txt 아님)에 직접 배치합니다. 추가 앱 (--additional-apps)에서 가져온 경우 artifacts/<bundle_id>-genfiles/output.txt에 배치됩니다.

결과 이해

Android 계측 및 iOS XCTest 실행의 경우 출력에서 생성된 junit.xml 파일은 표준 JUnit XML 파일입니다. 실행 수준 junit.xml이 각 execution-* 디렉터리에 작성되고 병합된 junit.xml이 각 job-* 디렉터리에 작성됩니다. 이러한 파일에는 테스트 메서드별 결과가 포함되어 각 개별 테스트 메서드의 특정 통과 또는 실패 상태, 실행 시간, 오류 트레이스를 검토할 수 있습니다. 대부분의 지속적 통합 및 지속적 배포 (CI/CD) 시스템과 테스트 보고 도구를 사용하여 이러한 파일을 쉽게 통합하고 파싱할 수 있습니다.

구조화된 테스트 결과 외에도 각 execution-* 디렉터리에는 플랫폼별 로그와 아티팩트가 포함됩니다.

  • Android 계측 실행 에는 원시 계측 실행기 출력을 위한 instrument.log와 기기 전체 Android 시스템 로그를 위한 logcat.txt가 포함됩니다. --bugreport, --dumpsys 또는 --video로 사용 설정된 경우 실행 디렉터리에는 bugreport.zip, dumpsys.txt, 화면 동영상 녹화도 포함됩니다.
  • Android 실행 파일 실행 에는 실행 파일에서 작성한 표준 출력(stdout) 및 표준 오류(stderr)를 캡처하는 output.log와 기기 전체 Android 시스템 로그를 캡처하는 logcat.txt (모든 Android 작업에 대해 기본적으로 수집됨)가 포함됩니다(선택적 --bugreport, --dumpsys, 또는 --video 아티팩트와 함께).
  • iOS XCTest 실행 에는 원시 iOS 기기 syslog를 캡처하는 system.log (모든 iOS XCTest 작업에 대해 기본적으로 수집됨)와 테스트 실행 중에 프로세스가 비정상 종료된 경우 .ips 진단 비정상 종료 보고서가 포함됩니다.
  • --paths-to-pull로 지정된 가져온 기기 파일 은 실행 디렉터리의 artifacts/ 하위 폴더에 저장됩니다.
    • Android 실행의 경우 가져온 파일은 artifacts/ 아래의 기기 경로를 유지합니다 (예: artifacts/sdcard/output.txt 또는 artifacts/data/local/tmp/results.json).
    • iOS XCTest 실행의 경우 --paths-to-pull=BUNDLE_ID:DEVICE_PATH를 사용하여 앱 데이터 컨테이너에서 가져온 파일은 artifacts/ 아래의 번들 ID별로 정리됩니다.
      • com.example.app이 테스트 중인 앱인 경우 artifacts/output.txt에 직접 저장됩니다.
      • com.example.app이 추가 앱 (--additional-apps)인 경우 artifacts/com.example.app-genfiles/output.txt에 저장됩니다.

증빙 서류

다음 단계

다음으로 Developer Device Platform Device Streaming API을 사용해 보세요.