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

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

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

אפשר לחלק אותם למקטעים או לא?

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

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

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

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

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

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

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

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

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

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

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

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

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