קוף על קוד התרגול של ממשק המשתמש/האפליקציה

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

סקירה כללית

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

הקוף כולל כמה אפשרויות, אבל הן מתחלקות לארבע קטגוריות:

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

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

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

בהתאם לרמת דרגת המלל שבחרתם, יוצגו גם דוחות על ההתקדמות של הקוף והאירועים שנוצרים.

שימוש בסיסי בקוף

אפשר להפעיל את הקוף באמצעות שורת פקודה במחשב הפיתוח או מתוך סקריפט. מכיוון שהקוף רץ בסביבת האמולטור/המכשיר, צריך להפעיל אותו ממעטפת בסביבה הזו. כדי לעשות את זה, אפשר להוסיף את הפקודה adb shell לכל פקודה, או על ידי כניסה למעטפת והזנת פקודות של Monkey ישירות.

התחביר הבסיסי הוא:

$ adb shell monkey [options] <event-count>

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

$ adb shell monkey -p your.package.name -v 500

הסבר על אפשרויות של פקודות

בטבלה הבאה מפורטות כל האפשרויות שאפשר לכלול בשורת הפקודה Monkey.

קטגוריה אפשרות תיאור
כללי --help מדפיס מדריך שימוש פשוט.
-v כל סימן v-בשורת הפקודה יגדיל את רמת דרגת המלל. רמה 0 (ברירת המחדל) מספקת מעט מידע מעבר להתראה על הפעלה, להשלמת הבדיקה התוצאות הסופיות. ברמה 1 מופיעים פרטים נוספים על הבדיקה בזמן שהיא רצה, כמו אירועים ספציפיים שנשלחים אל הפעילויות שלכם. ברמה 2 תמצאו מידע מפורט יותר על ההגדרות, כמו פעילויות שנבחרו או שלא נבחרו בשבילם בדיקה.
אירועים -s <seed> ערך מקור למחולל מספרים פסאודו אקראיים. אם תריצו מחדש את הקוף עם אותו מקור ערך, הוא ייצור את אותו רצף של אירועים.
--throttle <milliseconds> הוספת השהיה קבועה בין אירועים. ניתן להשתמש באפשרות הזו כדי להאט את הקוף. אם לא מציינים זאת, אין עיכוב והאירועים נוצרים במהירות האפשרית.
--pct-touch <percent> התאמת אחוז אירועי המגע. (אירועי מגע הם אירוע שמתרחש למטה במקום אחד במסך.)
--pct-motion <percent> התאמת אחוז אירועי התנועה. (אירועי תנועה כוללים אירוע למטה במקום כלשהו על המסך, סדרה של פסאודו אקראיים תנועות שונות ואירוע פעיל.)
--pct-trackball <percent> התאמת אחוז אירועי כדור העקיבה. (אירועי כדור-מעקב מורכבים מתנועה אקראית אחת או יותר, ולפעמים יש אחריהן קליק.)
--pct-nav <percent> שינוי האחוז של המדד 'בסיסי' אירועי ניווט. (אירועי ניווט: למעלה/למטה/שמאלה/ימינה, כקלט מהתקן קלט כיווני).
--pct-majornav <percent> שינוי האחוז של ה'גדול' אירועי ניווט. (אלה אירועי ניווט שבדרך כלל יגרמו לפעולות בתוך ממשק המשתמש, כמו הלחצן המרכזי בלוח עם 5 כיוונים, המקש 'הקודם' או מקש התפריט).
--pct-syskeys <percent> התאמת האחוז של 'מערכת' אירועים מרכזיים. (אלה מפתחות שבדרך כלל שמורים לשימוש המערכת, למשל 'בבית', 'חזרה', 'התחלת שיחה', סיום השיחה או פקדי עוצמת הקול).
--pct-appswitch <percent> התאמת אחוז ההפעלות של הפעילות. במרווחי זמן אקראיים, הקוף ינפיק קריאה startActivity() כדי למקסם הכיסוי של כל הפעילויות בחבילה.
--pct-anyevent <percent> שינוי האחוז של סוגי אירועים אחרים. זהו מצב כולל לכל סוגי האירועים האחרים, כמו לחיצות על מקשים, אירועים אחרים שאינם בשימוש הלחצנים במכשיר וכן הלאה.
מגבלות -p <allowed-package-name> אם תציינו חבילה אחת או יותר באופן הזה, הקוף יוכל רק למערכת כדי לבקר בפעילויות במסגרת החבילות האלה. אם לאפליקציה שלכם נדרשת גישה לפעילויות חבילות אחרות (למשל, כדי לבחור איש קשר) תצטרכו לציין גם את החבילות האלה. אם לא מציינים חבילות, הקוף יאפשר למערכת להפעיל פעילויות בכל החבילות. כדי לציין כמה חבילות, משתמשים באפשרות -p כמה פעמים – אחת -p. אחת לכל חבילה.
-c <main-category> אם תציינו קטגוריה אחת או יותר בצורה הזו, הקוף יאפשר רק כדי לבקר בפעילויות שמפורטות באחת מהקטגוריות שצוינו. אם לא תציינו קטגוריות, הקוף יבחר את הפעילויות שמופיעות בקטגוריה הזו. Intent.CATEGORY_LAUNCHER או Intent.CATEGORY_MONKEY כדי לציין כמה קטגוריות, מקישים על -c מספר פעמים — אפשרות אחת -c לכל קטגוריה.
ניפוי באגים --dbg-no-events אם צוין, הקוף יבצע את ההפעלה הראשונית בפעילות בדיקה, אבל לא תיצור אירועים נוספים. לקבלת התוצאות הטובות ביותר, כדאי לשלב עם הסימן -v, מגבלה אחת או יותר על חבילה וויסות נתונים (throttle) שאינו אפס כדי לשמור על הקוף שפועלות במשך 30 שניות לפחות. כך מקבלים סביבה שבה אפשר לעקוב אחרי החבילה המעברים שהופעלו על ידי האפליקציה.
--hprof אם האפשרות הזו מוגדרת, האפשרות הזו תיצור דוחות פרופיילינג מיד לפני ואחרי הקוף ברצף אירועים. הפעולה הזו תיצור קבצים גדולים (כ-5Mb) בנתונים/בנושאים שונים, לכן חשוב להפעיל שיקול דעת לפניהם. עבור מידע על ניתוח דוחות פרופיילינג, ראה יצירת פרופיל האפליקציה שלך או של ביצועים.
--ignore-crashes בדרך כלל, הקוף ייעצר כשהאפליקציה תקרוס או תתקלקל מכל סוג שהוא חריג שלא מטופל. אם מציינים את האפשרות הזאת, הקוף ימשיך לשלוח אירועים במערכת, עד להשלמת הספירה.
--ignore-timeouts בדרך כלל, הקוף ייעצר כאשר האפליקציה תתרחש שגיאה כלשהי של זמן קצוב לתפוגה, בתור "האפליקציה לא מגיבה" אם מציינים את האפשרות הזו, הקוף ימשיך לשלוח אירועים למערכת עד להשלמת הספירה.
--ignore-security-exceptions בדרך כלל, הקוף ייעצר כאשר האפליקציה תתרחש שגיאת הרשאה כלשהי, לדוגמה, אם הוא מנסה להפעיל פעילות שדורשת הרשאות מסוימות. אם מציינים באפשרות הזאת, הקוף ימשיך לשלוח אירועים למערכת עד שהספירה הושלמו.
--kill-process-after-error בדרך כלל, כשהקוף מפסיק לעבוד עקב שגיאה, האפליקציה שנכשלה ריצה. כשאפשרות זו מוגדרת, היא מתריעה על כך שהמערכת תפסיק את התהליך שבו השגיאה אירעה שגיאה. חשוב לשים לב שסיום רגיל (מוצלח), תהליכי ההשקה לא נעשים. המכשיר פשוט נשאר במצב האחרון אחרי האירוע הסופי.
--monitor-native-crashes מעקב אחר קריסות המתרחשות בקוד המקורי של מערכת Android, ודיווח עליהן. אם מוגדר --kill-process-after-error, המערכת תפסיק לפעול.
--wait-dbg מונע את ההרצה של הקוף עד שכלי לניפוי באגים מצורף אליו.