از 27 مارس 2025، توصیه می کنیم از android-latest-release به جای aosp-main برای ساختن و کمک به AOSP استفاده کنید. برای اطلاعات بیشتر، به تغییرات AOSP مراجعه کنید.
با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
ابتدا برنامه خود را در developer.android.com بخوانید. توجه داشته باشید که تفاوت هایی در نحوه استفاده از تست های ابزار دقیق در تست پلت فرم وجود دارد.
به طور خلاصه، یک تست ابزار دقیق، یک محیط اجرای آزمون ویژه را فراهم می کند که از طریق دستور am instrument راه اندازی می شود، جایی که فرآیند برنامه هدفمند مجدداً راه اندازی می شود و با زمینه برنامه اصلی شروع می شود، و یک رشته ابزار دقیق در داخل فرآیند برنامه کاربردی VM شروع می شود. کد آزمایشی شما اجرا را در این رشته ابزار دقیق شروع می کند و با یک نمونه 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
آزمون شما می تواند با استفاده از API های JUnit یک ادعای صریح در مورد قبولی یا عدم موفقیت داشته باشد. علاوه بر این، هر گونه استثناء کشف نشده نیز باعث خرابی عملکردی می شود.
برای انتشار معیارهای عملکرد، کد آزمایشی شما میتواند با Instrumentation#sendStatus تماس بگیرد تا فهرستی از جفتهای کلید-مقدار ارسال شود. توجه به این نکته ضروری است که:
معیارها می توانند عدد صحیح یا ممیز شناور باشند
هر مقدار غیر عددی حذف خواهد شد
apk آزمایشی شما میتواند تستهای عملکردی یا تستهای معیار باشد، اما ترکیب هر دو در حال حاضر پشتیبانی نمیشود
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2025-07-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","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-29 بهوقت ساعت هماهنگ جهانی."],[],[],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"]]