Developer Device Platform 기기 실행 개요

클라우드에서 실제 및 가상 Android 기기와 실제 iOS 기기에서 테스트와 실행 파일을 실행할 수 있는 Developer Device Platform Device Run에 오신 것을 환영합니다. 이 페이지에서는 기능을 요약하고 Android 계측 테스트, Android 실행 파일, iOS 테스트 실행 간의 공통점을 설명합니다. 플랫폼별 단계는 Android용 기기 실행 및 iOS용 기기 실행을 참고하세요.

Firebase Test Lab에서 Developer Device Platform으로 이전하는 경우 이전 가이드, 명령어 및 플래그 번역, AI 에이전트용 이전 기술을 참고하세요.

이 Google Cloud CLI를 사용하려면 Google Cloud 프로젝트 ID를 제공해야 합니다. 명령어 요약은 gcloud beta device-run을 참고하세요.

주요 기능

Developer Device Platform Device Run은 실제 및 가상 모바일 기기에서 자동 테스트 모음을 실행할 수 있는 Google Cloud 서비스입니다. 최신 지속적 통합 및 지속적 배포 (CI/CD) 워크플로를 위해 빌드된 Device Run은 Google Cloud CLI(gcloud beta device-run)를 통해 명령줄 제어를 제공하므로 팀은 전용 하드웨어 및 가상 환경에서 테스트 모음을 실행, 관리, 확장할 수 있습니다.

1. 크로스 플랫폼 자동 테스트

  • Android 및 iOS 지원: 기기 실행은 기본 제공 테스트 프레임워크를 지원하며, 여기에는 Android 계측 테스트 (.apk), Android 실행 파일 (컴파일된 바이너리), iOS XCTest (.ipa 또는 .zip)가 포함됩니다.
  • 유연한 기기 타겟팅: OS 및 모델 식별자 (예: Pixel 또는 iPhone 모델)를 통해 --device 플래그를 사용하여 기기 카탈로그에 나열된 특정 실제 또는 가상 기기를 타겟팅합니다.
  • 멀티 디바이스 병렬 실행: 쉼표로 구분된 기기 ID를 지정하거나 여러 --device 플래그를 제공하여 여러 기기에서 동일한 테스트 모음을 동시에 실행합니다.

2. 유연한 실행 모드 및 제어

  • 동기 및 비동기 제출: 테스트 실행은 기본적으로 동기식으로 작동하며 완료 시 요약을 표시합니다. --async 플래그를 추가하면 차단되지 않는 실행을 위해 즉시 세션 ID가 반환되며, 나중에 gcloud beta device-run sessions wait를 사용하여 모니터링할 수 있습니다.
  • 맞춤 실행 제한 시간*: --instrumentation-timeout 또는 --xctest-timeout으로 실행 시간 제한을 구성합니다.
  • 불안정한 테스트 재시도: 불안정한 테스트 실행의 최대 재시도 횟수를 설정합니다. --flaky-test-attempts 플래그를 사용하여

3. 소프트웨어 버전 및 종속 항목 관리

  • 구성 가능한 테스트 환경*: 테스트 실행을 시작하기 전에 AndroidX Test Orchestrator 및 Apple Xcode 와 같은 특정 소프트웨어 환경 버전을 검색, 검사, 선택합니다.
  • 버전 검색: gcloud beta device-run software-versions list 및 describe 명령어를 사용하여 활성 소프트웨어 패키지, 지원되는 OS 버전, 기본 런타임 사양을 확인합니다.

4. 스토리지 및 아티팩트 관리

  • Cloud Storage 통합: 테스트 입력 (APK, IPA, 지원 앱) 및 출력 아티팩트 (로그, 테스트 보고서)는 Cloud Storage에 저장됩니다.
  • 버킷 유연성: 기본적으로 PROJECT_ID-devicerun이라는 프로젝트 버킷으로 설정되거나 --bucket-name 플래그를 통해 지정된 커스텀 버킷으로 라우팅됩니다. 이 버킷은 완전히 제어할 수 있으며 더 이상 필요하지 않을 때 콘텐츠를 수동으로 삭제하거나 버킷에서 자동 수명 주기 관리를 구성해야 합니다. 안내는 객체 삭제 정보를 참고하세요.
  • 직접 클라우드 경로: 대용량 파일의 경우 기존 gs:// 경로를 직접 참조하여 업로드 오버헤드를 없앱니다.

5. 고급 Android 테스트 기능

  • Android Test Orchestrator: 공유 앱 상태를 방지하고 애플리케이션 비정상 종료를 격리하기 위해 각 테스트를 자체 Instrumentation 인스턴스에서 실행하여 테스트 실행을 격리합니다.
  • 테스트 샤딩:
    • 균일한 샤딩: 지정된 수 의 샤드에 테스트 사례를 균등하게 분할합니다 (--sharding-option=uniform).
    • 스마트 샤딩: 이전 테스트 실행 데이터를 사용하여 샤드 간에 테스트 사례를 동적으로 조정하여 특정 총 실행 시간을 타겟팅합니다 (--sharding-option=smart).

6. 세션 관리 및 진단

  • 전체 세션 제어: sessions list, sessions describe, sessions cancel을 사용하여 활성 또는 이전 테스트 실행을 나열, 설명, 필터링 또는 취소합니다.
  • 초기 입력 검증: 제출된 테스트 바이너리 및 구성 아티팩트에 대해 자동 검증을 실행하고 오류가 발생하면 명시적 오류 세부정보 및 근본 원인 (예: 타겟 패키지 불일치)을 표시합니다.

핵심 설정

필수 플래그

다음 플래그는 필수입니다.

  • 기기: --device를 사용하여 기기를 지정합니다. --device shiba-35 또는 --device iphonese3-18-4
  • 테스트 또는 실행 파일: 테스트 실행의 경우 --test (--test /path/to/test.apk 또는 --test /path/to/MyTests.zip)를 사용하여 테스트 패키지를 지정하거나 Android 실행 파일 실행의 경우 --executable (--executable /path/to/my_executable)를 사용하여 실행 파일 바이너리 또는 스크립트를 지정합니다.

다음 구성 옵션은 기기 실행 세션에서 공통적으로 사용됩니다.

입력 및 출력 Cloud Storage 경로

  • 커스텀 Cloud Storage 버킷: 입력 및 출력에 커스텀 Cloud Storage 버킷을 지정할 수 있습니다. --bucket-name=my-custom-bucket --bucket-name=플래그를 사용하여 Cloud Storage 버킷을 지정하지 않으면 Google Cloud CLI에서 PROJECT_ID-devicerun이라는 기본 버킷을 사용합니다.
  • 입력 파일: --test, --executable, --apps, --additional-apps, --other-files-to-push, 또는 --xctestrun-file 플래그로 로컬 경로를 지정하면 명령어를 실행할 때마다 Google Cloud CLI에서 Cloud Storage 버킷의 gs://BUCKET_NAME/automation/inputs/DATE_TIME_FOUR_CHARS_SUFFIX/ 아래에 자동으로 복사합니다. 여기서 BUCKET_NAME는 기본적으로 PROJECT_ID-devicerun입니다.
  • 클라우드 경로: 대용량 파일을 업로드하는 데 시간이 오래 걸릴 수 있으므로 Cloud Storage gs:// 경로를 사용하여 직접 참조하여 업로드 시간을 절약할 수 있습니다.
  • 결과 파일: 출력 아티팩트는 gs://BUCKET_NAME/automation/sessions/session-[SESSION_ID]/ 아래의 Cloud Storage 버킷에 업로드됩니다.

입력 검증

Developer Device Platform은 아티팩트를 비롯한 입력을 검증하려고 시도하며 잘못된 입력이 발생하면 PASSED 또는 FAILED가 아닌 ERROR를 반환합니다.

Session [session-94b57778] finished with result [ERROR].
JOB NAME  EXECUTION NAME  EXECUTION RESULT
job-000   execution-000   ERROR

이제 sessions describe 명령어에 --full을 추가하여 세션에 관한 자세한 내용을 확인합니다.

gcloud beta device-run sessions describe --full session-94b57778

그러면 다음과 같은 출력이 생성됩니다.

name: projects/user-test1/locations/global/sessions/session-94b57778
sessionConfig:
  displayName: instrumentation-session
  jobConfigs:
  -   action:
      androidInstrumentationTest:
        testInstallable:
          files:
          -   gcsInputFile:
              path: gs://user-test1-devicerun/automation/inputs/2026-09-16_18:55.17372947_EECF/my-test.apk
    allocationConfig:
      deviceConfigs:
      -   actions:
        -   androidLogcat: {}
        requirement:
          deviceId: mediumphone-arm-34
    displayName: job-000
  outputDirectoryConfig:
    gcsOutputDirectory:
      path: gs://user-test1-devicerun/automation/sessions
sessionReport:
  endTime: '2026-09-16T18:55:49.721Z'
  id: ed681f23-669b-4464-8a93-b28456e58136
  jobReports:
  -   displayName: job-000
    endTime: '2026-09-16T18:55:45.839Z'
    executionReports:
    -   displayName: execution-000
      endTime: '2026-09-16T18:55:46.694Z'
      id: ce370173-af94-4dd7-acc6-0863e4d2e9ec
      result:
        cause:
          summary:
            message: The instrumentation target package does not match any of the
              installable packages.
            reason: INSTRUMENTATION_TARGET_MISMATCH
            type: CUSTOMER
        resultType: ERROR
      startTime: '1970-01-01T00:00:00Z'
      status:
        statusType: PENDING
    id: 953b5106-3c20-40f0-aceb-18af89cd1b83
    result:
      cause:
        summary:
          message: The instrumentation target package does not match any of the installable
            packages.
          reason: INSTRUMENTATION_TARGET_MISMATCH
          type: CUSTOMER
      resultType: ERROR
    startTime: '2026-09-16T18:55:31.651Z'
    status:
      statusType: DONE
  result:
    resultType: ERROR
  startTime: '2026-09-16T18:55:24.442Z'
  status:
    statusType: DONE

다음 단계

Developer Device Platform으로 Android 테스트 또는 실행 파일 실행 또는 iOS 테스트 실행