במסמך הזה אפשר למצוא הוראות מפורטות ליצירה של כמה מכשירים וקוראת מגבלות נוכחיות, כשהן ידועות.
הדוגמה
יש מודול מרובה מכשירים תואם CTS ל-Wi-Fi. הוא שולח הודעה המכשיר מחובר ל-Wi-Fi ומאמת שהמכשיר השני מקבל אותו.
מקור המודול הוא packages/מודוליםs/Wi-Fi/tests/hostsidetests/multidevices/test/aware/.
הוספנו בדוגמה כמה הערות מועילות, לפי מה שנראה לנו שימושי.
שלב 1: יוצרים את תיקיית המודול
מומלץ ליצור תיקייה עבור המודול 'ריבוי מכשירים' בחבילה הפרויקט שאליו הוא שייך. לדוגמה: cts/hostsidetests/multidevices/. מומלץ למקם את כל המודולים של מכשירים מרובים לפחות במיקום אחד כך שיהיה קל יותר לגלות דוגמאות.
כל הקבצים במודול הזה צריכים להיכלל בתיקיית מודול משלהם. עבור
לדוגמה: wifi_aware
.
שלב 2: יוצרים את הבדיקה
כאן מטמיעים את לוגיקת הבדיקה. היא תלויה מאוד עובר בדיקה.
יוצרים את מקור הבדיקה של Mobly, למשל: wifi_aware_test.py.
שלב 3: יוצרים את קובץ ה-build: Android.bp
הוספת קובץ Android.bp כמו packages/Modules/Wi-Fi/tests/hostsidetests/multidevices/test/Android.bp. הגדרת מודול python_test_host, בדומה ל:
python_test_host {
name: "CtsWifiAwareTestCases",
main: "wifi_aware_test.py",
srcs: ["wifi_aware_test.py"],
test_suites: [
"cts",
"general-tests",
],
test_options: {
unit_test: false,
},
data: [
// Package the snippet with the mobly test
":wifi_aware_snippet",
],
}
מציינים את קטעי הקוד של הבדיקה בשדה הנתונים, שיצוין בו את הקובץ הבינארי ואפשר לאתר אותו ולהתקין אותו בבדיקה על ידי ATest או ביצוע רציף.
קטעי טקסט הכלולים ב-Mobly זמינים ב-Android בכתובת external/mobly-bundled-snippets/.
אופציונלי: אפשר ליצור נכסי מידע מובנה בהתאמה אישית
בחלק מהמודולים מרובי המכשירים ייתכן שיהיה צורך בקטעי קוד מותאמים אישית של Mobly. הבדיקה לדוגמה כולל קטע קוד מבוסס Wi-Fi packages/Modules/Wi-Fi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/Wi-FiAware snippet.java, שנוצר באמצעות Mobly snippet Lib, שזמין ב-Android בכתובת: external/mobly-snippet-lib/.
צריך להגדיר את קטע הקוד באמצעות כלל android_test ב-Android.bp, כמו אינסטרומנטציה רגילה:
android_test {
name: "wifi_aware_snippet",
sdk_version: "current",
srcs: [
"CallbackUtils.java",
"WifiAwareSnippet.java",
],
manifest: "AndroidManifest.xml",
static_libs: [
"androidx.test.runner",
"guava",
"mobly-snippet-lib",
],
}
שלב 4: יוצרים את הגדרת המודול: AndroidTest.xml
הוספת קובץ AndroidTest.xml כמו packages/Modules/Wifi/tests/hostsidetests/multidevices/test/aware/AndroidTest.xml. בתצורת הבדיקה צריך לציין שני מכשירים לבדיקה: דומה ל:
<configuration description="Config for CTS Wifi Aware test cases">
<option name="test-suite-tag" value="cts" />
<option name="config-descriptor:metadata" key="component" value="wifi" />
<option name="config-descriptor:metadata" key="parameter" value="not_instant_app" />
<option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
<option name="config-descriptor:metadata" key="parameter" value="not_secondary_user" />
<device name="device1">
<!-- For coverage to work, the APK should not be uninstalled until after coverage is pulled.
So it's a lot easier to install APKs outside the python code.
-->
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="test-file-name" value="wifi_aware_snippet.apk" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
<option name="run-command" value="wm dismiss-keyguard" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.PythonVirtualenvPreparer">
<!-- Any python dependencies can be specified and will be installed with pip -->
<option name="dep-module" value="mobly" />
</target_preparer>
</device>
<device name="device2">
<target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
<option name="test-file-name" value="wifi_aware_snippet.apk" />
</target_preparer>
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
<option name="run-command" value="wm dismiss-keyguard" />
</target_preparer>
</device>
<test class="com.android.tradefed.testtype.mobly.MoblyBinaryHostTest">
<!-- The mobly-par-file-name should match the module name -->
<option name="mobly-par-file-name" value="CtsWifiAwareTestCases" />
<!-- Timeout limit in milliseconds for all test cases of the python binary -->
<option name="mobly-test-timeout" value="60000" />
</test>
</configuration>
שימו לב ש:
- הבדיקה לדוגמה הזו תלויה ב-Mobly. ניתן לציין כל תלות
בשביל
PythonVirtualenvPreparer
ותותקן באמצעות PIP. - השדה
mobly-par-file-name
שלMoblyBinaryHostTest
חייב להתאים למודול השם כמו ב-Android.bp. - צריך לציין
mobly-test-timeout
לבדיקה. הוא נמצא באלפיות שנייה חל על הביצוע הבינארי המלא של python (כל מקרי הבדיקה ביחד). המטרה של הפעולה הזו היא למנוע מצב שבו מקרי הבדיקה לא ייתקעו במקרה של בעיות מסוימות. - כל תג
device
יכול להכיל הגדרה ייחודית בכל מכשיר, The Mobly config יקבל אותן באותו סדר כפי שצוין ב-XML.
קשורה לקטע קוד APK התקנה:
- איש הקשר הראשוני עודכן כדי להתקין חבילות APK של קטע קוד דרך target_preparer בגלל שיחה עם צוות הכיסוי: כדי להבטיח מידות הכיסוי לא נמחקות בשלב מוקדם מדי, ההסרה מתבצעת על ידי Harness במקום באמצעות קוד בדיקה בקבצים הבינאריים של Python מציעים אחריות טובה יותר של תזמון.
שלב 5: הרצת בדיקה מקומית: אימות
בשלב זה, בדיקות על מספר מכשירים פועלות רק במכשירים פיזיים. לפני הרצה של
מוודאים שמכשירי הבדיקה נמצאים במצב תקין. הפקודה adb
devices
צריכה לדווח על רשימת המכשירים המחוברים. אם הרשימה מכילה
מכשירים שלא מיועדים לבדיקה, מציינים את המכשירים לבדיקה באמצעות הסימנים -s
לסמן.
עבור בדיקות Wi-Fi, צריך לוודא שמופעלת במכשיר Wi-Fi (לאחר איפוס להגדרות המקוריות).
אפשר להריץ את הבדיקה באופן מקומי עם atest:
$ atest CtsWifiAwareTestCases
מספר המכשירים שנעשה בהם שימוש אמור להופיע בכותרת הסיכום באישור
הפלט אמור להיראות כמו Test executed with 2 device(s)
.
פתרון בעיות
אם הבדיקה נכשלת במהלך הרצה מקומית בגלל:
שגיאה ב-Virtualenv
java.io.IOException: Cannot run program
"virtualenv": error=2, No such file or directory
צריך לוודא ש-virtualenv
נמצא ב-PATH. הוספה של " ~/.local/bin" אל PATH
כדי לפתור את הבעיה.
אםVirtualenv לא מותקנת, עקוב אחר: https://virtualenv.pypa.io/iw/previous/installation.html
היה צריך לקבל לפחות 2 אובייקטים של בקר, התקבל אחד
המודולים לבדיקה הם למכשירים מרובים או למכשיר יחיד, אין ולשלב מודולים. אם מנסים להפעיל מודול מרובה מכשירים ללא מספר השגיאה הזו תופיע:
Expected to get at least 2 controller objects, got 1
הפעלת המודול במצב 'ריבוי מכשירים' תפתור את הבעיה.
עבור CTS: ניתן להשתמש בפיצול כדי להפעיל אותו (לדוגמה: --shard-count 2)
או run cts-multidevces
.