Commencez par lire Tester votre application sur developer.android.com. Notez qu'il existe des différences dans la façon dont les tests d'instrumentation sont utilisés dans les tests de plate-forme.
En résumé, un test d'instrumentation fournit un environnement d'exécution de test spécial lancé via la commande am instrument, dans lequel le processus d'application cible est redémarré et initialisé avec un contexte d'application de base, et un thread d'instrumentation est démarré dans la VM du processus d'application. Votre code de test commence à s'exécuter sur ce thread d'instrumentation et reçoit une instance Instrumentation qui fournit un accès au contexte de l'application et aux API pour manipuler le processus d'application en cours de test.
Concepts clés
- Une instrumentation doit être déclarée dans un package d'application, avec une
<instrumentation>balise imbriquée sous la<manifest>balise du fichier manifeste du package d'application. - Techniquement, le fichier manifeste d'un package d'application peut contenir plusieurs
<instrumentation>balises, bien que cela ne soit pas courant. - Chaque
<instrumentation>doit contenir les éléments suivants :- Un attribut
android:name: il doit s'agir du nom d'une sous-classe deInstrumentationincluse dans l'application de test, qui est généralement le lanceur de test utilisé, par exemple :android.support.test.runner.AndroidJUnitRunner - Un attribut
android:targetPackagedoit être défini. Sa valeur doit être définie sur le package d'application en cours de test.
- Un attribut
Résumé des étapes
Vous trouverez ci-dessous les destinations courantes pour les tests hermétiques par rapport aux services de framework :
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestestsSi vous ajoutez un tout nouveau module d'instrumentation pour votre composant, consultez
Suivez la convention existante si vous ajoutez des tests à l'un des emplacements ci-dessus. Si vous configurez un nouveau module de test, veuillez suivre la configuration de
AndroidManifest.xmletAndroid.mkdans l'un des emplacements ci-dessus.Pour obtenir un exemple, consultez frameworks/base/core/tests/coretests/. Notez que ces lignes installent des applications supplémentaires :
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />N'oubliez pas de marquer votre test comme
@SmallTest,@MediumTestou@LargeTest.Créez le module de test avec m, par exemple :
m FrameworksCoreTestsExécutez les tests :
La solution la plus simple consiste à utiliser Atest comme suit :
atest FrameworksCoreTestsPour les tests plus complexes, utilisez le harnais de test Trade Federation :
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTestsSi vous n'utilisez pas Tradefed, installez et exécutez manuellement les tests :
- Installez l'APK généré :
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apkExécutez les tests avec différentes options :
Tous les tests de l'APK
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnerTous les tests d'un package Java spécifique
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnerTous les tests d'une classe spécifique
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnerUne méthode de test spécifique
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
Votre test peut effectuer une assertion explicite sur la réussite ou l'échec à l'aide des API JUnit. De plus, toutes les exceptions non interceptées entraîneront également un échec fonctionnel.
Pour émettre des métriques de performances, votre code de test peut appeler
Instrumentation#sendStatus
afin d'envoyer une liste de paires clé-valeur. Il est important de noter les points suivants :
- Les métriques peuvent être des entiers ou des nombres à virgule flottante.
- Toutes les valeurs non numériques seront ignorées.
- Votre APK de test peut être un test fonctionnel ou un test de métriques. Toutefois, la combinaison des deux n'est pas actuellement prise en charge.