SDV Test Framework

במסמך הזה מפורטת סקירה כללית של מסגרת הבדיקה של SDV, והוא כולל הוראות להגדרה, לקביעת תצורה ולביצוע של בדיקות. משתמשים במסגרת הבדיקה של SDV לבדיקות מקצה לקצה. הכלי מבוסס על Mobly, ואתם כותבים את הבדיקות ב-Python.

הגדרת הסביבה

במאמר הזה אנחנו מניחים שכבר הגדרתם את תחנת העבודה שלכם ל-SDV. כדי להריץ בדיקות של Framework, צריך להתקין את virtualenv.

תלויות של Python

הגישה המומלצת לניהול יחסי תלות ב-Android היא לארוז בדיקות, Python ויחסי התלות שלהם כקובץ הפעלה באמצעות הגדרת ה-build. חובה לפעול לפי הגישה הזו במאגר הבדיקות של SDV.

ספריית SDV Test Framework מספקת את התלויות האלה כברירת מחדל:

  • mobly
  • absl-py חובה להשתמש בפרמטר הזה כדי להשתמש בפרמטרים בבדיקות.
  • pexpect נדרש לפונקציונליות של פקודות אינטראקטיביות.
  • ptyprocess נדרש לפונקציונליות של פקודות אינטראקטיביות.

אם אתם צריכים יחסי תלות ספציפיים לבדיקה, אתם יכולים לכלול אותם בקובץ Android.bp של הבדיקה.

python_test_host {
    …
    libs: [
        "<DEPENDENCY1",
        "<DEPENDENCY2",
        …
    ],
    …
}

סוגים של בדיקות מערכת

יוצרים בדיקות מערכת באמצעות SDV Test Framework. המסגרת מבחינה בין הסוגים הבאים. סיווג הבדיקות בצורה נכונה:

  • בדיקות לדוגמה: מריצים שירותים לדוגמה של SDV ומוודאים שהתוצאה תואמת לפלט הצפוי.
  • בדיקות מקצה לקצה: אל תשתמשו בשירותי דוגמה של SDV.
  • בדיקות לטווח ארוך: מיועדות לתקופות הפעלה ממושכות.
  • בדיקות ביצועים: אפשר להשתמש בספרייה perfetto.
  • בדיקות חומרה: מיועדות להרצה רק במכשיר פיזי, ולא ב-Cuttlefish ‏ (CF).

יצירת בדיקה

כל הבדיקות שנכתבות באמצעות המסגרת צריכות להיות בתיקיית הבדיקות במאגר. המיקום המדויק של הבדיקה תלוי בסוג שלה.

הגדרת בדיקה

מגדירים את כל הבדיקות להרצה באמצעות atest ו-CATBox.

הגדרת אימות

המסגרת מספקת תבניות לבדיקות של מכונה וירטואלית אחת, שתי מכונות וירטואליות ושלוש מכונות וירטואליות. מוסיפים לקובץ Android.bp את הנתונים הבאים:

One VM

python_test_host {
  ...
  test_config_template: ":sdv_one_device",
}

שתי מכונות וירטואליות

python_test_host {
  ...
  test_config_template: ":sdv_two_devices",
}

שלוש מכונות וירטואליות

python_test_host {
  ...
  test_config_template: ":sdv_three_devices",
}

תבנית ברירת המחדל מספיקה לרוב הבדיקות. מומלץ להימנע מיצירת הגדרות מותאמות אישית, אלא אם יש סיבה משכנעת.

עדכון ברירת המחדל של הזמן הקצוב לתפוגה

זמן הקצוב לתפוגה שמוגדר כברירת מחדל אמור להספיק להרצת הבדיקות באופן מקומי.

אם הבדיקה נכשלת באופן מקומי בגלל פסק זמן, כדאי לפצל אותה לבדיקות שונות. בדיקות ארוכות מאוד עם הרבה מקרי בדיקה עלולות לגרום לצוואר בקבוק בהרצה.

אם אתם צריכים להגדיר זמן קצוב לתפוגה ארוך יותר מברירת המחדל, המשיכו לקרוא.

שינוי ברירת המחדל של הזמן הקצוב לתפוגה

ה-framework לא תומך בהרחבת התבנית לביצוע של atest. לכן, כדאי להשתמש בתבניות שסיפקנו, שכוללות הגדרה של פסק זמן ארוך יותר.

בדיקה ארוכה של מכונה וירטואלית אחת

python_test_host {
  ...
  test_config_template: ":sdv_one_device_long_test",
}

בדיקה ארוכה של שתי מכונות וירטואליות

python_test_host {
  ...
  test_config_template: ":sdv_two_devices_long_test",
}

מוסיפים תגובה שמציינת בבירור את המטרה של השימוש בתבנית הזו ומסבירה למה נדרש זמן נוסף (לדוגמה, אם הבדיקה מחייבת הורדה של ארטיפקט שלוקחת פרק זמן מסוים).

העברת קבצים למכשיר

בשלבים הבאים מוסבר איך לשלוח קבצים למכשיר עבור הגדרות של atest.

העברת קבצים למכשיר

ה-framework לא תומך בהרחבת התבנית לביצוע של atest. לכן, צריך ליצור קובץ AndroidTest.xml שמחליף לחלוטין את תבנית ברירת המחדל וכולל את האפשרויות התואמות target_preparer למכשירים.

  1. מעתיקים את התוכן של התבנית:

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. מעדכנים את {MODULE} בשם המודול של הבדיקה.

  3. מוסיפים את com.android.tradefed.targetprep.PushFilePreparer לכל מכשיר.

<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file" key="<FILE_NAME>" value="<REMOTE_FILE_PATH>" />
  </target_preparer>
</device>

הגדרת CATBox

כדי להריץ את הבדיקה כחבילה, נדרשת הגדרה של CATBox.

  1. יוצרים קובץ הגדרות חדש ב-libraries/sdv/sdv_catbox/res/config/ ופועלים לפי מוסכמות השמות האלה:

    • בדיקה לדוגמה: sdv-sample-<NAME>-test.xml
    • בדיקת E2E: sdv-e2e-<NAME>-test.xml
    • בדיקה שפועלת לאורך זמן: sdv-long-running-<NAME>-test.xml
    • בדיקת ביצועים: sdv-performance-<NAME>-test.xml
    • בדיקת חומרה: sdv-hw-<NAME>-test.xml
  2. מוסיפים את המידע המתאים לפי סוג הבדיקה:

הגדרת בדיקה אחת של VM

<configuration description="SDV <NAME> Test">
    <!-- Template for Device Configuration -->
    <template-include name="device-config" default="sdv-device-config/one-device" />

    <!-- Plan. Use the same name as the file name -->
    <option name="plan" value="<CONFIG_FILE_NAME>"/>

    <!-- Test: mobly-par-file-name should match the module name -->
    <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>

הגדרת בדיקה של שתי מכונות וירטואליות

<configuration description="SDV <NAME> Test">
    <!-- Template for Device Configuration -->
    <template-include name="device-config" default="sdv-device-config/two-devices" />

    <!-- Plan. Use the same name as the file name -->
    <option name="plan" value="<CONFIG_FILE_NAME>"/>

    <!-- Test: mobly-par-file-name should match the module name -->
    <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>

הגדרת בדיקה של שלוש מכונות וירטואליות

<!-- Copyright 2025 Google LLC -->
<configuration description="SDV <NAME> Test">
    <!-- Template for Device Configuration -->
    <template-include name="device-config" default="sdv-device-config/three-devices" />

    <!-- Plan. Use the same name as the file name -->
    <option name="plan" value="<CONFIG_FILE_NAME>"/>

    <!-- Test: mobly-par-file-name should match the module name -->
    <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>

תבנית ברירת המחדל מספיקה לרוב הבדיקות. מומלץ להימנע מיצירת הגדרות מותאמות אישית, אלא אם יש סיבה משכנעת.

עדכון ברירת המחדל של הזמן הקצוב לתפוגה

אם הזמן הקצוב לתפוגה שמוגדר כברירת מחדל לא מספיק לבדיקה שלכם, אתם יכולים לשנות אותו.

שינוי ברירת המחדל של הזמן הקצוב לתפוגה

כדי לשנות את הגדרת ברירת המחדל של הזמן הקצוב לתפוגה, מוסיפים את השורות הבאות לסוף קובץ ההגדרות. בבדיקות ארוכות, הזמן הקצוב לתפוגה צריך להיות 10 דקות לכל היותר.

  <!-- Long Test - 10 minutes timeout: <REASON> -->
  <option name="mobly-host:mobly-test-timeout" value="600000" />

העברת קבצים למכשיר

בקטע הבא מוסבר איך להעביר קבצים למכשיר כשמגדירים את CATBox.

העברת קבצים למכשיר

כדי לדחוף קבצים למכשיר המתאים, מוסיפים את ההגדרה הבאה אחרי האפשרות plan:

<!-- Automatically pushes config file to device-->
<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file"
      key="<FILE_NAME>"
      value="<REMOTE_FILE_PATH>"
    />
  </target_preparer>
</device>

אם אתם צריכים את הקבצים בכל מכשיר, מוסיפים את התצורה לכל מכשיר (לדוגמה, name=device1, name=device2).

ביצוע בדיקה

ההנחיות האלה מניחות שהשלמתם את ההגדרה של סביבת SDV פעילה.

הגדרת הסביבה

המסגרת לא מפעילה מופעים של מכשיר וירטואלי ב-Cloud ‏ (CVD), ולכן צריך להפעיל אותם לפני שמריצים את הבדיקות.

  1. מגדירים את הסביבה ומפעילים את יעד ה-SDV:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. מפעילים את המופע הראשון של מכשיר וירטואלי בענן (CVD):

    cvd create --config=sdv_core_instance1
    
  3. מפעילים את המופע השני של Cloud Virtual Device ‏ (CVD) (לבדיקות של כמה מכונות וירטואליות):

    cvd create --config=sdv_core_instance2
    
  4. מפעילים את המופע השלישי של המכשיר הווירטואלי בענן (CVD) (לבדיקות של כמה מכונות וירטואליות):

    cvd create --config=sdv_core_instance3
    

הרצת בדיקה באמצעות atest

atest <TestModuleName>

הפעלת CATBox

הפקודות האלה מניחות שאתם נמצאים בספריית הבסיס של המאגר.

  1. גרסת Build של CATBox: m catbox
  2. (אופציונלי) כדי לראות את כל תוכניות הבדיקה הזמינות של SDV ב-CATBox:
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-

מריצים בדיקה:

הפעלת בדיקה של מכונה וירטואלית אחת

NOTIFY_AS_NATIVE=0.0.0.0:6520 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520

הרצת בדיקה של שתי מכונות וירטואליות

NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521

הרצת בדיקה של שלוש מכונות וירטואליות

NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521,0.0.0.0:6522 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521 --{device3}serial 0.0.0.0:6522