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