Lesen Sie zuerst den Artikel App testen auf developer.android.com. Beachten Sie, dass sich die Verwendung von Instrumentierungstests beim Plattformtesten unterscheidet.
Zusammenfassend lässt sich sagen, dass ein Instrumentierungstest eine spezielle Testausführungsumgebung bietet, die über den Befehl am instrument gestartet wird. Dabei wird der Zielanwendungsprozess neu gestartet und mit dem grundlegenden Anwendungskontext initialisiert. Außerdem wird in der VM des Anwendungsprozesses ein Instrumentierungsthread gestartet. Ihr Testcode wird in diesem Instrumentation-Thread ausgeführt und erhält eine Instrumentation-Instanz, die Zugriff auf den Anwendungskontext und APIs zum Bearbeiten des zu testenden Anwendungsprozesses bietet.
Schlüsselkonzepte
- Eine Instrumentation muss in einem Anwendungspaket mit einem <instrumentation>-Tag deklariert werden, das im<manifest>-Tag des Anwendungspaketmanifests verschachtelt ist.
- Das Manifest eines Anwendungspakets kann technisch gesehen mehrere <instrumentation>-Tags enthalten, was aber nicht üblich ist.
- Jeder <instrumentation>muss Folgendes enthalten:- ein android:name-Attribut: Es sollte der Name einer Unterklasse vonInstrumentationsein, die in der Testanwendung enthalten ist. Das ist in der Regel der verwendete Test-Runner, z. B.:android.support.test.runner.AndroidJUnitRunner
- Ein android:targetPackage-Attribut muss definiert sein. Der Wert sollte auf das zu testende Anwendungspaket festgelegt werden.
 
- ein 
Zusammenfassung der Schritte
- Im Folgenden finden Sie häufige Ziele für hermetische Tests für Framework-Dienste: - frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests- Wenn Sie ein neues Instrumentierungsmodul für Ihre Komponente hinzufügen, lesen Sie 
- Halten Sie sich an die bestehende Konvention, wenn Sie Tests an einem der oben genannten Speicherorte hinzufügen. Wenn Sie ein neues Testmodul einrichten, folgen Sie der Einrichtung von - AndroidManifest.xmlund- Android.mkan einem der oben genannten Orte.
- Ein Beispiel finden Sie unter frameworks/base/core/tests/coretests/. Mit diesen Zeilen werden zusätzliche Apps installiert: - <option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
- Vergessen Sie nicht, Ihren Test als - @SmallTest,- @MediumTestoder- @LargeTestzu markieren.
- Erstellen Sie das Testmodul mit „m“, z.B.: - m FrameworksCoreTests
- Führen Sie die Tests aus: - Die einfachste Lösung ist die Verwendung von Atest: - atest FrameworksCoreTests
- Für komplexere Tests können Sie auch das Trade Federation-Test-Harness verwenden: 
 - m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
- Wenn Sie Tradefed nicht verwenden, installieren und führen Sie die Tests manuell aus: - Installieren Sie die generierte APK:
 - adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk- Führen Sie die Tests mit verschiedenen Optionen aus: - Alle Tests im APK - adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
- Alle Tests in einem bestimmten Java-Paket - adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
- Alle Tests in einer bestimmten Klasse - adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
- eine bestimmte Testmethode - adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
 
 
In Ihrem Test können Sie mit JUnit-APIs explizit angeben, ob der Test bestanden oder fehlgeschlagen ist. Außerdem führen alle nicht abgefangenen Ausnahmen zu einem funktionalen Fehler.
Um Leistungsmesswerte auszugeben, kann Ihr Testcode Instrumentation#sendStatus aufrufen, um eine Liste von Schlüssel/Wert-Paaren zu senden. Wichtig:
- Messwerte können Ganzzahlen oder Gleitkommazahlen sein.
- Alle nicht numerischen Werte werden verworfen.
- Ihr Test-APK kann entweder Funktionstests oder Messwerttests enthalten. Das Mischen beider Arten wird derzeit nicht unterstützt.
