Lisez d’abord Testez votre application sur Developer.android.com. Notez qu'il existe certaines différences dans la manière dont les tests d'instrumentation sont utilisés dans les tests de plateforme.
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 ciblé est redémarré et initialisé avec le contexte d'application de base, et un thread d'instrumentation est démarré dans la VM du processus d'application. Votre code de test démarre l'exécution sur ce thread d'instrumentation et est fourni avec une instance Instrumentation
qui donne accès au contexte de l'application et aux API pour manipuler le processus d'application testé.
Concepts clés
- une instrumentation doit être déclarée dans un package d'application, avec une balise
<instrumentation>
imbriquée sous la balise<manifest>
du manifeste du package d'application. - un manifeste de package d'application peut techniquement contenir plusieurs balises
<instrumentation>
, bien qu'il ne soit pas couramment utilisé de cette manière. - chaque
<instrumentation>
doit contenir :- un attribut
android:name
: il doit s'agir du nom d'une sous-classe d'Instrumentation
incluse dans l'application de test, qui est généralement le programme d'exécution de test utilisé, par exemple :android.support.test.runner.AndroidJUnitRunner
- un attribut
android:targetPackage
doit être défini. Sa valeur doit être définie sur le package d'application testé.
- un attribut
Résumé des étapes
Vous trouverez ci-dessous les destinations courantes pour les tests hermétiques sur les services framework :
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
Si vous ajoutez un tout nouveau module d'instrumentation pour votre composant, voir
Suivez la convention existante si vous ajoutez des tests dans l'un des emplacements ci-dessus. Si vous configurez un nouveau module de test, veuillez suivre la configuration de
AndroidManifest.xml
etAndroid.mk
dans l'un des emplacements ci-dessus.Voir frameworks/base/core/tests/coretests/ pour un exemple. 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
,@MediumTest
ou@LargeTest
Construisez le module de test avec m, par exemple :
m FrameworksCoreTests
Exécutez les tests :
La solution la plus simple est d'utiliser Atest comme ceci :
atest FrameworksCoreTests
Ou pour des tests plus complexes, utilisez le harnais de test de la Fédération du Commerce :
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
Si 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.apk
Exécutez les tests avec différentes options :
tous les tests dans l'apk
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
tous les tests sous un package Java spécifique
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
tous les tests dans une classe spécifique
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
une 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 faire une assertion explicite en cas de réussite ou d'échec à l'aide des API JUnit
; de plus, toute exception non détectée entraînera également une défaillance fonctionnelle.
Pour émettre des métriques de performances, votre code de test peut appeler Instrumentation#sendStatus
pour envoyer une liste de paires clé-valeur. Il est important de noter que :
- les métriques peuvent être entières ou à virgule flottante
- toutes les valeurs non numériques seront ignorées
- votre apk de test peut être soit des tests fonctionnels, soit des tests de métriques, mais le mélange des deux n'est actuellement pas pris en charge