קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
קודם כדאי לקרוא את המאמר בדיקת האפליקציה באתר developer.android.com. חשוב לזכור שיש כמה הבדלים באופן שבו נעשה שימוש בבדיקות של מכשירי המדידה בבדיקת הפלטפורמה.
לסיכום, בדיקת מכשור מספקת סביבה מיוחדת לביצוע בדיקות, שמופעל באמצעות הפקודה am instrument. בתהליך הזה, תהליך האפליקציה המטורגט מופעל מחדש ומאותחל עם הקשר בסיסי של האפליקציה, וחווט מכשור מופעל בתוך המכונה הווירטואלית של תהליך האפליקציה. קוד הבדיקה מתחיל לפעול בשרשור המדידה הזה, ומקבל מופע של Instrumentation שמספק גישה להקשר של האפליקציה ולממשקי ה-API כדי לבצע פעולות על תהליך האפליקציה שנבדק.
מושגים מרכזיים
צריך להצהיר על מכשיר למדידת ביצועים בחבילת אפליקציה, באמצעות תג <instrumentation> שמוקן בתוך התג <manifest> של המניפסט של חבילת האפליקציה.
מבחינה טכנית, מניפסט של חבילת אפליקציה יכול להכיל כמה תגי <instrumentation>, אבל בדרך כלל לא משתמשים בו בצורה הזו.
כל <instrumentation> חייב להכיל:
מאפיין android:name: זה צריך להיות השם של תת-סוג של Instrumentation שמופיע באפליקציית הבדיקה, בדרך כלל הכלי להרצת הבדיקות שבו נעשה שימוש. לדוגמה:
android.support.test.runner.AndroidJUnitRunner
צריך להגדיר מאפיין android:targetPackage. הערך צריך להיות מוגדר לחבילת האפליקציה שנבדקת.
לפי המוסכמה הקיימת, אם מוסיפים בדיקות לאחד מהמיקומים שלמעלה. אם אתם מגדירים מודול בדיקה חדש, עליכם לפעול לפי ההוראות להגדרת AndroidManifest.xml ו-Android.mk באחד מהמיקומים שלמעלה.
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 כדי לשלוח רשימה של צמדי מפתח/ערך. חשוב לציין:
המדדים יכולים להיות מספרים שלמים או מספרים עשרוניים
ערכים לא מספריים יימחקו
קובץ ה-APK לבדיקה יכול לכלול בדיקות פונקציונליות או בדיקות מדדים, אבל כרגע אין תמיכה בשילוב של שתיהן
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-27 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-27 (שעון UTC)."],[],[],null,["# Instrumentation tests\n\nFirst read [Test your app](https://developer.android.com/studio/test/)\non developer.android.com. Take note there are some differences in\nhow instrumentation tests are used in platform testing.\n\nIn summary, an instrumentation test provides a special test execution\nenvironment as launched via the `am instrument` command, where the targeted\napplication process is restarted and initialized with basic application context,\nand an instrumentation thread is started inside the application process VM. Your\ntest code starts execution on this instrumentation thread and is provided with\nan `Instrumentation` instance that provides access to the application context\nand APIs to manipulate the application process under test.\n\nKey concepts\n------------\n\n- an instrumentation must be declared in an application package, with an [`\u003cinstrumentation\u003e`](https://developer.android.com/guide/topics/manifest/instrumentation-element.html) tag nested under the `\u003cmanifest\u003e` tag of the application package manifest.\n- an application package manifest may technically contain multiple `\u003cinstrumentation\u003e` tags, though it's not commonly used in this fashion.\n- each `\u003cinstrumentation\u003e` must contain:\n - an `android:name` attribute: it should be the name of a subclass of [`Instrumentation`](https://developer.android.com/reference/android/app/Instrumentation.html) that's included in the test application, which is typically the test runner that's being used, e.g.: `android.support.test.runner.AndroidJUnitRunner`\n - an `android:targetPackage` attribute must be defined. Its value should be set to the application package under test.\n\nSummary of steps\n----------------\n\n1. Below are common destinations for hermetic tests against framework services:\n\n frameworks/base/core/tests/coretests\n frameworks/base/services/tests/servicestests\n\n If you are adding a brand new instrumentation module for your component, see\n - [Self-Instrumenting Tests: A Complete Example](/docs/core/tests/development/instr-self-e2e)\n - [Instrumentation Targeting an Application: A Complete Example](/docs/core/tests/development/instr-app-e2e)\n2. Following the existing convention if you are adding tests into one of the\n locations above. If you are setting up a new test module, please follow the\n setup of `AndroidManifest.xml` and `Android.mk` in one of the locations\n above\n\n3. See\n [frameworks/base/core/tests/coretests/](https://android.googlesource.com/platform/frameworks/base.git/+/android16-release/core/tests/coretests/)\n for an example.\n Note these lines install extra apps:\n\n \u003coption name=\"test-file-name\" value=\"FrameworksCoreTests.apk\" /\u003e\n \u003coption name=\"test-file-name\" value=\"BstatsTestApp.apk\" /\u003e\n\n4. Do not forget to mark your test as `@SmallTest`, `@MediumTest` or\n `@LargeTest`\n\n5. Build the test module with m, e.g.:\n\n m FrameworksCoreTests\n\n6. Run the tests:\n\n - The simplest solution is to use\n [Atest](/docs/core/tests/development/atest) like so:\n\n atest FrameworksCoreTests\n\n - Or for more complex tests, use the\n [Trade Federation test Harness](/docs/core/tests/tradefed):\n\n m tradefed-all\n tradefed.sh run template/local_min --template:map test=FrameworksCoreTests\n\n7. If not using Tradefed, manually install and run the tests:\n\n 1. Install the generated apk:\n\n adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk\n\n | **Tip:** you use `adb shell pm list instrumentation` to find the instrumentations inside the apk just installed\n 1. Run the tests with various options:\n\n 1. all tests in the apk\n\n adb shell am instrument -w com.android.frameworks.coretests\\\n /android.support.test.runner.AndroidJUnitRunner\n\n 2. all tests under a specific Java package\n\n adb shell am instrument -w -e package android.animation \\\n com.android.frameworks.coretests\\\n /android.support.test.runner.AndroidJUnitRunner\n\n 3. all tests under a specific class\n\n adb shell am instrument -w -e class \\\n android.animation.AnimatorSetEventsTest \\\n com.android.frameworks.coretests\\\n /android.support.test.runner.AndroidJUnitRunner\n\n 4. a specific test method\n\n adb shell am instrument -w -e class \\\n android.animation.AnimatorSetEventsTest#testCancel \\\n com.android.frameworks.coretests\\\n /android.support.test.runner.AndroidJUnitRunner\n\nYour test can make an explicit assertion on pass or fail using `JUnit` APIs; in\naddition, any uncaught exceptions will also cause a functional failure.\n\nTo emit performance metrics, your test code can call\n[`Instrumentation#sendStatus`](http://developer.android.com/reference/android/app/Instrumentation.html#sendStatus(int,%20android.os.Bundle))\nto send out a list of key-value pairs. It's important to note that:\n\n1. metrics can be integer or floating point\n2. any non-numerical values will be discarded\n3. your test apk can be either functional tests or metrics tests, however mixing both are not currently supported"]]