בדף הזה מוסבר איך להשתמש ב-Trade Federation Test Harness עם כמה מכשירים במהלך הבדיקה.קודם כדאי להכיר את השימוש הרגיל כפי שמתואר בדוגמה מקצה לקצה.
מה ההבדל בין מכשירים שונים?
יש כמה הבדלים בהגדרה ובהרצה של בדיקות במספר מכשירים ב-Trade Federation, במיוחד:
כל הגדרה קיימת של מכשיר אחד תקפה למצב ריבוי מכשירים.
<! -- TODO: הבהר את המשפט שלמעלה על ידי הוספת דוגמה לתרחיש לדוגמה של מכשיר אחד, כי הוא קשור למצב ריבוי מכשירים במשפט שני. -->>
הגדרות אישיות של כמה מכשירים
במסמך הזה אנו יוצאים מנקודת הנחה שכבר ידוע לכם איך מגדירים בדיקות ב-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 מכשיר 1 (target_preparer) Flash מכשיר פלאש 2 (target_preparer) Bluetooth חיבור שני המכשירים (multi_target_preparer)
כתיבת בדיקה במספר מכשירים
כשיוצרים בדיקה רגילה במכשיר אחד, מטמיעים את הממשק IDeviceTest.
כדי שהבדיקות יקבלו את המכשירים שנבדקים, אפשר להטמיע את IMultiDeviceTest או את IInvocationContextReceiver.
הכלי IMultiDeviceTest נותן מפה ישירה של המכשיר אל IBuildInfo שלו, ובשלב מאוחר יותר IInvocationContextReceiver נותן את ההקשר המלא (device, IBuildInfo ומטא-נתונים).
לאחר מכן תוכלו להשתמש בממשקי ה-API הרגילים של ITestDevice ש-TF הגדיר לצורך כתיבת בדיקות.
עדיין אין ממשקי API לביצוע פעולות ממכשיר אחד למכשיר אחר, כמו device1.sync(device2)
. אם לדעתכם יש לכם תרחיש לדוגמה שצריך לתמוך בו, תוכלו לשלוח את נימוקיכם לרשימה android-platform.
דוגמה ל-Hello World במספר מכשירים
הוספנו הגדרה לדוגמה שדומה ל-Hello World: multi-devices.xml. יש גם דוגמה להטמעה של multi_target_preparer
HelloWorldMultiTargetPreparer שמראה איך לקבל את רשימת המכשירים וה-builds שלהם.
זו דוגמה מלאה שכוללת:
- הקצאת שני מכשירים
- גישה לשני המכשירים דרך
multi_target_preparer
- הפעלת בדיקה שמשתמשת בשני המכשירים
אחרי שמפתחים את רכיב המסחר, אפשר להשתמש בפקודה הבאה במעטפת של 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
. אם אפשר, כדאי לתת שם תיאורי יותר, בהתאם לסוג המכשיר שאתם מצפים להגדיר.