Bermigrasi dari Firebase Test Lab dan Flank ke Developer Device Platform dengan AI

Keterampilan ini membantu menerjemahkan konfigurasi dan alur kerja uji coba lama (dari Flank atau gcloud firebase test) ke platform CLI gcloud beta device-run yang modern dan berorientasi resource (dan gcloud alpha device-run untuk mengirimkan sesi XCTest iOS).

Pemetaan Struktur Perintah & Resource

Device Run CLI mengatur perintah berdasarkan resource: devices, software-versions, dan sessions:

1. Katalog Perangkat (devices)

  • Mencantumkan Perangkat:
    • Lama: gcloud firebase test android/ios models list
    • Baru: gcloud beta device-run devices list [--filter="..."]
    • Contoh: gcloud beta device-run devices list --filter="platform:android"
  • Deskripsikan Perangkat:
    • Lama: gcloud firebase test android/ios models describe {MODEL}
    • Baru: gcloud beta device-run devices describe {DEVICE}
    • Contoh: gcloud beta device-run devices describe redfin-30
  • Memeriksa Kapasitas Perangkat & Ketersediaan Fleet:
    • Lama: gcloud firebase test android/ios list-device-capacities
    • Baru: Disematkan langsung di resource Perangkat (availability.capacity dan availability.available). Periksa menggunakan gcloud beta device-run devices describe {DEVICE} atau filter langsung dengan gcloud beta device-run devices list --filter="availability.capacity=CAPACITY_HIGH".

2. Versi Software (software-versions)

  • Mencantumkan Versi Software yang Didukung (Xcode & Android Test Orchestrator):
    • Lama: gcloud firebase test ios xcode-versions list
    • Baru: gcloud beta device-run software-versions list
  • Menjelaskan Versi Software:
    • Baru: gcloud beta device-run software-versions describe {SOFTWARE_VERSION}
    • Contoh: gcloud beta device-run software-versions describe xcode-16-4

3. Sesi Otomatisasi (sessions)

  • Mengirimkan Instrumentasi Android:
    • Lama: gcloud firebase test android run --type=instrumentation ...
    • Baru: gcloud beta device-run sessions submit instrumentation ...
  • Mengirimkan XCTest iOS:
    • Lama: gcloud firebase test ios run --type=xctest ...
    • Baru: gcloud alpha device-run sessions submit xctest ...
  • Menunggu Penyelesaian Sesi:
    • Lama: Hanya pemblokiran CLI sinkron
    • Baru: gcloud beta device-run sessions wait {SESSION}
  • Menjelaskan/Memeriksa Sesi:
    • Lama: Lihat link web di Firebase Console/Cloud Tool Results
    • Baru: gcloud beta device-run sessions describe {SESSION} [--full]
  • Daftar Sesi Sebelumnya:
    • Lama: Melihat histori matriks di konsol web
    • Baru: gcloud beta device-run sessions list
  • Batalkan Sesi:
    • Lama: Hanya konsol web (tanpa perintah CLI)
    • Baru: gcloud beta device-run sessions cancel {SESSION}

Tabel Referensi Pemetaan Tanda

Tabel berikut memetakan parameter dari Firebase Test Lab dan Flank lama ke parameter yang setara dan didukung di gcloud beta device-run:

Jenis Uji Grup Fitur Parameter Lama (firebase/Flank) Parameter Target (device-run) Logika Format/Konversi
Umum (Android & iOS) Parameter dan aset inti Flank --project --project Flag global Google Cloud standar (--project=PROJECT_ID) atau konfigurasi Google Cloud CLI yang aktif.
Umum (Android & iOS) Parameter dan aset inti --client-details --labels Kamus pasangan kunci=nilai.
Umum (Android & iOS) Parameter dan aset inti --other-files --other-files-to-push Kamus file yang akan dikirim sebelum uji coba (SOURCE=DEVICE_PATH di Android; SOURCE=BUNDLE_ID:DEVICE_PATH di iOS).
Umum (Android & iOS) Konfigurasi dan penargetan perangkat --device model={M},version={V} --device={M}-{V} Memetakan model dan versi OS ke string ID --device. Menerima daftar yang dipisahkan koma dari beberapa perangkat dalam satu flag (misalnya, --device=mediumphone-arm-32,shiba-36).
Umum (Android & iOS) Kontrol eksekusi dan flakiness --async --async Maps 1:1. Perintah tetap sinkron secara default, teruskan ini untuk segera ditampilkan. Pantau atau tunggu dengan gcloud beta device-run sessions wait <SESSION_ID>.
Umum (Android & iOS) Kontrol eksekusi dan flakiness --num-flaky-test-attempts {R} --flaky-test-attempts {A} Bilangan bulat. Konversikan jumlah percobaan ulang $R$ ke batas total percobaan: $A = R + 1$ (defaultnya adalah 1).
Umum (Android & iOS) Output dan penyimpanan --results-bucket --bucket-name Bucket tempat artefak output pengujian diupload (default-nya adalah gs://[PROJECT_ID]-devicerun).
Umum (Android & iOS) Output dan penyimpanan --results-dir Dikelola secara otomatis Menetapkan subdirektori kustom tidak didukung; semua artefak pengujian otomatis diatur di bagian automation/sessions/{session_id}/ dalam bucket yang ditentukan oleh --bucket-name.
Umum (Android & iOS) Output dan penyimpanan --record-video --video Nilai yang valid: always atau on-failure.
Umum (Android & iOS) Output dan penyimpanan --directories-to-pull --paths-to-pull Daftar jalur yang akan ditarik dari perangkat setelah dijalankan (DEVICE_PATH di Android; BUNDLE_ID:DEVICE_PATH di iOS).
Android Umum Parameter dan aset inti --app --apps Daftar. Jika beberapa APK/AAB aplikasi disediakan, teruskan semuanya ke --apps.
Android Umum Parameter dan aset inti --additional-apks --apps Daftar. Gabungkan nilai daftar tambahan langsung ke daftar --apps utama.
Android Umum Parameter dan aset inti --obb-files --other-files-to-push Kamus dalam format SOURCE=DEST. Kirim file OBB langsung ke jalur perangkat (/sdcard/Android/obb/{package_name}/).
Android Umum Konfigurasi dan penargetan perangkat --device locale={L} --locale={L} Memetakan lokalitas perangkat ke flag --locale level teratas (language-region, mis. --locale=en-US).
Android Umum Konfigurasi dan penargetan perangkat --device orientation={O} --orientation={O} Memetakan orientasi perangkat ke flag --orientation level teratas (portrait atau landscape).
Android Umum Konfigurasi dan penargetan perangkat T/A --coordinates Koordinat lokasi tiruan (latitude,longitude, mis., 37.4220,-122.0841).
Android Umum Kontrol eksekusi dan flakiness --grant-permissions Default Otomatis Otomatis. Izin runtime diberikan secara otomatis secara default (setara dengan --grant-permissions=all).|
Android Umum Output dan penyimpanan T/A --dumpsys Mengumpulkan dumpsys dari perangkat (always atau on-failure).
Android Umum Output dan penyimpanan T/A --bugreport Kumpulkan laporan bug dari perangkat (always atau on-failure).
Instrumentasi Android Parameter dan aset inti --type=instrumentation sessions submit instrumentation Struktur subperintah menentukan jenis pengujian, bukan flag --type.
Instrumentasi Android Parameter dan aset inti --test --test Jalur ke file biner yang berisi uji instrumentasi.
Instrumentasi Android Kontrol eksekusi dan flakiness --timeout --instrumentation-timeout Durasi (mis., 10m, 20s, 1h). Rentang yang valid: 1m hingga 3h (defaultnya adalah 5m).
Instrumentasi Android Kontrol eksekusi dan flakiness T/A --flaky-test-parallel-retry Boolean. Apakah akan mencoba ulang kegagalan pengujian secara paralel (default-nya adalah berurutan).
Instrumentasi Android Kontrol eksekusi dan flakiness T/A --flaky-test-retry-level String. Tingkat percobaan ulang: shard atau test (default-nya adalah shard).
Instrumentasi Android Kontrol eksekusi dan flakiness --num-uniform-shards {N} --sharding-option=uniform
--uniform-sharding-count={N}
Konfigurasi flag mengaktifkan strategi sharding seragam (rentang jumlah yang valid: 1-20 fisik, 1-200 virtual).
Instrumentasi Android Kontrol eksekusi dan flakiness Flank --shard-time {S} --sharding-option=smart
--smart-sharding-target-duration={S}
Mengaktifkan sharding cerdas dengan target waktu eksekusi (misalnya, 2m, 10m, 1h). Rentang yang valid: 2m hingga 1h.
Instrumentasi Android Kontrol eksekusi dan flakiness Flank --smart-flank-gcs-path --smart-sharding-record-name={name}
--bucket-name={bucket}
Nama YAML data sharding (tidak termasuk ekstensi) di dalam --bucket-name di bagian automation/smart-sharding/.
Instrumentasi Android Kontrol eksekusi dan flakiness Flank --max-test-shards {N} --smart-sharding-max-shard-count={N} Memetakan ke batas shard maksimum saat sharding cerdas diaktifkan (0-20 fisik, 0-200 virtual).
Instrumentasi Android Runner pengujian dan target --test-runner-class --test-runner-class Class runner yang sepenuhnya memenuhi syarat.
Instrumentasi Android Runner pengujian dan target --test-targets --test-targets Kamus yang mendukung kunci seperti package, notPackage, class, notClass, annotation, notAnnotation, dan size. Format seperti testfile atau notTestfile tidak akan didukung.
Instrumentasi Android Runner pengujian dan target --use-orchestrator --orchestrator-version Mengambil auto (orkestrator default) atau string versi tertentu (mis., 1.6).
Instrumentasi Android Runner pengujian dan target --environment-variables --additional-test-options Kamus opsi yang diteruskan ke runner pengujian. Format yang didukung di --test-targets tidak diizinkan di sini.
iOS Umum Parameter dan aset inti --additional-ipas --additional-apps Daftar file .ipa yang akan diinstal di perangkat sebelum pengujian dijalankan.
Khusus XCTest iOS Parameter dan aset inti --type=xctest sessions submit xctest Struktur subperintah menentukan jenis pengujian, bukan flag --type (menggunakan gcloud alpha).
Khusus XCTest iOS Parameter dan aset inti --test --test Jalur ke file ZIP yang berisi file aplikasi iOS dan XCTest.
Khusus XCTest iOS Kontrol eksekusi dan flakiness --timeout --xctest-timeout Durasi maksimum yang diizinkan untuk menjalankan XCTest (rentang yang valid: 1m hingga 1h, defaultnya adalah 5m).
Khusus XCTest iOS Runner pengujian dan target --xctestrun-file --xctestrun-file Jalur ke file .xctestrun kustom.
Khusus XCTest iOS Runner pengujian dan target --xcode-version --xcode-version ID katalog atau string versi Xcode yang akan digunakan (misalnya, xcode-16-4 atau 16.4). Buat kueri menggunakan software-versions list.

Panduan Penerjemahan yang Dapat Ditindaklanjuti

Ikuti panduan berikut untuk menerjemahkan konfigurasi Firebase Test Lab dan Flank ke device-run:

1. Spesifikasi Perangkat

Di gcloud beta device-run, --device menerima daftar string ID model dan versi yang dipisahkan koma. Tidak seperti Firebase yang memerlukan satu flag --device per perangkat, device-run memungkinkan penentuan beberapa perangkat dalam satu flag. Lokalitas, orientasi, dan koordinat tiruan perangkat ditentukan menggunakan flag level teratas yang terpisah:

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

2. Kamus dan Daftar

Konversikan flag yang dipisahkan koma menjadi daftar (--apps, --paths-to-pull) atau kamus nilai kunci (--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. Strategi Sharding

  • Sharding Seragam:
    • Setel --sharding-option=uniform.
    • Tetapkan --uniform-sharding-count={count} (1-20 untuk fisik, 1-200 untuk virtual).
  • Smart Sharding:
    • Setel --sharding-option=smart.
    • Tetapkan --smart-sharding-target-duration={duration} (mis. 2m, 10m, 1h; rentang yang valid: 2m hingga 1h).
    • Tetapkan --smart-sharding-record-name={record_name} (mengarah ke data pelacakan YAML di dalam --bucket-name di bagian automation/smart-sharding/).
    • Tetapkan --smart-sharding-max-shard-count={max_count} (batas maksimum opsional: 0-20 untuk fisik, 0-200 untuk virtual).

4. Eksekusi Asinkron

  • Async & Waiting: Jika --async ditentukan, CLI akan langsung menampilkan ID sesi yang dibuat. Anda dapat menunggu penyelesaian sesi dalam alur kerja CI/CD menggunakan: gcloud beta device-run sessions wait <SESSION_ID>

5. Konfigurasi YAML Deklaratif (--flags-file)

Untuk konfigurasi yang kompleks atau tim yang lebih memilih mengelola file yang dikontrol versi daripada perintah terminal yang panjang, gcloud menyediakan pra-pemroses argumen --flags-file universal (lihat $ gcloud topic flags-file):

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

!NOTE Alasan kunci memerlukan --: gcloud memasukkan kunci YAML langsung ke parser CLI sebagai tanda command line. Setiap kunci dalam file YAML harus diawali dengan -- (mis. --device:, --apps:). Tanpa --, gcloud akan menolaknya sebagai argumen posisi yang tidak dikenali.

Berikut adalah contoh yang menunjukkan flag daftar dan kamus multi-nilai:

# 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"

Contoh terjemahan

Gunakan contoh ini untuk menerjemahkan konfigurasi Firebase Test Lab dan Flank yang ada ke device-run.

Firebase Test Lab ke device-run

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

Diterjemahkan ke:

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

Konfigurasi Flank ke device-run

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

Diterjemahkan ke:

Terjemahkan langsung ke perintah CLI modern:

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

Opsi 2: File Flag YAML Deklaratif (--flags-file)

Jika Anda lebih suka mengelola konfigurasi dalam file YAML yang dikontrol versi, bukan string skrip shell, gunakan fitur --flags-file bawaan gcloud:

# 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

Kirim dengan CLI:

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

(Anda juga dapat menambahkan atau mengganti flag di command line, seperti menambahkan --async).

Penemuan Katalog Perangkat

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

Siklus Proses Sesi End-to-End di 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"