הפעל בדיקות עם מספר מכשירים

דף זה עוזר לך להשתמש ב- 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 ; אתה צריך לתת שם יותר תיאורי אם אפשר בהתאם לסוג המכשיר שאתה באמת מצפה שיוגדר.