בדף הזה מופיעה סקירה כללית על ספריית SDV Test Framework, ומוסבר איך להגדיר, לקבוע את התצורה ולהריץ בדיקות. משתמשים ב-SDV Test Framework לבדיקות מקצה לקצה. הכלי מבוסס על Mobly, ואתם כותבים בדיקות ב-Python.
בחירת גישת בדיקה
לפני שכותבים בדיקה, בוחרים את כלי הבדיקה שמתאים להיקף האימות:
| היקף הבדיקה | סוג המודול של Soong | כלי הרצה | מתי להשתמש? |
|---|---|---|---|
| בדיקות יחידה של חבילת שירותים | rust_test, rust_test_host או cc_test |
atest |
אימות של לוגיקה עסקית, טרנספורמציות של נתונים או ארגזי עזר מבודדים ב-Rust או ב-C++ במארח או במכונה וירטואלית (VM) אחת של Cuttlefish. |
| בדיקות מערכת מקצה לקצה ובדיקות של כמה מכונות וירטואליות | python_test_host (SDV Test Framework) |
atest או CATBox |
אימות של תזמור מחזור החיים של חבילת השירות, תקשורת בין מכונות וירטואליות, גישור SOME/IP או יעדי חומרה במכונה וירטואלית אחת עד שלוש מכונות וירטואליות. |
הגדרת הסביבה
ההנחה בדף הזה היא שכבר הגדרתם את תחנת העבודה ל-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.
- בדיקות לטווח ארוך: מיועדות לתקופות הרצה ארוכות.
- thought
בדיקות ביצועים: משתמשים בספרייה
perfetto. - בדיקות חומרה: מיועדות להרצה רק במכשיר פיזי, ולא ב-Cuttlefish (CF).
יצירת בדיקה
כל הבדיקות שנכתבות באמצעות המסגרת חייבות להיות במאגר הבדיקות. המיקום המדויק של הבדיקה תלוי בסוג שלה. במאמר יצירת בדיקת מערכת SDV מוסבר על נתיבי ספריות, תבניות של מחלקות בדיקה ב-Python, כללי Android.bp והנחיות לכתיבת קוד ב-Mobly.
הגדרת בדיקה
מגדירים את כל הבדיקות כך שיפעלו גם באמצעות atest וגם באמצעות CATBox.
הגדרת atest
המסגרת מספקת תבניות לבדיקות של מכונה וירטואלית אחת, שתיים ושלוש. מוסיפים לקובץ Android.bp את הנתונים הבאים:
מכונה וירטואלית אחת:
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", }
מוסיפים הערה שמציינת בבירור את מטרת השימוש בתבנית הזו ומסבירה למה נדרש הזמן הנוסף (לדוגמה, אם הבדיקה דורשת הורדת פריט מידע שנוצר בתהליך הפיתוח (artifact) שלוקחת זמן מסוים).
העברת קבצים למכשיר
בשלבים הבאים מוסבר איך להעביר קבצים למכשיר בשביל הגדרות atest.
העברת קבצים למכשיר
ה-framework לא תומך בהרחבת התבנית להרצה של atest.
לכן, צריך ליצור קובץ AndroidTest.xml שמחליף לגמרי את תבנית ברירת המחדל וכולל את האפשרויות המתאימות של target_preparer למכשירים.
מעתיקים את התוכן של התבנית:
sdv-one-device.xmlsdv-two-devices.xmlsdv-three-devices.xml
מעדכנים את
{MODULE}בשם המודול של הבדיקה.מוסיפים את
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.
יוצרים קובץ תצורה חדש ב-
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
- בדיקה לדוגמה:
מוסיפים את המידע המתאים לפי סוג הבדיקה:
הגדרת בדיקה של מכונה וירטואלית אחת:
<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>הגדרת בדיקה של שלוש מכונות וירטואליות:
<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 פעילה.
הגדרת הסביבה
ה-framework לא מפעיל מכונות של Cloud Virtual Device (CVD), לכן צריך להפעיל אותן לפני הרצת הבדיקות.
מגדירים את הסביבה ומפעילים את יעד ה-SDV:
. build/envsetup.sh lunch <TARGET>מפעילים את המכונה הראשונה של CVD:
cvd create --config=sdv_core_instance1מפעילים את המכונה השנייה של ה-CVD (לבדיקות של כמה מכונות וירטואליות):
cvd create --config=sdv_core_instance2מפעילים את המכונה השלישית של CVD (לבדיקות של כמה מכונות וירטואליות):
cvd create --config=sdv_core_instance3
הרצת בדיקה
atest <TestModuleName>
הפעלת CATBox
הפקודות האלה מניחות שאתם נמצאים בתיקיית השורש של המאגר.
- פיתוח CATBox:
m catbox - (אופציונלי) הצגת כל תוכניות הבדיקה הזמינות של 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