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

Keterampilan ini membantu menerjemahkan konfigurasi dan alur kerja proses pengujian lama (dari Flank atau gcloud firebase test) ke platform CLI gcloud beta device-run modern yang berorientasi pada resource.

Pemetaan Struktur Perintah & Resource

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

1. Katalog Perangkat (devices)

  • List Devices:
    • 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"
  • Jelaskan 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
  • Periksa Kapasitas Perangkat & Ketersediaan Kumpulan Kendaraan:
    • 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
  • Jelaskan 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)

  • Kirimkan Pengujian Instrumen Android:
    • Lama: gcloud firebase test android run --type=instrumentation ...
    • Baru: gcloud beta device-run sessions submit instrumentation ...
  • Submit iOS XCTest:
    • Lama: gcloud firebase test ios run --type=xctest ...
    • Baru: gcloud beta device-run sessions submit xctest ...
  • Menunggu Penyelesaian Sesi:
    • Legacy: Hanya pemblokiran CLI sinkron
    • Baru: gcloud beta device-run sessions wait {SESSION}
  • Describe / Inspect Session:
    • Lama: Lihat link web di Hasil Alat Cloud / Firebase Console
    • Baru: gcloud beta device-run sessions describe {SESSION} [--full]
  • List Past Sessions:
    • Lama: Melihat histori matriks di konsol web
    • Baru: gcloud beta device-run sessions list
  • Membatalkan Sesi:
    • Legacy: Hanya konsol web (tidak ada perintah CLI)
    • Baru: gcloud beta device-run sessions cancel {SESSION}

Tabel Referensi Pemetaan Bendera

Tabel berikut memetakan parameter dari Firebase Test Lab dan Flank lama ke parameter yang 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 Samping --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 Dictionary pasangan key=value.
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 beberapa perangkat yang dipisahkan koma dalam satu tanda (mis. --device=mediumphone-arm-32,shiba-36).
Umum (Android & iOS) Kontrol eksekusi dan ketidakstabilan --async --async Maps 1:1. Perintah tetap sinkron secara default, teruskan ini untuk segera menampilkan. Memantau atau menunggu dengan gcloud beta device-run sessions wait <SESSION_ID>.
Umum (Android & iOS) Kontrol eksekusi dan ketidakstabilan --num-flaky-test-attempts {R} --flaky-test-attempts {A} Bilangan Bulat. Konversi jumlah percobaan ulang $R$ ke batas total upaya: $A = R + 1$ (defaultnya adalah 1).
Umum (Android & iOS) Kontrol eksekusi dan ketidakstabilan T/A --flaky-test-parallel-retry Boolean. Apakah akan mencoba lagi kegagalan pengujian secara paralel (defaultnya berurutan).
Umum (Android & iOS) Kontrol eksekusi dan ketidakstabilan T/A --flaky-test-retry-level String. Coba lagi level: shard atau test (defaultnya shard).
Umum (Android & iOS) Output dan penyimpanan --results-bucket --bucket-name Bucket tempat artefak output pengujian diupload (secara default adalah gs://[PROJECT_ID]-devicerun).
Umum (Android & iOS) Output dan penyimpanan --results-dir Dikelola secara otomatis Setelan 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.
Android Umum Parameter dan aset inti --app --apps List. Jika beberapa APK/AAB aplikasi disediakan, teruskan semuanya ke --apps.
Android Umum Parameter dan aset inti --additional-apks --apps List. 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. Mendorong file OBB langsung ke jalur perangkat (/sdcard/Android/obb/{package_name}/).
Android Umum Parameter dan aset inti --other-files --other-files-to-push Kamus dalam format SOURCE=DEST.
Android Umum Konfigurasi dan penargetan perangkat --device locale={L} --locale={L} Memetakan lokalitas perangkat Maps ke tanda --locale tingkat teratas (language-region, misalnya --locale=en-US).
Android Umum Konfigurasi dan penargetan perangkat --device orientation={O} --orientation={O} Memetakan orientasi perangkat ke tanda --orientation tingkat teratas (portrait atau landscape).
Android Umum Konfigurasi dan penargetan perangkat T/A --coordinates Koordinat lokasi palsu (latitude,longitude, misalnya, 37.4220,-122.0841).
Android Umum Kontrol eksekusi dan ketidakstabilan --grant-permissions Default Otomatis Otomatis. Izin waktu proses diberikan secara otomatis secara default (setara dengan --grant-permissions=all).|
Android Umum Output dan penyimpanan T/A --dumpsys Kumpulkan dumpsys dari perangkat (always atau on-failure).
Android Umum Output dan penyimpanan T/A --bugreport Kumpulkan laporan bug dari perangkat (always atau on-failure).
Android Instrumentation Parameter dan aset inti --type=instrumentation sessions submit instrumentation Struktur sub-perintah menentukan jenis pengujian bukan flag --type.
Android Instrumentation Parameter dan aset inti --test --test Jalur ke file biner yang berisi pengujian instrumentasi.
Android Instrumentation Kontrol eksekusi dan ketidakstabilan --timeout --instrumentation-timeout Durasi (misalnya, 10m, 20s, 1h). Rentang yang valid: 1m hingga 3h (defaultnya 5m).
Android Instrumentation Kontrol eksekusi dan ketidakstabilan --num-uniform-shards {N} --sharding-option=uniform
--uniform-sharding-count={N}
Konfigurasi tanda mengaktifkan strategi sharding seragam (rentang jumlah yang valid: 1-20 fisik, 1-200 virtual).
Android Instrumentation Kontrol eksekusi dan ketidakstabilan Sisi --shard-time {S} --sharding-option=smart
--smart-sharding-target-duration={S}
Mengaktifkan sharding cerdas dengan target waktu eksekusi (mis. 2m, 10m, 1h). Rentang yang valid: 2m hingga 1h.
Android Instrumentation Kontrol eksekusi dan ketidakstabilan Sisi --smart-flank-gcs-path --smart-sharding-record-name={name}
--bucket-name={bucket}
Nama YAML rekaman sharding (tidak termasuk ekstensi) di dalam --bucket-name di bawah automation/smart-sharding/.
Android Instrumentation Kontrol eksekusi dan ketidakstabilan Samping --max-test-shards {N} --smart-sharding-max-shard-count={N} Memetakan ke batas shard maks saat smart sharding diaktifkan (0-20 fisik, 0-200 virtual).
Android Instrumentation Runner pengujian dan target --test-runner-class --test-runner-class Class runner yang sepenuhnya memenuhi syarat.
Android Instrumentation Runner pengujian dan target --test-targets --test-targets Dictionary yang mendukung kunci seperti package, notPackage, class, notClass, annotation, notAnnotation, dan size. Format seperti testfile atau notTestfile tidak akan didukung.
Android Instrumentation Runner pengujian dan target --use-orchestrator --orchestrator-version Mengambil auto (pengelola default) atau string versi tertentu (misalnya, 1.6).
Android Instrumentation Runner pengujian dan target --environment-variables --additional-test-options Dictionary opsi yang diteruskan ke pelaksana 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.
iOS Umum Parameter dan aset inti --other-files --other-files-to-push Kamus dalam format SOURCE=BUNDLE_ID:DEVICE_PATH.
iOS Umum Output dan penyimpanan --directories-to-pull --paths-to-pull Daftar file atau direktori yang akan ditarik setelah pengujian dalam format BUNDLE_ID:DEVICE_PATH.
Khusus XCTest iOS Parameter dan aset inti --type=xctest sessions submit xctest Struktur sub-perintah menentukan jenis pengujian, bukan flag --type.
Khusus XCTest iOS Parameter dan aset inti --test --test Jalur ke file ZIP yang berisi aplikasi iOS dan file XCTest.
Khusus XCTest iOS Kontrol eksekusi dan ketidakstabilan --timeout --xctest-timeout Durasi maksimum yang diizinkan untuk menjalankan XCTest (rentang yang valid: 1m hingga 1h, defaultnya 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 (mis. xcode-16-4 atau 16.4). Kueri menggunakan software-versions list.

Panduan Terjemahan yang Dapat Ditindaklanjuti

Ikuti panduan berikut untuk menerjemahkan konfigurasi Firebase Test Lab dan Flank ke jalankan perangkat:

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 tanda --device per perangkat, device-run memungkinkan penentuan beberapa perangkat dalam satu tanda. Lokalitas perangkat, orientasi, dan koordinat tiruan ditentukan menggunakan tanda tingkat teratas terpisah:

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

2. Kamus dan Daftar

Mengonversi tanda 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:
    • Tetapkan --sharding-option=uniform.
    • Tetapkan --uniform-sharding-count={count} (1-20 untuk fisik, 1-200 untuk virtual).
  • Smart Sharding:
    • Tetapkan --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} (menunjuk ke rekaman pelacakan YAML di dalam --bucket-name di bagian automation/smart-sharding/).
    • Tetapkan --smart-sharding-max-shard-count={max_count} (opsional batas maksimum: 0-20 untuk fisik, 0-200 untuk virtual).

4. Eksekusi Asinkron

  • Asinkron & Menunggu: 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 suka mempertahankan file yang dikontrol versinya daripada perintah terminal yang panjang, gcloud menyediakan praprosesor argumen --flags-file universal (lihat $ gcloud topic flags-file):

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

!CATATAN Alasan kunci memerlukan --: gcloud menyuntikkan kunci YAML langsung ke parser CLI sebagai flag command line. Setiap kunci dalam file YAML harus memiliki awalan -- (mis. --device:, --apps:). Tanpa --, gcloud menolaknya sebagai argumen posisi yang tidak dikenal.

Berikut adalah contoh yang menunjukkan tanda daftar dan kamus bernilai ganda:

# 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 konfigurasi yang dijalankan perangkat.

Firebase Test Lab ke perangkat yang dijalankan

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 untuk dijalankan di perangkat

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 mempertahankan konfigurasi dalam file YAML yang dikontrol versinya, 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

Mengirimkan dengan CLI:

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

(Anda juga dapat menambahkan atau mengganti tanda 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"