Lesen Sie zuerst Testen Sie Ihre App auf developer.android.com. Beachten Sie, dass es einige Unterschiede bei der Verwendung von Instrumentierungstests bei Plattformtests gibt.
Zusammenfassend stellt ein Instrumentierungstest eine spezielle Testausführungsumgebung bereit, wie sie über den Befehl am instrument
gestartet wird, wo der Zielanwendungsprozess neu gestartet und mit grundlegendem Anwendungskontext initialisiert wird und ein Instrumentierungsthread innerhalb der Anwendungsprozess-VM gestartet wird. Ihr Testcode beginnt mit der Ausführung in diesem Instrumentierungsthread und wird mit einer Instrumentation
bereitgestellt, die Zugriff auf den Anwendungskontext und die APIs bietet, um den zu testenden Anwendungsprozess zu manipulieren.
Schlüssel Konzepte
- Eine Instrumentierung muss in einem Anwendungspaket deklariert werden, wobei ein
<instrumentation>
-Tag unter dem<manifest>
-Tag des Anwendungspaketmanifests verschachtelt ist. - Ein Anwendungspaketmanifest kann technisch gesehen mehrere
<instrumentation>
-Tags enthalten, obwohl es normalerweise nicht auf diese Weise verwendet wird. - jede
<instrumentation>
muss enthalten:- ein
android:name
-Attribut: Es sollte der Name einer Unterklasse vonInstrumentation
sein, die in der Testanwendung enthalten ist, was normalerweise der verwendete Test Runner ist, z. B.:android.support.test.runner.AndroidJUnitRunner
- ein
android:targetPackage
Attribut muss definiert werden. Sein Wert sollte auf das zu testende Anwendungspaket festgelegt werden.
- ein
Zusammenfassung der Schritte
Unten sind gängige Ziele für hermetische Tests gegen 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, siehe
Befolgen Sie die bestehende Konvention, wenn Sie Tests an einem der oben genannten Speicherorte hinzufügen. Wenn Sie ein neues Testmodul einrichten, folgen Sie bitte der Einrichtung von
AndroidManifest.xml
undAndroid.mk
an einem der oben genannten OrteEin Beispiel finden Sie unter frameworks/base/core/tests/coretests/ . Beachten Sie, dass diese Zeilen zusätzliche Apps installieren:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
Vergessen Sie nicht, Ihren Test als
@SmallTest
,@MediumTest
oder@LargeTest
zu markierenBauen Sie das Testmodul mit m, zB:
m FrameworksCoreTests
Führen Sie die Tests durch:
Die einfachste Lösung besteht darin, Atest wie folgt zu verwenden:
atest FrameworksCoreTests
Oder verwenden Sie für komplexere Tests das Testgeschirr der Handelsföderation :
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Wenn Sie Tradefed nicht verwenden, installieren Sie die Tests manuell und führen Sie sie aus:
- Installieren Sie die generierte APK:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
Führen Sie die Tests mit verschiedenen Optionen durch:
alle Tests in der apk
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
alle Tests unter einem bestimmten Java-Paket
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
alle Tests unter einer bestimmten Klasse
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
ein bestimmtes Prüfverfahren
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 Aussage zum Bestehen oder Nichtbestehen machen; Darüber hinaus verursachen alle nicht abgefangenen Ausnahmen ebenfalls einen Funktionsausfall.
Um Leistungsmetriken auszugeben, kann Ihr Instrumentation#sendStatus
, um eine Liste von Schlüssel-Wert-Paaren zu senden. Es ist wichtig zu beachten, dass:
- Metriken können Ganzzahlen oder Fließkommazahlen sein
- Alle nicht numerischen Werte werden verworfen
- Ihre Test-APK kann entweder ein Funktionstest oder ein Metriktest sein, jedoch wird das Mischen beider derzeit nicht unterstützt