Kể từ ngày 27 tháng 3 năm 2025, bạn nên sử dụng android-latest-release thay vì aosp-main để xây dựng và đóng góp cho AOSP. Để biết thêm thông tin, hãy xem phần Thay đổi đối với AOSP.
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Trước tiên, hãy đọc bài viết Kiểm thử ứng dụng trên developer.android.com. Xin lưu ý rằng có một số điểm khác biệt trong cách sử dụng kiểm thử đo lường trong kiểm thử nền tảng.
Tóm lại, kiểm thử đo lường cung cấp một môi trường thực thi kiểm thử đặc biệt được khởi chạy thông qua lệnh am instrument, trong đó quy trình ứng dụng được nhắm mục tiêu sẽ được khởi động lại và khởi chạy bằng ngữ cảnh ứng dụng cơ bản, đồng thời một luồng đo lường sẽ được bắt đầu bên trong máy ảo quy trình ứng dụng. Mã kiểm thử của bạn bắt đầu thực thi trên luồng đo lường này và được cung cấp một thực thể Instrumentation cung cấp quyền truy cập vào ngữ cảnh ứng dụng và các API để thao tác với quy trình ứng dụng đang được kiểm thử.
Khái niệm chính
bạn phải khai báo một công cụ đo lường trong gói ứng dụng, với thẻ <instrumentation> lồng trong thẻ <manifest> của tệp kê khai gói ứng dụng.
về mặt kỹ thuật, tệp kê khai gói ứng dụng có thể chứa nhiều thẻ <instrumentation>, mặc dù tệp này thường không được sử dụng theo cách này.
mỗi <instrumentation> phải chứa:
thuộc tính android:name: thuộc tính này phải là tên của một lớp con của Instrumentation có trong ứng dụng kiểm thử, thường là trình chạy kiểm thử đang được sử dụng, ví dụ: android.support.test.runner.AndroidJUnitRunner
phải xác định thuộc tính android:targetPackage. Bạn nên đặt giá trị của thuộc tính này thành gói ứng dụng đang được kiểm thử.
Tóm tắt các bước
Dưới đây là các đích đến phổ biến cho kiểm thử kín đối với các dịch vụ khung:
Làm theo quy ước hiện có nếu bạn thêm chương trình kiểm thử vào một trong các vị trí trên. Nếu bạn đang thiết lập một mô-đun kiểm thử mới, vui lòng làm theo hướng dẫn thiết lập AndroidManifest.xml và Android.mk ở một trong các vị trí ở trên
adb shell am instrument -w -e class \
android.animation.AnimatorSetEventsTest \
com.android.frameworks.coretests\
/android.support.test.runner.AndroidJUnitRunner
một phương thức kiểm thử cụ thể
adb shell am instrument -w -e class \
android.animation.AnimatorSetEventsTest#testCancel \
com.android.frameworks.coretests\
/android.support.test.runner.AndroidJUnitRunner
Kiểm thử của bạn có thể đưa ra xác nhận rõ ràng về việc đạt hay không đạt bằng cách sử dụng các API JUnit; ngoài ra, mọi ngoại lệ không được phát hiện cũng sẽ gây ra lỗi chức năng.
Để phát các chỉ số hiệu suất, mã kiểm thử của bạn có thể gọi Instrumentation#sendStatus để gửi danh sách các cặp khoá-giá trị. Bạn cần lưu ý rằng:
chỉ số có thể là số nguyên hoặc dấu phẩy động
mọi giá trị không phải số sẽ bị loại bỏ
tệp APK kiểm thử của bạn có thể là kiểm thử chức năng hoặc kiểm thử chỉ số, tuy nhiên, việc kết hợp cả hai hiện không được hỗ trợ
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 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"]]