Essais d'instrumentation

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 plate-forme.

En résumé, un test d'instrumentation fournit un environnement d'exécution de test spécial tel que lancé via la commande am instrument , où 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é à l'intérieur de la machine virtuelle du processus d'application. Votre code de test démarre l'exécution sur ce thread d'instrumentation et est fourni avec une instance d' 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 <instrumentation> imbriquée sous la <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 l'exécuteur 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é.

Résumé des étapes

  1. Vous trouverez ci-dessous des destinations courantes pour les tests hermétiques par rapport aux services d'infrastructure :

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

  5. Construisez 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
    

    Astuce : vous utilisez adb shell pm list instrumentation pour trouver les instrumentations à l'intérieur de l'apk qui vient d'être installé

    1. Exécutez les tests avec différentes options :

      1. tous les tests dans l'apk

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. 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
        
      3. 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
        
      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 faire une assertion explicite sur la réussite ou l'échec à l'aide des API JUnit ; en outre, 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 :

  1. les métriques peuvent être des entiers ou des virgules flottantes
  2. toutes les valeurs non numériques seront ignorées
  3. 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