בדף הזה נסביר מה אפשר לשפר במודול של חבילת השירות (AndroidTest.xml
) באמצעות חלוקה לחלקים (sharding), כדי לקבל את הביצועים המהירים ביותר במהלך הביצועים הרציפים במעבדה. ננסה לתאר את האפשרויות באופן כללי יחד עם הנימוקים לשימוש בכל אחת מהן.
כשמריצים חבילה רציפה ב-Lab, בדרך כלל היא מחולקת למספר מכשירים כדי לקצר את זמן השלמת הבדיקה הכולל. בדרך כלל, המערכת מנסה לאזן את זמן הביצוע של כל שריד כדי למזער את זמן השלמת הבדיקה הכולל (כשהשריד האחרון מסתיים). עם זאת, בגלל אופי חלק מהבדיקות, לא תמיד יש לנו מספיק תובנות פנימיות ואנחנו צריכים לבקש מבעלי המודול לשנות התנהגות מסוימת.
אפשר לחלק אותם למקטעים או לא?
אפשר לתייג מודול (AndroidTest.xml
) באמצעות <option name="not-shardable" value="true" />
כדי להודיע לרתמה שלא צריך לפצל אותו.
במודול רגיל, מומלץ לאפשר לרתמה לפצל את המודול (התנהגות ברירת המחדל). אבל במקרים מסוימים, כדאי לשנות את ההתנהגות הזו:
- כשהגדרת המודול יקרה:
פיצול מודול גורם לתהליך ההכנה (התקנת APK, קובץ Push וכו') שיכול לפעול פעם אחת לכל מכשיר המעורב. אם הגדרת המודול ארוכה וקשה, ולא כדאי ליצור לה רפליקה בהשוואה לזמן הריצה של הבדיקה, צריך לתייג את המודול כבלתי ניתן לחלוקה למקטעים.
- כשמספר הבדיקות במודול נמוך:
חלוקה של מודול לחלקים מאפשרת להריץ את כל תרחישי הבדיקה בנפרד במכשירים שונים. הדבר קשור לנקודה הראשונה: אם מספר הבדיקות נמוך, יכול להיות שבחלק מהשברים תהיה בדיקה אחת או אף בדיקה, וכתוצאה מכך כל שלב הכנה יהיה יקר למדי. לדוגמה, בדרך כלל לא כדאי להתקין 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