מעבר מ-Firebase Test Lab ומ-Flank ל-Developer Device Platform עם AI

היכולת הזו עוזרת לתרגם הגדרות ותהליכי עבודה מדור קודם של הרצת בדיקות (מ-Flank או מ-gcloud firebase test) לממשק המודרני של gcloud beta device-run CLI שמבוסס על משאבים (ול-gcloud alpha device-run לשליחת סשנים של iOS XCTest).

מיפוי של מבנה הפקודות והמשאבים

הפקודות ב-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
  • בדיקת הקיבולת של המכשירים והזמינות של צי המכשירים:
    • גרסה קודמת: 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):
    • גרסה קודמת: 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 ...
  • Submit iOS XCTest:
    • גרסה קודמת: gcloud firebase test ios run --type=xctest ...
    • חדש: gcloud alpha device-run sessions submit xctest ...
  • מחכים שהסשן יסתיים:
    • הגרסה הקודמת: חסימת ה-CLI הסינכרוני בלבד
    • חדש: gcloud beta device-run sessions wait {SESSION}
  • Describe / Inspect Session:
    • גרסה קודמת: הצגת קישור לדף אינטרנט אחר במסוף Firebase או בתוצאות של Cloud Tool
    • חדש: gcloud beta device-run sessions describe {SESSION} [--full]
  • רשימת הסשנים הקודמים:
    • גרסה קודמת: הצגת היסטוריית המטריצה במסוף האינטרנט
    • חדש: gcloud beta device-run sessions list
  • ביטול הסשן:
    • Legacy: Web console only (no CLI command)
    • חדש: 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) הגדרת המכשיר וטירגוט --device model={M},version={V} --device={M}-{V} מיפוי של דגם המכשיר וגרסת מערכת ההפעלה ל---device מחרוזת המזהה. מקבל רשימה מופרדת בפסיקים של כמה מכשירים בדגל אחד (לדוגמה, --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 מנוהל באופן אוטומטי אי אפשר להגדיר ספריות משנה בהתאמה אישית. כל פריטי המידע שנוצרים במהלך הבדיקה מאורגנים באופן אוטומטי ב-automation/sessions/{session_id}/ בקטגוריה שצוינה על ידי --bucket-name.
נפוצות (Android & iOS) פלט ואחסון --record-video --video הערכים התקינים: always או on-failure.
נפוצות (Android ו-iOS) פלט ואחסון --directories-to-pull --paths-to-pull רשימה של נתיבים לשליפה מהמכשיר אחרי ההרצה.
Common Android פרמטרים ונכסים מרכזיים --app --apps רשימה. אם יש כמה קובצי APK או AAB של האפליקציה, צריך להעביר את כולם אל --apps.
Common Android פרמטרים ונכסים מרכזיים --additional-apks --apps רשימה. ממזגים ערכים נוספים של רשימות ישירות לרשימה הראשית של --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.
Common Android הגדרת המכשיר וטירגוט --device locale={L} --locale={L} ממפה את הלוקאל של המכשיר לדגל --locale ברמה העליונה (language-region, למשל --locale=en-US).
Common Android הגדרת המכשיר וטירגוט --device orientation={O} --orientation={O} מיפוי כיוון המכשיר לדגל --orientation ברמה העליונה (portrait או landscape).
‫Android נפוץ הגדרת המכשיר וטירגוט לא רלוונטי --coordinates קואורדינטות של הדמיית מיקום (latitude,longitude, לדוגמה, 37.4220,-122.0841).
Common Android בקרה על ביצוע בקשות ואי-יציבות --grant-permissions ברירת מחדל אוטומטית אוטומטיות. הרשאות בתחילת ההפעלה ניתנות באופן אוטומטי כברירת מחדל (שווה ערך ל---grant-permissions=all).|
Common Android פלט ואחסון לא רלוונטי --dumpsys אוספים dumpsys מהמכשיר (always או on-failure).
‫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}
שם רשומת ה-YAML של הפיצול (ללא הסיומת) בתוך --bucket-name ב-automation/smart-sharding/.
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 נפוץ הגדרת המכשיר וטירגוט --device locale={L} --locale={L} ממפה את הלוקאל של המכשיר לדגל --locale ברמה העליונה (language-region, למשל --locale=en-US).
גרסה נפוצה של iOS פלט ואחסון --directories-to-pull --paths-to-pull רשימת הקבצים או הספריות שצריך לשלוף אחרי הבדיקה, בפורמט BUNDLE_ID:DEVICE_PATH.
‫iOS XCTest בלבד פרמטרים ונכסים עיקריים --type=xctest sessions submit xctest מבנה פקודת המשנה קובע את סוג הבדיקה במקום הדגל --type (משתמש ב-gcloud alpha).
iOS XCTest בלבד פרמטרים ונכסים מרכזיים --test --test הנתיב לקובץ ה-ZIP שמכיל את קובצי האפליקציה ל-iOS ו-XCTest.
iOS XCTest בלבד בקרה על ביצוע בקשות ואי-יציבות --timeout --xctest-timeout משך הזמן המקסימלי המותר להרצת XCTest (הטווח התקין: 1m עד 1h, ברירת המחדל היא 5m).
iOS XCTest בלבד מריץ בדיקות ויעדים --xctestrun-file --xctestrun-file הנתיב לקובץ ‎ .xctestrun המותאם אישית.
iOS XCTest בלבד הפעלת בדיקות ויעדים --xcode-version --xcode-version מזהה הקטלוג או מחרוזת הגרסה של Xcode לשימוש (לדוגמה, ‫xcode-16-4 או 16.4). שאילתה באמצעות software-versions list.

הנחיות מעשיות לתרגום

כדי לתרגם את ההגדרות של Firebase Test Lab ו-Flank להרצה במכשיר, פועלים לפי ההנחיות הבאות:

1. מפרט המכשיר

ב-gcloud beta device-run, --device מקבלת רשימה מופרדת בפסיקים של מחרוזות מזהים של מודלים וגרסאות. בניגוד ל-Firebase שבו נדרש דגל --device אחד לכל מכשיר, בהרצה במכשיר אפשר לציין כמה מכשירים בדגל אחד. השפה, הכיוון והקואורדינטות המדומות של המכשיר מצוינים באמצעות דגלים נפרדים ברמה העליונה:

  • ❌ --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)

  • פיצול אחיד:
    • מגדירים את --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} (מצביע על רשומת המעקב של YAML בתוך --bucket-name בקטע automation/smart-sharding/).
    • מגדירים את --smart-sharding-max-shard-count={max_count} (מגבלה מקסימלית אופציונלית: 0-20 לכרטיסים פיזיים, 0-200 לכרטיסים וירטואליים).

4. הרצה אסינכרונית

  • Async & Waiting: כשמציינים את --async, ה-CLI מחזיר מיד את מזהה הסשן שנוצר. אפשר להמתין לסיום הסשן בתהליכי עבודה של 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

!הערה למה צריך להשתמש ב--- בשביל מפתחות: gcloud מחדיר מפתחות YAML ישירות למנתח הפקודות של ממשק שורת הפקודה בתור דגלים של שורת הפקודה. כל מפתח בקובץ ה-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"