בדיקות אינסטרומנטציה

קודם כול, כדאי לקרוא את המאמר בדיקת האפליקציה באתרdeveloper.android.com. כדאי לשים לב שיש כמה הבדלים האופן שבו משתמשים בבדיקות אינסטרומנטציה בבדיקות פלטפורמה.

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

מושגים מרכזיים

  • יש להצהיר על אינסטרומנטציה בחבילה של אפליקציה, עם <instrumentation> התג מקונן בתג <manifest> של המניפסט של חבילת האפליקציה.
  • מניפסט של חבילה של אפליקציה עשוי להכיל מבחינה טכנית <instrumentation>, אבל בדרך כלל לא משתמשים בהם בדרך הזו.
  • כל <instrumentation> חייב להכיל:
    • מאפיין android:name: הוא צריך להיות השם של קטגוריית משנה של Instrumentation שכלול באפליקציית הבדיקה, שהיא בדרך כלל בשימוש, למשל: android.support.test.runner.AndroidJUnitRunner
    • חובה להגדיר מאפיין android:targetPackage. הערך שלו צריך להיות צריך להיות מוגדר לחבילת האפליקציה בבדיקה.

סיכום השלבים

  1. בהמשך מפורטים יעדים נפוצים לבדיקות הרמטיות של שירותי framework:

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    אם מוסיפים מודול מדידה חדש לרכיב:

  2. לפעול לפי המוסכמה הקיימת, אם אתם מוסיפים בדיקות לאחת מהאפשרויות מיקומים למעלה. אם מגדירים מודול בדיקה חדש, צריך לפעול לפי השלבים הבאים: הגדרה של AndroidManifest.xml ושל Android.mk באחד מהמיקומים מעל

  3. צפייה frameworks/base/core/tests/coretests/ כדוגמה. לתשומת ליבכם: השורות הבאות מתקינים אפליקציות נוספות:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. אל תשכחו לסמן את הבדיקה בתור @SmallTest, @MediumTest או @LargeTest

  5. יוצרים את מודול הבדיקה באמצעות m, למשל:

    m FrameworksCoreTests
    
  6. מריצים את הבדיקות:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. אם אתם לא משתמשים ב-Tradefed, עליכם להתקין את הבדיקות ולהריץ אותן באופן ידני:

    1. מתקינים את ה-APK שנוצר:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    
    1. מריצים את הבדיקות עם אפשרויות שונות:

      1. כל הבדיקות ב-APK

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. כל הבדיקות בחבילת Java ספציפית

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. כל המבחנים בכיתה מסוימת

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. שיטת בדיקה ספציפית

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest#testCancel \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        

הבדיקה יכולה לבצע טענת נכוֹנוּת (assertion) מפורשת על הצלחה או כשל באמצעות ממשקי ה-API של JUnit. בנוסף, כל חריגה שלא תתפס תגרום גם לכישלון פונקציונלי.

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

  1. המדדים יכולים להיות מספר שלם או נקודה צפה (floating-point)
  2. ערכים לא מספריים יידחו
  3. קובץ ה-APK לבדיקה יכול להיות בדיקות פונקציונליות או בדיקות מדדים, בשלב זה אין תמיכה בשילוב של שניהם