Tests d'instrumentation

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, où 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 son exécution sur ce thread d'instrumentation et reçoit une instance Instrumentation qui permet d'accéder au contexte de l'application et aux API pour manipuler le processus de l'application testée.

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 fichier manifeste du package d'application.
  • Techniquement, le fichier manifeste d'un package d'application peut contenir plusieurs balises <instrumentation>, mais cette utilisation est rare.
  • Chaque <instrumentation> doit contenir les éléments suivants :
    • un attribut android:name : il doit s'agir du nom d'une sous-classe de Instrumentation incluse 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:targetPackage doit être défini. Sa valeur doit être définie sur le package d'application en cours de test.

Résumé des étapes

  1. Vous trouverez ci-dessous les destinations courantes des tests hermétiques par rapport aux services du framework :

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    Si vous ajoutez un tout nouveau module d'instrumentation pour votre composant, consultez

  2. 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 et Android.mk dans l'un des emplacements ci-dessus.

  3. 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" />
    
  4. N'oubliez pas de marquer votre test comme @SmallTest, @MediumTest ou @LargeTest.

  5. Créez le module de test avec m, par exemple :

    m FrameworksCoreTests
    
  6. Exécutez les tests :

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. Si vous n'utilisez pas Tradefed, installez et exécutez manuellement les tests :

    1. Installez l'APK généré :
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    
    1. Exécutez les tests avec différentes options :

      1. tous les tests de l'APK.

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. tous 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.AndroidJUnitRunner
        
      3. tous 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.AndroidJUnitRunner
        
      4. 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 effectuer une assertion explicite sur la réussite ou l'échec à l'aide des API JUnit. De plus, toute exception non détectée entraînera également un échec fonctionnel.

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 les points suivants :

  1. Les métriques peuvent être des nombres entiers ou à virgule flottante.
  2. Toutes les valeurs non numériques seront supprimées.
  3. Votre fichier APK de test peut contenir des tests fonctionnels ou des tests de métriques. Toutefois, il n'est pas possible de combiner les deux pour le moment.