בדף הזה מתואר מה אפשר לשנות במודול של חבילת תוכנה (AndroidTest.xml
) באמצעות חלוקה למקטעים, כדי להשיג את מהירות הביצועים הטובה ביותר במהלך ביצוע רציף במעבדה. ננסה לתאר את האפשרויות באופן כללי, ונציין את ההיגיון לשימוש בכל אחת מהן.
כשמריצים חבילה ברציפות ב-Lab, החבילה בדרך כלל מחולקת למספר מכשירים כדי לקצר את זמן הסיום הכולל. בדרך כלל, ה-harness מנסה לאזן את זמן הביצוע של כל שבר כדי למזער את זמן הסיום הכולל (כשהשבר האחרון מסתיים). אבל בגלל האופי של חלק מהבדיקות, לא תמיד יש לנו מספיק אינטרוספקציה ואנחנו צריכים שבעל המודול יכוון התנהגות מסוימת.
ניתן לחלוקה או לא?
אפשר לתייג מודול (AndroidTest.xml
) באמצעות <option name="not-shardable" value="true" />
כדי להודיע למסגרת שהוא לא צריך להיות מחולק.
במודול רגיל, כדאי לאפשר למסגרת לחלק את המודול (התנהגות ברירת המחדל). אבל במקרים מסוימים, יכול להיות שתרצו לשנות את ההתנהגות הזו:
- כשההגדרה של המודול יקרה:
פיצול מודול גורם להכנה (התקנת APK, דחיפת קובץ וכו') יכול להיות שיופעל פעם אחת לכל מכשיר שמעורב. אם הגדרת המודול ארוכה ויקרה ולא כדאי לשכפל אותה בהשוואה לזמן הריצה של הבדיקה, כדאי לתייג את המודול כלא ניתן לפיצול.
- אם מספר הבדיקות במודול נמוך:
חלוקת מודול לשברים מאפשרת להריץ את כל תרחישי הבדיקה באופן עצמאי במכשירים שונים. זה קשור לנקודה הראשונה. אם מספר הבדיקות נמוך, יכול להיות שבחלק מהשברים תהיה רק בדיקה אחת או שלא תהיה אף בדיקה, ולכן כל שלב הכנה יהיה יקר למדי. לדוגמה, בדרך כלל לא כדאי להתקין קובץ APK בשביל מקרה בדיקה יחיד.
בדיקות אינסטרומנטציה: מהו מספר הרסיסים המקסימלי?
בדיקת מכשור שמופעלת דרך AndroidJUnitTest לא חושפת את מספר הבדיקות שכלולות במכשור עד להתקנה ולהפעלה של ה-APK. הפעולות האלה יקרות ולא ניתן לבצע אותן בזמן השארדינג עבור כל המודולים שכלולים בחבילה.
יכול להיות שה-harness יחלק את בדיקת המכשור ליותר מדי רסיסים, ובסופו של דבר ייווצרו רסיסים ריקים. חלוקת בדיקת מכשור עם חמש בדיקות לשישה רסיסים תגרום ליצירת חמישה רסיסים עם בדיקה אחת ורסיס אחד ללא בדיקות. כל אחד מהרסיסים האלה ידרוש התקנת APK יקרה.
לכן, אם מספר הבדיקות בחבילת ה-APK של בדיקת המכשור נמוך, תיוג המודול באמצעות <option name="not-shardable" value="true" />
יאפשר למערכת לדעת שלא כדאי לפצל את המודול הזה.
ל-AndroidJUnitTest
runner יש אפשרות מיוחדת שמאפשרת לו לציין את המספר המקסימלי של רסיסים שהוא יכול לפצל אליהם:
<option name="ajur-max-shard" value="5" />
.
כך אפשר לציין מספר מקסימלי של פעמים שבהן אפשר לפצל את המיכשור, בלי קשר למספר הרסיסים שנדרש ברמת ההפעלה. כברירת מחדל, המכשיר יחולק למספר הרסיסים שנדרשו עבור הקריאה.
לדוגמה, אם קובץ ה-APK של בדיקת המכשור מכיל רק שני תרחישי בדיקה, אבל עדיין רוצים לפצל אותו, הגדרת ערך של ajur-max-shard
ל-2
תבטיח שלא ייצרו רסיסים ריקים.