Lesen Sie zuerst den Artikel App testen auf developer.android.com. Beachten Sie, dass es einige Unterschiede bei der Verwendung von Instrumentierungstests bei Plattformtests gibt.
Zusammenfassend lässt sich sagen, dass ein Instrumentierungstest eine spezielle Testausführung
wie über den Befehl am instrument
gestartet, wobei die Zielumgebung
wird der Anwendungsprozess neu gestartet und
mit dem grundlegenden Anwendungskontext initialisiert.
In der VM des Anwendungsprozesses wird
ein Instrumentierungs-Thread gestartet. Der Testcode wird in diesem Instrumentierungs-Thread ausgeführt und erhält eine Instrumentation
-Instanz, die Zugriff auf den Anwendungskontext und APIs zur Manipulation des zu testenden Anwendungsprozesses bietet.
Schlüsselkonzepte
- In einem Anwendungspaket muss eine Instrumentierung mit einem
<instrumentation>
Tag, das unter dem<manifest>
-Tag des Manifests des Anwendungspakets verschachtelt ist. - kann das Manifest eines Anwendungspakets technisch gesehen mehrere
<instrumentation>
-Tags, auch wenn diese im Allgemeinen nicht auf diese Weise verwendet werden. - Jede
<instrumentation>
muss Folgendes enthalten:android:name
-Attribut: Dies sollte der Name einer abgeleiteten Klasse vonInstrumentation
die in der Testanwendung enthalten ist. Runner, der verwendet wird. Beispiel:android.support.test.runner.AndroidJUnitRunner
- muss ein
android:targetPackage
-Attribut definiert werden. Sein Wert sollte auf das zu testende Anwendungspaket festgelegt.
Zusammenfassung der Schritte
Im Folgenden sind gängige Ziele für hermetische Tests für Framework-Dienste aufgeführt:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
Wenn Sie ein brandneues Instrumentierungsmodul für Ihre Komponente hinzufügen, lesen Sie
Halten Sie sich an die bestehende Konvention, wenn Sie einem der oben. Wenn Sie ein neues Testmodul einrichten, folgen Sie der Einrichtung von
AndroidManifest.xml
undAndroid.mk
an einem der Standorte überWeitere Informationen finden Sie unter frameworks/base/core/tests/coretests/ finden Sie ein Beispiel. 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, den Test als
@SmallTest
,@MediumTest
oder@LargeTest
Erstellen Sie das Testmodul mit „m“, z. B.:
m FrameworksCoreTests
Führen Sie die Tests aus:
Die einfachste Lösung ist die Verwendung Testen:
atest FrameworksCoreTests
Für komplexere Tests verwenden Sie Trade Federation-Test-Harness:
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-Datei:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
Führen Sie die Tests mit verschiedenen Optionen aus:
alle Tests in der APK-Datei
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 einer bestimmten Klasse
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
mit einer bestimmten Testmethode
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
Ihr Test kann mithilfe von JUnit
APIs eine explizite Assertion erstellen, wenn die Prüfung bestanden wurde oder nicht. in
Außerdem führen alle nicht abgefangenen Ausnahmen ebenfalls zu einem Funktionsfehler.
Zur Ausgabe von Leistungsmesswerten kann Ihr Testcode Folgendes aufrufen:
Instrumentation#sendStatus
um eine Liste von
Schlüssel/Wert-Paaren zu versenden. Beachten Sie dabei Folgendes:
- Metriken können eine Ganzzahl oder eine Gleitkommazahl sein
- werden alle nicht numerischen Werte verworfen,
- Ihre Test-APK kann entweder Funktionstests oder Messwerttests enthalten. Eine Kombination aus beiden wird derzeit nicht unterstützt.