בדף הזה מוסבר איך להשתמש ב-Trade Federation Test Harness עם כמה מכשירים במהלך הבדיקה.מומלץ קודם לקרוא את הדוגמה מקצה לקצה כדי להבין איך משתמשים בדרך כלל בכלי הזה.
מה ההבדל בשימוש בכמה מכשירים?
יש כמה הבדלים בהגדרת בדיקות בכמה מכשירים ובהרצת בדיקות כאלה ב-Trade Federation, במיוחד:
כל הגדרה קיימת למכשיר אחד תקפה למצב ריבוי מכשירים.
<! -- TODO: Clarify the sentence immediately above by adding an example of a one-device use case as it pertains to multi-device mode in a second sentence. -->>
הגדרה של כמה מכשירים
במסמך הזה אנחנו מניחים שאתם כבר מכירים את ההגדרה הרגילה של בדיקת TF. כך נראית הגדרה טיפוסית לבדיקה עם שני מכשירים:
<configuration description="A simple multi-devices example in Tradefed">
<device name="device1">
<target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
</device>
<device name="device2">
<target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
</device>
<option name="log-level" value="verbose" />
<test class="com.android.tradefed.HelloWorldMultiDevices" />
<logger class="com.android.tradefed.log.FileLogger" />
<result_reporter class="com.android.tradefed.result.ConsoleResultReporter" />
</configuration>
יש כמה דברים שחשוב לציין לגבי המבנה:
- לכל מכשיר שיידרש, צפוי
<device>. - התגים
<build_provider>, <target_preparer>, <device_recovery>, <device_requirements>ו-<device_options>צריכים להיכלל בתג<device>, אחרת תופעל חריגה. - המאפיין
nameשל<device>הוא חובה, והוא צריך להיות ייחודי בין כל המכשירים שמופיעים בהגדרה. הוא משמש להפניה למכשיר מסוים שמשויך אליו. כך אפשר לטרגט מכשיר מסוים בבדיקה. <option>יכול להיות בעל היקף גלובלי כשהוא נמצא בבסיס ההגדרה, או להיות מוגבל להיקף המכשיר כשהוא מצוין בתוך התג<device>.
כל שאר הכללים שחלים על הגדרת מכשיר יחיד עדיין חלים כאן. פרטים נוספים מופיעים בדוגמה Hello World שלמטה.
עדכון משורת הפקודה
כשמציינים אפשרויות בשורת הפקודה של TF, אפשר גם לציין היקף של מכשיר באמצעות {<device name>}, כאשר <device name> הוא השם שצוין בתצורת ה-XML.
בדוגמה שלמעלה, האפשרויות הבאות היו מותרות:
--com.android.tradefed.targetprep.DeviceSetup:disable--device-setup:disable
אפשר לטרגט רק אחד מאובייקטי המכשיר build_provider באמצעות שם המכשיר, באופן הבא:
--{device2}device-setup:disable
בדוגמה הזו, device2 מדלג על הגדרת המכשיר, אבל device1 לא מדלג.
איך TF בוחר את המכשירים?
Trade Federation מחפש מכשיר שתואם ל-device_requirements (בדרך כלל סוג המכשיר, המוצר וכו') לפי סדר הופעת המכשיר בהגדרה. בכל פעם שמקצים מכשיר, TF מנסה להקצות את המכשיר הבא. אם אי אפשר להקצות את כל המכשירים, הם ישוחררו והפקודה תנסה שוב כשהמערכת תמצא התאמה לכל המכשירים.
איך TF מכין את המכשירים?
שלב ההכנה למספר מכשירים דומה ברובו לשלב ההכנה למכשיר יחיד.
כל מכשיר מוכן על ידי קריאה ל-<target_preparer> לפי הסדר שבו הוא מופיע בתוך <device>.
אפשר גם להשתמש ב-<multi_target_preparer> שצוין ברמת הבסיס של ההגדרה, כדי להפעיל שלבי הכנה שדורשים כמה מכשירים, כמו צימוד מכשירים. היא מופעלת אחרי השלב target_preparer.
אפשרות אחרת היא <pre_multi_target_preparer> שפועל לפני השלב target_preparer.
- צריך להשתמש ב-
<pre_multi_target_preparer>להגדרה שחייבים לבצע לפני הגדרת מכשיר ספציפי. - צריך להשתמש ב-
<multi_target_preparer>להגדרה שצריך לבצע אחרי הגדרות של מכשירים ספציפיים.
לדוגמה:
flash device 1 (target_preparer) flash device 2 (target_preparer) bluetooth connect both devices (multi_target_preparer)
כתיבת בדיקה לכמה מכשירים
כשכותבים בדיקה רגילה של מכשיר יחיד, מטמיעים את הממשק IDeviceTest.
כדי שהבדיקות יקבלו את המכשירים שנבדקים, אפשר להטמיע את IMultiDeviceTest או את IInvocationContextReceiver.
IMultiDeviceTest מספק לכם מיפוי ישיר של המכשיר אל IBuildInfo שלו, בעוד ש-IInvocationContextReceiver מספק לכם בהמשך את ההקשר המלא (מכשיר, IBuildInfo ומטא-נתונים).
לאחר מכן תוכלו להשתמש בממשקי ה-API הרגילים של ITestDevice ש-TF מספק לכתיבת בדיקות.
עדיין לא קיימים ממשקי API לביצוע פעולות ממכשיר אחד למכשיר אחר, כמו
device1.sync(device2). אם לדעתכם יש לכם תרחיש שימוש משכנע שצריך לקבל תמיכה, אתם יכולים לשלוח את הנימוקים שלכם לרשימת התפוצה android-platform.
דוגמה לשימוש בכמה מכשירים
הוספנו דוגמה להגדרה בסגנון Hello World:
multi-devices.xml
יש גם דוגמה להטמעה של multi_target_preparer
HelloWorldMultiTargetPreparer
שמראה איך לקבל את רשימת המכשירים והגרסאות שלהם.
זו דוגמה מלאה שכוללת:
- הקצאת שני מכשירים
- גישה לשני המכשירים דרך
multi_target_preparer - הפעלת בדיקה שבה נעשה שימוש בשני המכשירים
אחרי שיוצרים את Tradefed, אפשר להשתמש בפקודה הבאה במעטפת TF:
run example/multi-devices
אמור להופיע פלט עם הנתונים הבאים:
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' from context with build 'com.android.tradefed.build.DeviceBuildInfo@c99cbc1'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' from context with build 'com.android.tradefed.build.DeviceBuildInfo@b41f20c5'
כדי להפעיל את הפעולות שלמעלה, צריך שני מכשירים מחוברים. אפשר לבדוק את זה באמצעות: adb devices
במהלך ההפעלה, אפשר לעקוב אחרי ההתקדמות שלה כמו במכשירים בודדים באמצעות list i ו-list d:
tf >list i
Command Id Exec Time Device State
1 0m:35 [00b4e73b4cbcd162, LP5A390056] fetching build
tf >list d
Serial State Product Variant Build Battery
00b4e73b4cbcd162 Allocated bullhead bullhead NRD90O 100
LP5A390056 Allocated shamu shamu NRD90I 100
אפשר לראות את המכשירים שמשתתפים בכל הפעלה, וגם את כל המכשירים הזמינים והמצב שלהם.
שימו לב שבמקרה הזה קראנו לשני המכשירים בהגדרה device1 ו-device2. מומלץ לתת שם תיאורי יותר אם אפשר, בהתאם לסוג המכשיר שאתם מצפים שיוגדר.