이 스킬은 기존 테스트 실행 구성 및 워크플로(Flank 또는 gcloud firebase test에서)를 최신 리소스 중심 gcloud
beta device-run CLI 표면으로 변환하는 데 도움이 됩니다.
명령어 및 리소스 구조 매핑
기기 실행 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 beta device-run sessions submit xctest ...
- 레거시:
- 세션 완료 대기:
- 기존: 동기 CLI 차단만
- 신규:
gcloud beta device-run sessions wait {SESSION}
- 세션 설명 / 검사:
- 레거시: Firebase Console / Cloud 도구 결과에서 웹 링크 보기
- 신규:
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
|
key=value 쌍의 사전입니다. |
| 공통 (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) | 실행 제어 및 불안정성 | 해당 사항 없음 | --flaky-test-parallel-retry
|
불리언. 테스트 실패를 병렬로 재시도할지 여부입니다 (기본값은 순차적임). |
| 공통 (Android 및 iOS) | 실행 제어 및 불안정성 | 해당 사항 없음 | --flaky-test-retry-level
|
문자열. 레벨 재시도: shard 또는 test (기본값은 shard).
|
| 공통 (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 | 핵심 매개변수 및 애셋 | --app
|
--apps
|
List. 애플리케이션 APK/AAB가 여러 개 제공된 경우 모두 --apps에 전달합니다. |
| 일반 Android | 핵심 매개변수 및 애셋 | --additional-apks
|
--apps
|
List. 추가 목록 값을 기본 --apps 목록에 직접 병합합니다.
|
| 일반 Android | 핵심 매개변수 및 애셋 | --obb-files
|
--other-files-to-push
|
SOURCE=DEST 형식의 사전입니다.
OBB 파일을 기기 경로(/sdcard/Android/obb/{package_name}/)로 직접 푸시합니다. |
| 일반 Android | 핵심 매개변수 및 애셋 | --other-files
|
--other-files-to-push
|
SOURCE=DEST 형식의 사전입니다.
|
| 일반 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
|
기기 (always 또는 on-failure)에서 dumpsys를 수집합니다. |
| 일반 Android | 출력 및 저장소 | 해당 사항 없음 | --bugreport
|
기기에서 버그 신고를 수집합니다 (always 또는 on-failure). |
| Android Instrumentation | 핵심 매개변수 및 애셋 | --type=instrumentation
|
sessions submit instrumentation
|
하위 명령어 구조는 --type 플래그 대신 테스트 유형을 결정합니다.
|
| Android Instrumentation | 핵심 매개변수 및 애셋 | --test
|
--test
|
계측 테스트가 포함된 바이너리 파일의 경로입니다. |
| Android Instrumentation | 실행 제어 및 불안정성 | --timeout
|
--instrumentation-timeout
|
기간 (예: 10m, 20s, 1h). 유효한 범위: 1m~3h (기본값은 5m) |
| Android Instrumentation | 실행 제어 및 불안정성 | --num-uniform-shards {N}
|
--sharding-option=uniform--uniform-sharding-count={N}
|
플래그 구성을 통해 균일한 샤딩 전략이 활성화됩니다 (유효한 개수 범위: 실제 1~20개, 가상 1~200개). |
| Android Instrumentation | 실행 제어 및 불안정성 | 측면 --shard-time {S}
|
--sharding-option=smart--smart-sharding-target-duration={S}
|
타겟 실행 시간 (예: 2m, 10m, 1h). 유효한 범위: 2m~1h |
| Android Instrumentation | 실행 제어 및 불안정성 | Flank
--smart-flank-gcs-path
|
--smart-sharding-record-name={name}--bucket-name={bucket}
|
automation/smart-sharding/ 아래 --bucket-name 내 샤딩 레코드 YAML의 이름입니다(확장자 제외). |
| Android Instrumentation | 실행 제어 및 불안정성 | 측면 --max-test-shards
{N}
|
--smart-sharding-max-shard-count={N}
|
스마트 샤딩이 사용 설정된 경우 최대 샤드 바운드에 매핑됩니다 (실제 0~20, 가상 0~200). |
| Android Instrumentation | 테스트 실행기 및 타겟 | --test-runner-class
|
--test-runner-class
|
정규화된 러너 클래스입니다. |
| Android Instrumentation | 테스트 실행기 및 타겟 | --test-targets
|
--test-targets
|
package, notPackage, class, notClass, annotation, notAnnotation, size과 같은 키를 지원하는 사전 testfile 또는 notTestfile과 같은 형식은 지원되지 않습니다. |
| Android Instrumentation | 테스트 실행기 및 타겟 | --use-orchestrator
|
--orchestrator-version
|
auto (기본 오케스트레이터) 또는 특정 버전 문자열 (예: 1.6). |
| Android Instrumentation | 테스트 실행기 및 타겟 | --environment-variables
|
--additional-test-options
|
테스트 러너에 전달된 옵션의 사전입니다. --test-targets에서 지원되는 형식은 여기에서 허용되지 않습니다. |
| 일반 iOS | 핵심 매개변수 및 애셋 | --additional-ipas
|
--additional-apps
|
테스트 실행 전에 기기에 설치할 .ipa 파일의 목록입니다.
|
| 일반 iOS | 핵심 매개변수 및 애셋 | --other-files
|
--other-files-to-push
|
SOURCE=BUNDLE_ID:DEVICE_PATH 형식의 사전입니다.
|
| 일반 iOS | 출력 및 저장소 | --directories-to-pull
|
--paths-to-pull
|
테스트 후 가져올 파일 또는 디렉터리 목록입니다(BUNDLE_ID:DEVICE_PATH 형식). |
| iOS XCTest만 해당 | 핵심 매개변수 및 애셋 | --type=xctest
|
sessions submit xctest
|
하위 명령어 구조가 --type 플래그 대신 테스트 유형을 결정합니다.
|
| 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).
- Smart Sharding:
--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와 함께 즉시 반환됩니다. 다음과 같이 CI/CD 워크플로에서 세션 완료를 기다릴 수 있습니다.gcloud beta device-run sessions wait <SESSION_ID>
5. 선언적 YAML 구성 (--flags-file)
복잡한 구성이나 긴 터미널 명령어 대신 버전 관리 파일을 유지하는 것을 선호하는 팀의 경우 gcloud는 범용 --flags-file 인수 전처리기 ($ gcloud topic flags-file 참고)를 제공합니다.
gcloud beta device-run sessions submit instrumentation --flags-file=device-run-flags.yaml
!NOTE 키에
--이 필요한 이유: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 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
다음과 같이 변환됩니다.
옵션 1: 직접 CLI 호출 (권장)
최신 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"