אם מערך הבדיקות גדול או שזמן ההרצה ארוך, אפשר לפצל את הבדיקות בין כמה מכשירים: sharding.
ל-sharding יש דרישות מוקדמות כדי שמפעיל הבדיקה יתמוך ב-sharding.
רוב כלי ההרצה של הבדיקות הראשיות כבר תומכים בפיצול, כך שלא נדרשת עבודה נוספת. הבדיקות הבאות כבר תומכות בפיצול: בדיקות אינסטרומנטציה, בדיקות מונחות בצד המארח ו-GTest.
יש שני סוגים של חלוקה למקטעים שאנחנו תומכים בהם ב-Tradefed: מקומית ומבוזרת. יש ביניהם כמה נקודות דמיון, ולכן בדף הזה מתוארים המאפיינים המשותפים ואז המאפיינים הספציפיים של כל אחד מהם.
מאפיינים נפוצים
שני סוגי החלוקה לשברים מניחים את אותן תכונות מתוך מריצי הבדיקות: השברים צריכים להיות עצמאיים ודטרמיניסטיים. בשלב הראשון של שני סוגי החלוקה צריך ליצור את הרשימה המלאה של הבדיקות לפי הסדר, ואז לחלק אותן לקבוצות או לחלקים שונים.
ההבדל העיקרי בין הטפסים של חלוקת הנתונים הוא באופן שבו הם מבצעים את הבדיקות. פרטים נוספים מופיעים בקטעים הבאים.
חלוקה מקומית
Local sharding פירושו שכל המכשירים שמעורבים בהפעלה של ה-sharded invocation מחוברים לאותו מארח פיזי.
ביצוע
בחלוקה מקומית לשברי מידע נעשה שימוש בכל המכשירים שמחוברים לאותו מארח. לשם כך, נוצר מאגר של בדיקות שצריך להריץ, וכל מכשיר מבצע בדיקות כשאין לו עבודה (כלומר, אחרי שהוא סיים את הבדיקה הקודמת). כך מתקבל ניצול אופטימלי של המכשיר. השיטה הזו נקראת גם חלוקה דינמית למקטעים.
אפשרויות
--shard-count XX
חלוקת נתונים (sharding) מבוזרת
חלוקה למקטעים מבוזרת פירושה שכל המכשירים שמשתתפים בהרצה של קריאה מפוצלת יכולים להיות בכל מקום ולשמש כמארחים פיזיים שונים.
ביצוע
החלוקה לרסיסים מתבצעת כשיוצרים את רשימת הבדיקות, והתוכן של כל רסיס מריץ רק את הרסיס שנדרש כרגע. לכן, כל הרסיסים המפוזרים יוצרים בהתחלה את אותה רשימה ואז מבצעים קבוצת משנה של הרשימה שאינה חופפת לקבוצות משנה אחרות, וכך כל הבדיקות מבוצעות.
המאפיין העיקרי של הטופס הזה הוא שהרסיסים לא מודעים זה לזה בכלל, ויכולים להיכשל באופן עצמאי.
החיסרון העיקרי הוא שאורך הרסיס לא בהכרח מאוזן, פשוט כי אי אפשר לחזות מראש את זמן הריצה של כל בדיקה בכל רסיס. החלוקה מתבצעת כך שבכל אחד מהרסיסים יהיה מספר דומה של תרחישי בדיקה.
אפשרויות
--shard-count XX --shard-index XX
חלוקת טוקנים
אפשר להשתמש בחלוקת טוקנים רק עם חלוקה מקומית. הדגל לא פועל בתרחישי שימוש ב-sharding שאינם מקומיים. לפעמים אחד מהמכשירים שמשתתפים בשיתוף המידע מחזיק במשאבים מיוחדים שאין לאחרים, כמו כרטיס SIM. יכול להיות שחלק מהבדיקות יפעלו רק כשהמשאב המיוחד הזה זמין, ואם לא – הן ייכשלו.
הפתרון שלנו לתרחישי שימוש כאלה הוא חלוקת טוקנים. מודולים לבדיקה יכולים להצהיר אילו משאבים מיוחדים הם צריכים ב-AndroidTest.xml שלהם, ו-Tradefed מעבירה את הבדיקות למכשיר שיש בו את המשאב.
תצורת XML
<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />
ה-value של הטוקן תואם ל-TokenProperty של Tradefed ומשויך ל-handler ב-TokenProviderHelper.
כך אפשר להריץ מודולים של בדיקות במכשירים שיכולים לבצע את הבדיקות בצורה תקינה.
מה קורה אם אי אפשר להריץ את הבדיקה באף מכשיר?
אם אין מכשירים זמינים עם משאב שתואם למודול הבדיקה, הבדיקה של המודול תיכשל והמודול יידלג כי אי אפשר להפעיל אותו בצורה תקינה.
לדוגמה, אם מודול בדיקה מבקש כרטיס SIM כדי לפעול, אבל לאף מכשיר אין כרטיס SIM, מודול הבדיקה נכשל.
הטמעה
מעבירים את ה-feature flag הזה לשורת הפקודה הראשית של Tradefed:
--enable-token-sharding