הגדרת בדיקות ACTS

בדף הזה מוסבר איך להגדיר בדיקות ACTS.

מקורות ההגדרות

ל-Android Comms Test Suite‏ (ACTS) יש שלושה מקורות עיקריים להגדרות:

  • ממשק שורת הפקודה (CLI)
  • קובץ התצורה ACTS
  • משתני סביבה

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

הערה לגבי משתני סביבה

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

משתני תצורה נדרשים

בכל בדיקת ACTS צריך להגדיר את המשתנים הבאים.

נתיבי בדיקות של ACTS

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

מגדירים את המיקום של נתיב הבדיקה באמצעות משתנה הסביבה ACTS_TESTPATH או באמצעות הדגל -tp/--testpaths בשורת הפקודה. הערך יכול להיות רשימת ספריות.

כיתות בדיקה של ACTS

ACTS צריכים לדעת אילו כיתות בדיקה צריך להריץ. זה יכול להיות ביטוי רגולרי או רשימה של שמות של כיתות בדיקה.

כדי להגדיר את הערך הזה, משתמשים בדגל -tc/--test_class בשורת הפקודה. חשוב לזכור שאפשר להעביר בדגל הזה גם רשימה של שמות כיתות. שמות הכיתות חייבים להיות זהים לשמות הקבצים המתאימים, לדוגמה, SampleTest חייב להופיע ב-SampleTest.py.

הנתיב של יומן ACTS

ל-ACTS צריך להיות מיקום לכתיבה ביומני מערכת, מלבד STDOUT. ACTS כותב יומני ניפוי באגים מלאים שמכילים נתונים שיכולים לעזור לקבוע למה חלק מהבדיקות נכשלות. כדי למנוע עומס, המערכת של ACTS לא כותבת את היומנים האלה ב-STDOUT.

כדי להגדיר את נתיב היומן, משתמשים במשתנה הסביבה ACTS_LOGPATH או בדגל -lp/--logpath בשורת הפקודה.

נתיב ההגדרה של ACTS

כדי להריץ את הבדיקה, ל-ACTS צריך להיות ידוע איזה מצע בדיקה קיים. ההגדרה של ACTS מכילה את כל המכשירים בקבוצת הבדיקה, ואת כל הפרמטרים המיוחדים של בדיקה או סביבה שייתכן שיהיה צורך בהם. מגדירים את הערך הזה בשורת הפקודה באמצעות -c/--config.

אם יש כמה מיטות בדיקה בתצורה, ACTS מפעיל את הבדיקות לכל מיטת בדיקה. כדי להריץ את הבדיקה רק בסביבת בדיקה אחת ברשימה, משתמשים בארגומנט של שורת הפקודה -tb/--testbed <NAME>.

דוגמה למכונת עבודה מקומית

רוב המשתמשים ב-ACTS מפתחים בהסתעפות אחת של מאגר Android, וההגדרה שלהם דומה להגדרה הזו:

# in ~/.bashrc
ACTS_LOGPATH='/tmp/acts_logpath'
ACTS_TESTPATH='~/android/<REPO_BRANCH>/tools/test/connectivity/acts_tests/'

# On cmdline
$ act.py -c ~/acts_configs/local_config.json -tc SampleTest -tb marlin

אם משתמשי ACTS מריצים כמה הסתעפויות, לרוב הם מריצים ACTS מהספרייה acts/framework ומשתמשים בנתיב יחסי בשביל ACTS_TESTPATH:

# in ~/.bashrc
ACTS_LOGPATH='/tmp/acts_logpath'
ACTS_TESTPATH='../acts_tests/'

# On cmdline
$ cd ~/android/main/tools/test/connectivity/acts_tests/acts_contrib/
$ act.py -c ~/acts_configs/local_config.json -tc SampleTest -tb marlin

הגדרת מיטות הבדיקה

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

{
  "testbed": {
    "my_testbed": {
      "my_testbed_value": "value"
    },
    "another_testbed": {
      "AndroidDevice": [
        "53R147"
      ]
    }
  },
  "user_parameter_1": "special environment value",
  "user_parameter_2": "other special value"
}

היחידה הבסיסית של ההגדרה הזו היא 'הבדיקה'. בתצורה לדוגמה שלמעלה, משטח הבדיקה my_testbed נוצר עם ערך יחיד של משטח הבדיקה. במאגר הניסויים השני, another_testbed, יש הגדרת בקר מיוחדת שמכילה את המידע של רשימה של מכשירי Android. המכשירים האלה מאוחסנים ברשימת המכשירים בקטע self.android_devices. חשוב לזכור שאם לא מציינים אובייקט AndroidDevice במסגרת מצע הבדיקה, תתרחש חריגה בכיתה הבדיקה שמצפה לאובייקט AndroidDevice. הרשימה המלאה של הגדרות הבקרה הנתמכות שמגיעות עם ACTS מופיעה ב-/acts/framework/acts/controllers/.

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

מקרים מיוחדים ל-AndroidDevice

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

פורמט תצורה של JSON

כל צמדי המפתח/ערך בדוגמת ה-JSON הבאה מוגדרים באובייקט AndroidDevice התואם. אם ההגדרה מנסה להחליף פרמטר שהוגדר במאפיין AndroidDevice, המערכת נזרקת את ControllerError.

  "AndroidDevice": [{"serial": "XXXXXX", "label": "publisher"},
                    {"serial": "YYYYYY", "label": "subscriber", "user_parameter_1": "anything"}]

לאחר מכן, בסקריפט הבדיקה אפשר להשתמש בפונקציית סינון כדי לאחזר את המכשיר הנכון ולגשת לפרמטרים נוספים מהאובייקט של המכשיר:

  def setup_class(self):
      self.pub = next(filter(lambda ad: ad.label == 'publisher',
                             self.android_devices))
      self.sub = next(filter(lambda ad: ad.label == 'user_parameter_1',
                             self.android_devices))

פרמטר אופציונלי

הפרמטר הבא הוא אופציונלי:

  • adb_logcat_param: מחרוזת שמצורפת לפקודה adb logcat כדי לאסוף יומני adb. כברירת מחדל, המערכת משתמשת ב-adb logcat -v threadtime -b all. אם מגדירים את adb_logcat_param, הקטע -b all מתוכתב מחדש. לדוגמה, הגדרת adb_logcat_param ל--b radio משנה את הפקודה ל-adb logcat -v threadtime -b radio.