קודם כול, כדאי לקרוא את המאמר בדיקת האפליקציה באתרdeveloper.android.com. כדאי לשים לב שיש כמה הבדלים האופן שבו משתמשים בבדיקות אינסטרומנטציה בבדיקות פלטפורמה.
לסיכום, בדיקת מכשור מספקת סביבה מיוחדת לביצוע בדיקות, שמופעל באמצעות הפקודה am instrument
. בתהליך הזה, תהליך האפליקציה המטורגט מופעל מחדש ומאותחם עם הקשר בסיסי של האפליקציה, וחווט מכשור מופעל בתוך המכונה הווירטואלית של תהליך האפליקציה. שלך
קוד הבדיקה מתחיל בביצוע בשרשור האינסטרומנטציה הזה ומסופק עם
מכונה של Instrumentation
שמספקת גישה להקשר של האפליקציה
וממשקי API כדי לתמרן את תהליך הבדיקה של האפליקציה.
מושגים מרכזיים
- יש להצהיר על אינסטרומנטציה בחבילה של אפליקציה, עם
<instrumentation>
התג מקונן בתג<manifest>
של המניפסט של חבילת האפליקציה. - מניפסט של חבילה של אפליקציה עשוי להכיל מבחינה טכנית
<instrumentation>
, אבל בדרך כלל לא משתמשים בהם בדרך הזו. - כל
<instrumentation>
חייב להכיל:- מאפיין
android:name
: הוא צריך להיות השם של קטגוריית משנה שלInstrumentation
שכלול באפליקציית הבדיקה, שהיא בדרך כלל בשימוש, למשל:android.support.test.runner.AndroidJUnitRunner
- חובה להגדיר מאפיין
android:targetPackage
. הערך שלו צריך להיות צריך להיות מוגדר לחבילת האפליקציה בבדיקה.
- מאפיין
סיכום השלבים
בהמשך מפורטים יעדים נפוצים לבדיקות הרמטיות של שירותי framework:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
אם מוסיפים מודול מדידה חדש לרכיב:
לפעול לפי המוסכמה הקיימת, אם אתם מוסיפים בדיקות לאחת מהאפשרויות מיקומים למעלה. אם מגדירים מודול בדיקה חדש, צריך לפעול לפי השלבים הבאים: הגדרה של
AndroidManifest.xml
ושלAndroid.mk
באחד מהמיקומים מעלצפייה frameworks/base/core/tests/coretests/ כדוגמה. לתשומת ליבכם: השורות הבאות מתקינים אפליקציות נוספות:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
אל תשכחו לסמן את הבדיקה בתור
@SmallTest
,@MediumTest
או@LargeTest
יוצרים את מודול הבדיקה באמצעות m, למשל:
m FrameworksCoreTests
מריצים את הבדיקות:
הפתרון הפשוט ביותר הוא להשתמש ב-Atest באופן הבא:
atest FrameworksCoreTests
לבדיקה מורכבת יותר, אפשר להשתמש בערכת הבדיקה של Trade Federation:
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
אם אתם לא משתמשים ב-Tradefed, עליכם להתקין את הבדיקות ולהריץ אותן באופן ידני:
- מתקינים את ה-APK שנוצר:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
מריצים את הבדיקות עם אפשרויות שונות:
כל הבדיקות ב-APK
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
כל הבדיקות בחבילת Java ספציפית
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
כל המבחנים בכיתה מסוימת
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
שיטת בדיקה ספציפית
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
כדי לשלוח רשימה של צמדי מפתח/ערך. חשוב לציין את הנקודות הבאות:
- המדדים יכולים להיות מספר שלם או נקודה צפה (floating-point)
- ערכים לא מספריים יידחו
- קובץ ה-APK לבדיקה יכול להיות בדיקות פונקציונליות או בדיקות מדדים, בשלב זה אין תמיכה בשילוב של שניהם