הגדרת חלוקה לפלחים

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

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

האם אפשר לפצל אותם או לא?

אפשר לתייג מודול (AndroidTest.xml) באמצעות <option name="not-shardable" value="true" /> כדי להודיע לרתמה שלא צריך לפצל אותו.

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

  • כשהעלות של הגדרת המודול גבוהה:

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

  • כשמספר הבדיקות במודול נמוך:

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

בדיקות אינסטרומנטציה: מספר המקסימלי של פלחים?

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

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

לכן, כשמספר הבדיקות בחבילת ה-APK של בדיקת המדידה נמוך, התיוג של המודול ב-<option name="not-shardable" value="true" /> יאפשר לערכת הכלים להבין שלא כדאי לפצל את המודול הזה.

ל-AndroidJUnitTest runner יש אפשרות מיוחדת שמאפשרת לציין את מספר השברים המקסימלי שמותר לפצל אותו אליו: <option name="ajur-max-shard" value="5" />.

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

לדוגמה, אם קובץ ה-APK של בדיקת המדידה מכיל רק שני תרחישים לבדיקה, אבל אתם עדיין רוצים לפצל אותו, הערך 2 של ajur-max-shard יבטיח שלא תיצרו פלחים ריקים.