Od 27 marca 2025 r. zalecamy używanie android-latest-release zamiast aosp-main do kompilowania i wspołtworzenia AOSP. Więcej informacji znajdziesz w artykule o zmianach w AOSP.
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Najpierw przeczytaj artykuł Testowanie aplikacji na stronie developer.android.com. Pamiętaj, że testy narzędzia do testowania są używane w testach platformy w trochę inny sposób.
Podsumowując, testowanie pomiarów zapewnia specjalne środowisko testowe uruchamiane za pomocą polecenia am instrument, w którym docelowy proces aplikacji jest ponownie uruchamiany i inicjowany z podstawowym kontekstem aplikacji, a wątek pomiarów jest uruchamiany w ramach maszyny wirtualnej procesu aplikacji. Twój kod testowy rozpoczyna wykonywanie na tym wątku pomiarowym i jest przekazywany do instancji Instrumentation, która zapewnia dostęp do kontekstu aplikacji i interfejsów API umożliwiających manipulowanie procesem aplikacji poddawanym testom.
Kluczowych pojęć
instrumentacja musi być zadeklarowana w pakiecie aplikacji za pomocą tagu <instrumentation> zagnieżdżonego pod tagiem <manifest> w pliku manifestu pakietu aplikacji.
technicznie plik manifestu pakietu aplikacji może zawierać wiele tagów <instrumentation>, ale nie jest to powszechna praktyka.
Każdy element <instrumentation> musi zawierać:
atrybut android:name: powinien on zawierać nazwę podklasy Instrumentation, która jest uwzględniona w aplikacji testowej, czyli zwykle jest to używany test runner, np.:android.support.test.runner.AndroidJUnitRunner
Musisz zdefiniować atrybut android:targetPackage. Jego wartość powinna być ustawiona na testowany pakiet aplikacji.
Podsumowanie kroków
Poniżej znajdziesz typowe miejsca docelowe testów hermetycznych w przypadku usług frameworka:
Jeśli dodajesz testy w jednym z wymienionych powyżej miejsc, postępuj zgodnie z dotychczasową konwencją. Jeśli konfigurujesz nowy moduł testowy, wykonaj czynności związane z konfiguracją AndroidManifest.xml i Android.mk w jednym z tych miejsc:
adb shell am instrument -w -e class \
android.animation.AnimatorSetEventsTest \
com.android.frameworks.coretests\
/android.support.test.runner.AndroidJUnitRunner
konkretnej metody testowania,
adb shell am instrument -w -e class \
android.animation.AnimatorSetEventsTest#testCancel \
com.android.frameworks.coretests\
/android.support.test.runner.AndroidJUnitRunner
Test może wyraźnie stwierdzić, czy test się udał, czy nie, korzystając z interfejsów API JUnit. Nieprzechwycone wyjątki również spowodują błąd funkcjonalny.
Aby emitować dane o skuteczności, kod testowy może wywołać funkcję Instrumentation#sendStatus, aby wysłać listę par klucz-wartość. Pamiętaj, że:
dane mogą być liczbą całkowitą lub zmiennoprzecinkową
wartości niearytmetyczne zostaną odrzucone;
Plik APK testowy może zawierać testy funkcjonalne lub testy danych, ale łączenie obu nie jest obecnie obsługiwane.
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-07-27 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 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"]]