בדיקת חלוקה לפלחים

כשמאגר הבדיקות גדול או שזמן הביצוע ארוך, אנחנו מציעים אפשרות לפצל את הבדיקות לכמה מכשירים: חלוקה לפלחים.

כדי להריץ בדיקות בחלוקה למקטעים, יש דרישות מוקדמות.

רוב הכלי הראשיים להרצת בדיקות כבר תומכים בחלוקה למחיצות, כך שאין צורך לבצע פעולה נוספת. כבר יש תמיכה בחלוקה לפלחים בבדיקות האלה: בדיקות אינסטרומנטציה, בדיקות שמנוהלות בצד המארח, GTest.

יש שני סוגים של חלוקה לפלחים שאנחנו תומכים בהם ב-Tradefed: מקומית ומבוזרת. יש ביניהם כמה מאפיינים דומים, ולכן בדף הזה מתוארים המאפיינים המשותפים ואז המאפיינים הספציפיים של כל אחד מהם.

מאפיינים נפוצים

בשתי צורות הפיצול, נדרש מהמפעילים של הבדיקות שיציגו את אותן תכונות: עצמאיות ודטרמיניסטיות. השלב הראשון בשני החלוקות הוא ליצור את הרשימה המלאה והמסודרת של הבדיקות, ואז לפצל אותן לקבוצות/לפלחים שונים.

ההבדל העיקרי בין צורות הפיצול הוא בדרך שבה הן מבצעות את הבדיקות. פרטים נוספים מופיעים בקטעים הבאים.

חלוקה לקטעים מקומית

חלוקה למקטעים מקומיים: כל המכשירים שמעורבים בהפעלה של הקריאה המחולקת מחוברים לאותו מארח פיזי.

ביצוע

כשמשתמשים בחלוקה לקטעים מקומית, אפשר לנצל את כל המכשירים שמחוברים לאותו מארח על ידי יצירת מאגר של בדיקות שצריך לבצע, ולכל מכשיר מבצעים סקרים לגבי בדיקות כשהמכשיר פנוי (כלומר, כשהבדיקה הקודמת הסתיימה). כך ניתן לבצע אופטימיזציה של ניצול המכשיר. אנחנו גם קוראים לזה חלוקה דינמית.

אפשרויות

--shard-count XX

חלוקה מבוזרת

חלוקה מבוזרת למקטעים: כל המכשירים המעורבים בהפעלת ההפעלה המחולקת למקטעים יכולים להיות בכל מקום ויכולים להיות מחוברים למארחים פיזיים שונים.

ביצוע

חלוקה מבוזרת מתבצעת בזמן יצירת רשימת הבדיקות, והתוכן של כל פלחי המשנה מפעיל רק את פלחי המשנה המבוקשים כרגע. כל הפלחים המפוזרים יוצרים תחילה את אותה רשימה, ולאחר מכן מריצים קבוצת משנה בלעדית שלה, וכך כל הבדיקות מופעלות.

המאפיין העיקרי של הצורה הזו הוא שהשברים לא מודעים זה לזה בכלל, ויכולים להיכשל בנפרד.

החיסרון העיקרי הוא שאורך הפלח לא בהכרח מאוזן, כי אנחנו לא יכולים לחזות מראש את זמן הריצה של כל בדיקה בכל פלח. המטרה של ההפצה היא לכלול בערך את אותו מספר של תרחישי בדיקה בכל שבר.

אפשרויות

--shard-count XX --shard-index XX

חלוקת טוקנים

אפשר להשתמש בחלוקה של אסימונים רק עם חלוקה מקומית. הדגל לא פועל בתרחישי שימוש עם חלוקה לא צפופה (non-local sharding). לפעמים אחד מהמכשירים המעורבים בחלוקה לפלחים מכיל משאבים מיוחדים שלא נמצאים במכשירים אחרים, כמו כרטיס SIM. יכול להיות שחלק מהבדיקות יפעלו רק כשהמשאבים המיוחדים האלה יהיו זמינים, ובמקרים אחרים הן יכשלו.

חלוקת אסימונים היא הפתרון שלנו לתרחישים כאלה. מודולי הבדיקה יכולים להצהיר על המשאב המיוחד הנדרש להם ב-AndroidTest.xml, ו-Tradefed מפנה את הבדיקות למכשיר שיש בו את המשאב.

הגדרות XML

<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />

השדה value של הטוקן תואם ל-TokenProperty של Tradefed, והוא משויך למטפל ב-TokenProviderHelper.

כך אפשר להריץ מודולים של בדיקות במכשירים שיכולים לבצע את הבדיקות בצורה תקינה.

מה קורה אם אין מכשירי Android שאפשר להריץ בהם את הבדיקה?

אם לא נמצאו מכשירים זמינים שיש להם את המשאב התואם למודול הבדיקה, מודול הבדיקה נכשל ומועבר לשלב הבא כי אי אפשר להריץ אותו כמו שצריך.

לדוגמה, אם מודול בדיקה מבקש כרטיס SIM כדי לפעול אבל לאף מכשיר אין כרטיס SIM, מודול הבדיקה נכשל.

הטמעה

מעבירים את דגל התכונה הזה לשורת הפקודה הראשית של Tradefed:

--enable-token-sharding