Firebase Test Lab 및 Flank에서 AI를 사용하는 개발자 기기 플랫폼으로 이전

이 기술은 기존 테스트 실행 구성 및 워크플로(Flank 또는 gcloud firebase test에서)를 최신 리소스 지향 gcloud beta device-run CLI 표면(iOS XCTest 세션 제출을 위한 gcloud alpha device-run)으로 변환하는 데 도움이 됩니다.

명령어 및 리소스 구조 매핑

기기 실행 CLI는 리소스별로 명령어를 구성합니다. devices, software-versions, sessions:

1. 기기 카탈로그(devices)

  • 기기 나열:
    • 기존: gcloud firebase test android/ios models list
    • 신규: gcloud beta device-run devices list [--filter="..."]
    • 예시: gcloud beta device-run devices list --filter="platform:android"
  • 기기 설명:
    • 기존: gcloud firebase test android/ios models describe {MODEL}
    • 신규: gcloud beta device-run devices describe {DEVICE}
    • 예시: gcloud beta device-run devices describe redfin-30
  • 기기 용량 및 Fleet 가용성 확인:
    • 기존: gcloud firebase test android/ios list-device-capacities
    • 새로운 기능: 기기 리소스(availability.capacity 및 availability.available)에 직접 삽입됩니다. gcloud beta device-run devices describe {DEVICE}를 사용하여 검사하거나 gcloud beta device-run devices list --filter="availability.capacity=CAPACITY_HIGH"를 사용하여 직접 필터링합니다.

2. 소프트웨어 버전(software-versions)

  • 지원되는 소프트웨어 버전 나열(Xcode 및 Android Test Orchestrator):
    • 기존: gcloud firebase test ios xcode-versions list
    • 신규: gcloud beta device-run software-versions list
  • 소프트웨어 버전 설명:
    • 신규: gcloud beta device-run software-versions describe {SOFTWARE_VERSION}
    • 예시: gcloud beta device-run software-versions describe xcode-16-4

3. 자동화 세션(sessions)

  • Android 계측 제출:
    • 기존: gcloud firebase test android run --type=instrumentation ...
    • 신규: gcloud beta device-run sessions submit instrumentation ...
  • iOS XCTest 제출:
    • 기존: gcloud firebase test ios run --type=xctest ...
    • 신규: gcloud alpha device-run sessions submit xctest ...
  • 세션 완료 대기:
    • 기존: 동기식 CLI 차단만
    • 신규: gcloud beta device-run sessions wait {SESSION}
  • 세션 설명/검사:
    • 기존: Firebase Console/Cloud Tool Results에서 웹 링크 보기
    • 신규: gcloud beta device-run sessions describe {SESSION} [--full]
  • 이전 세션 나열:
    • 기존: 웹 콘솔에서 매트릭스 기록 보기
    • 신규: gcloud beta device-run sessions list
  • 세션 취소:
    • 기존: 웹 콘솔만(CLI 명령어 없음)
    • 신규: gcloud beta device-run sessions cancel {SESSION}

플래그 매핑 참조 표

다음 표는 기존 Firebase Test Lab 및 Flank의 매개변수를 gcloud beta device-run에서 지원되는 상응하는 매개변수에 매핑합니다.

테스트 유형 특성 그룹 기존 매개변수(firebase/Flank) 타겟 매개변수(device-run) 형식/변환 로직
공통(Android 및 iOS) 핵심 매개변수 및 애셋 --project 측면 --project 표준 Google Cloud 전역 플래그(--project=PROJECT_ID) 또는 활성 Google Cloud CLI 구성입니다.
공통(Android 및 iOS) 핵심 매개변수 및 애셋 --client-details --labels 키=값 쌍의 딕셔너리입니다.
공통(Android 및 iOS) 핵심 매개변수 및 애셋 --other-files --other-files-to-push 테스트 실행 전에 푸시할 파일의 사전입니다(Android의 경우 SOURCE=DEVICE_PATH, iOS의 경우 SOURCE=BUNDLE_ID:DEVICE_PATH).
공통(Android 및 iOS) 기기 구성 및 타겟팅 --device model={M},version={V} --device={M}-{V} 모델 및 OS 버전을 --device ID 문자열에 매핑합니다. 단일 플래그에서 쉼표로 구분된 여러 기기 목록을 허용합니다(예: --device=mediumphone-arm-32,shiba-36).
공통(Android 및 iOS) 실행 제어 및 불안정성 --async --async 1:1로 매핑됩니다. 명령어는 기본적으로 동기식으로 유지되며, 즉시 반환하려면 이 값을 전달합니다. gcloud beta device-run sessions wait <SESSION_ID>로 모니터링하거나 대기합니다.
공통(Android 및 iOS) 실행 제어 및 불안정성 --num-flaky-test-attempts {R} --flaky-test-attempts {A} 정수. 재시도 횟수 $R$ 을 총 시도 횟수 한도 $A = R + 1$(기본값: 1)로 변환합니다.
공통(Android 및 iOS) 출력 및 저장 --results-bucket --bucket-name 테스트 출력 아티팩트가 업로드되는 버킷입니다(기본값은 gs://[PROJECT_ID]-devicerun).
공통(Android 및 iOS) 출력 및 저장 --results-dir 자동 관리 커스텀 하위 디렉터리 설정은 지원되지 않습니다. 모든 테스트 아티팩트는 --bucket-name로 지정된 버킷 내의 automation/sessions/{session_id}/ 아래에 자동으로 구성됩니다.
공통(Android 및 iOS) 출력 및 저장 --record-video --video 유효한 값은 always 또는 on-failure입니다.
공통(Android 및 iOS) 출력 및 저장 --directories-to-pull --paths-to-pull 실행 후 기기에서 가져올 경로 목록(Android의 경우 DEVICE_PATH, iOS의 경우 BUNDLE_ID:DEVICE_PATH)
일반 Android 핵심 매개변수 및 애셋 --app --apps 목록 여러 애플리케이션 APK/AAB가 제공되면 모두 --apps에 전달합니다.
일반 Android 핵심 매개변수 및 애셋 --additional-apks --apps 목록 추가 목록 값을 기본 --apps 목록에 직접 병합합니다.
일반 Android 핵심 매개변수 및 애셋 --obb-files --other-files-to-push SOURCE=DEST 형식의 사전입니다. OBB 파일을 기기 경로(/sdcard/Android/obb/{package_name}/)로 직접 푸시합니다.
일반 Android 기기 구성 및 타겟팅 --device locale={L} --locale={L} 기기 언어를 최상위 --locale 플래그(language-region, 예: --locale=en-US).
일반 Android 기기 구성 및 타겟팅 --device orientation={O} --orientation={O} 기기 방향을 최상위 --orientation 플래그(portrait 또는 landscape)에 매핑합니다.
일반 Android 기기 구성 및 타겟팅 해당 사항 없음 --coordinates 가상 위치 좌표(latitude,longitude, 예: 37.4220,-122.0841).
일반 Android 실행 제어 및 불안정성 --grant-permissions 자동 기본 필터 자동. 런타임 권한은 기본적으로 자동으로 부여됩니다(--grant-permissions=all와 동일).|
일반 Android 출력 및 저장 해당 사항 없음 --dumpsys 기기에서 dumpsys를 수집합니다(always 또는 on-failure).
일반 Android 출력 및 저장 해당 사항 없음 --bugreport 기기(always 또는 on-failure)에서 버그 신고를 수집합니다.
Android 계측 핵심 매개변수 및 애셋 --type=instrumentation sessions submit instrumentation 하위 명령어 구조는 --type 플래그 대신 테스트 유형을 결정합니다.
Android 계측 핵심 매개변수 및 애셋 --test --test 계측 테스트가 포함된 바이너리 파일의 경로입니다.
Android 계측 실행 제어 및 불안정성 --timeout --instrumentation-timeout 길이(예: 10m, 20s, 1h). 유효한 범위: 1m~3h(기본값: 5m)
Android 계측 실행 제어 및 불안정성 해당 사항 없음 --flaky-test-parallel-retry 불리언. 테스트 실패를 동시에 재시도할지 여부입니다(기본값은 순차적).
Android 계측 실행 제어 및 불안정성 해당 사항 없음 --flaky-test-retry-level 문자열. 재시도 수준: shard 또는 test(기본값은 shard)
Android 계측 실행 제어 및 불안정성 --num-uniform-shards {N} --sharding-option=uniform
--uniform-sharding-count={N}
플래그 구성은 균일한 샤딩 전략을 활성화합니다(유효한 개수 범위: 물리적 1~20개, 가상 1~200개).
Android 계측 실행 제어 및 불안정성 --shard-time {S} 측면 --sharding-option=smart
--smart-sharding-target-duration={S}
목표 실행 시간(예: 10분)으로 스마트 샤딩을 활성화합니다. 2m, 10m, 1h). 유효한 범위: 2m~1h.
Android 계측 실행 제어 및 불안정성 측면 --smart-flank-gcs-path --smart-sharding-record-name={name}
--bucket-name={bucket}
automation/smart-sharding/의 --bucket-name 내에 있는 샤딩 레코드 YAML의 이름(확장자 제외)입니다.
Android 계측 실행 제어 및 불안정성 --max-test-shards {N} 측면 --smart-sharding-max-shard-count={N} 스마트 샤딩이 사용 설정된 경우 최대 샤드 경계에 매핑됩니다(실제 0~20개, 가상 0~200개).
Android 계측 테스트 실행기 및 타겟 --test-runner-class --test-runner-class 정규화된 실행기 클래스입니다.
Android 계측 테스트 실행기 및 타겟 --test-targets --test-targets package, notPackage, class, notClass, annotation, notAnnotation, size와 같은 키를 지원하는 사전입니다. testfile 또는 notTestfile과 같은 형식은 지원되지 않습니다.
Android 계측 테스트 실행기 및 타겟 --use-orchestrator --orchestrator-version auto(기본 조정자) 또는 특정 버전 문자열(예: 1.6).
Android 계측 테스트 실행기 및 타겟 --environment-variables --additional-test-options 테스트 실행기에 전달된 옵션의 사전입니다. --test-targets에서 지원되는 형식은 여기에서 허용되지 않습니다.
일반 iOS 핵심 매개변수 및 애셋 --additional-ipas --additional-apps 테스트 실행 전에 기기에 설치할 .ipa 파일의 목록입니다.
iOS XCTest만 해당 핵심 매개변수 및 애셋 --type=xctest sessions submit xctest 하위 명령어 구조는 --type 플래그 대신 테스트 유형을 결정합니다(gcloud alpha 사용).
iOS XCTest만 해당 핵심 매개변수 및 애셋 --test --test iOS 앱 및 XCTest 파일이 포함된 ZIP 파일의 경로입니다.
iOS XCTest만 해당 실행 제어 및 불안정성 --timeout --xctest-timeout XCTest 실행에 허용되는 최대 기간입니다(유효한 범위: 1m~1h, 기본값: 5m).
iOS XCTest만 해당 테스트 실행기 및 타겟 --xctestrun-file --xctestrun-file 커스텀 .xctestrun 파일의 경로입니다.
iOS XCTest만 해당 테스트 실행기 및 타겟 --xcode-version --xcode-version 사용할 Xcode의 카탈로그 ID 또는 버전 문자열입니다(예: xcode-16-4 또는 16.4). software-versions list를 사용하여 쿼리합니다.

실행 가능한 번역 가이드

다음 가이드라인에 따라 Firebase Test Lab 및 Flank 구성을 기기 실행으로 변환하세요.

1. 기기 사양

gcloud beta device-run에서 --device는 쉼표로 구분된 모델 및 버전 ID 문자열 목록을 허용합니다. 기기당 하나의 --device 플래그가 필요한 Firebase와 달리 기기 실행에서는 하나의 플래그에 여러 기기를 지정할 수 있습니다. 기기 언어, 방향, 모의 좌표는 별도의 최상위 플래그를 사용하여 지정됩니다.

  • ❌ --device model=MediumPhone.arm,version=32,locale=en,orientation=portrait
  • ✅ --device=mediumphone-arm-32 --locale=en-US --orientation=portrait

2. 딕셔너리 및 목록

쉼표로 구분된 플래그를 목록(--apps, --paths-to-pull) 또는 키-값 사전(--other-files-to-push, --additional-test-options)으로 변환합니다.

  • ❌ --other-files /sdcard/file1.txt=local/file1.txt,/sdcard/file2.txt=local/file2.txt
  • ✅ --other-files-to-push local/file1.txt=/sdcard/file1.txt,local/file2.txt=/sdcard/file2.txt

3. 샤딩 전략

  • 균일 샤딩:
    • --sharding-option=uniform을 설정합니다.
    • --uniform-sharding-count={count}를 설정합니다(실제는 1~20, 가상은 1~200).
  • 스마트 샤딩:
    • --sharding-option=smart을 설정합니다.
    • --smart-sharding-target-duration={duration}(예: 2m, 10m, 1h, 유효한 범위: 2m~1h)
    • --smart-sharding-record-name={record_name}를 설정합니다(automation/smart-sharding/ 아래의 --bucket-name 내에 있는 YAML 추적 레코드를 가리킴).
    • --smart-sharding-max-shard-count={max_count}를 설정합니다(선택사항, 최대 한도: 실물 카드의 경우 0~20, 가상 카드의 경우 0~200).

4. 비동기 실행

  • 비동기 및 대기: --async가 지정되면 CLI는 생성된 세션 ID를 즉시 반환합니다. gcloud beta device-run sessions wait <SESSION_ID>를 사용하여 CI/CD 워크플로에서 세션 완료를 기다릴 수 있습니다.

5. 선언적 YAML 구성(--flags-file)

복잡한 구성이나 긴 터미널 명령어 대신 버전 제어 파일을 유지하는 것을 선호하는 팀의 경우 gcloud는 범용 --flags-file 인수 전처리기를 제공합니다($ gcloud topic flags-file 참조).

gcloud beta device-run sessions submit instrumentation --flags-file=device-run-flags.yaml

!참고 키에 --가 필요한 이유: gcloud는 YAML 키를 명령줄 플래그로 CLI 파서에 직접 삽입합니다. YAML 파일의 모든 키에는 --를 앞에 붙여야 합니다(예: --device:, --apps:). --가 없으면 gcloud는 이를 인식할 수 없는 위치 인수로 거부합니다.

다음은 다중 값 목록 및 사전 플래그를 보여주는 예시입니다.

# device-run-flags.yaml
--device:
  -   mediumphone-arm-32
  -   shiba-36
--apps:
  -   app-debug.apk
  -   test-helper.apk
--test: app-debug-androidTest.apk
--bucket-name: my-bucket
--sharding-option: smart
--smart-sharding-target-duration: 2m
--smart-sharding-record-name: timing-record
--paths-to-pull:
  -   /sdcard/screenshots
  -   /sdcard/coverage.ec
--additional-test-options:
  coverage: "true"
  clearPackageData: "true"

번역 예시

이 예시를 사용하여 기존 Firebase Test Lab 및 Flank 구성을 기기 실행으로 변환하세요.

Firebase Test Lab에서 기기 실행으로

firebase cmd:

gcloud firebase test android run \
  --app=app-debug.apk \
  --test=app-debug-androidTest.apk \
  --device model=shiba,version=36 \
  --timeout=5m \
  --num-flaky-test-attempts=2 \
  --directories-to-pull=/sdcard/screenshots \
  --environment-variables coverage=true

다음과 같이 번역됩니다.

gcloud beta device-run sessions submit instrumentation \
  --device=shiba-36 \
  --apps=app-debug.apk \
  --test=app-debug-androidTest.apk \
  --instrumentation-timeout=5m \
  --flaky-test-attempts=3 \
  --paths-to-pull=/sdcard/screenshots \
  --additional-test-options coverage=true

Flank 구성을 기기 실행에 적용

flank options(flank.yml개):

gcloud:
  app: app-debug.apk
  test: app-debug-androidTest.apk
  device:
    -   model: mediumphone-arm
      version: 32
  shard-time: 120
  smart-flank-gcs-path: gs://my-bucket/automation/smart-sharding/timing-record.yaml

다음과 같이 번역됩니다.

최신 CLI 명령어로 직접 변환:

gcloud beta device-run sessions submit instrumentation \
  --device=mediumphone-arm-32 \
  --apps=app-debug.apk \
  --test=app-debug-androidTest.apk \
  --bucket-name=my-bucket \
  --sharding-option=smart \
  --smart-sharding-target-duration=2m \
  --smart-sharding-record-name=timing-record

옵션 2: 선언적 YAML 플래그 파일(--flags-file)

셸 스크립트 문자열 대신 버전 제어 YAML 파일에서 구성을 유지하려면 gcloud의 기본 제공 --flags-file 기능을 사용하세요.

# device-run-flags.yaml
# Note: gcloud requires keys to start with '--'
--device:
  -   mediumphone-arm-32
--apps:
  -   app-debug.apk
--test: app-debug-androidTest.apk
--bucket-name: my-bucket
--sharding-option: smart
--smart-sharding-target-duration: 2m
--smart-sharding-record-name: timing-record

CLI로 제출:

gcloud beta device-run sessions submit instrumentation --flags-file=device-run-flags.yaml

(--async 추가와 같이 명령줄에서 플래그를 추가하거나 재정의할 수도 있습니다.)

기기 카탈로그 탐색

listing & inspecting devices:

# List all available Android devices
gcloud beta device-run devices list --filter="platform:android"

# Filter devices with high fleet capacity (replaces legacy list-device-capacities)
gcloud beta device-run devices list --filter="availability.capacity=CAPACITY_HIGH"

# Describe a specific device (OS versions, form factors, orientation, locales, capacity)
gcloud beta device-run devices describe redfin-30

CI/CD의 엔드 투 엔드 세션 수명 주기

submitting, waiting, and inspecting sessions:

# 1. Submit asynchronously and capture session ID
SESSION_ID=$(gcloud beta device-run sessions submit instrumentation \
  --apps=app-debug.apk \
  --test=app-debug-androidTest.apk \
  --device=mediumphone-arm-32 \
  --async \
  --format="value(name)")

# 2. Wait for session completion in CI/CD pipeline
gcloud beta device-run sessions wait "$SESSION_ID"

# 3. Describe session summary (or pass --full for complete details)
gcloud beta device-run sessions describe "$SESSION_ID"

# 4. Cancel a running session if aborted
gcloud beta device-run sessions cancel "$SESSION_ID"