Essais d'instrumentation

Mais lisez d' abord Testez votre application sur developer.android.com. Notez qu'il existe certaines 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é par l' am instrument commande, où le processus d'application ciblée est redémarré et initialisé avec le contexte de l' application de base, et un fil d'instrumentation est démarré à l' intérieur du processus d'application VM. Votre code de test démarre l' exécution sur ce fil d'instrumentation et est muni d'une Instrumentation instance qui permet d' accéder au contexte d'application et des API pour manipuler le processus d'application en cours de test.

Concepts clés

  • une instrumentation doit être déclarée dans une trousse de demande, avec une <instrumentation> balise imbriquée sous la <manifest> balise du package d'application manifeste.
  • un manifeste de package d'application peut contenir plusieurs techniques <instrumentation> balises, mais il est peu utilisé de cette façon.
  • chaque <instrumentation> doit contenir:
    • un android:name attribut: il doit être le nom d'une sous - classe de Instrumentation qui est inclus dans l'application de test, ce qui est généralement le coureur de test qui est utilisé, par exemple: android.support.test.runner.AndroidJUnitRunner
    • un android:targetPackage attribut 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-cadres :

    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, s'il vous plaît suivre la configuration de AndroidManifest.xml et Android.mk dans l' un des emplacements ci - dessus

  3. Voir les cadres / 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. Ne pas oublier de marquer votre test @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 du apk 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 affirmation explicite réussite ou d' échec en utilisant JUnit API; en outre, toute exception non détectée entraînera également une défaillance fonctionnelle.

Pour émettre des indicateurs de performance, votre code de test peut appeler Instrumentation#sendStatus pour envoyer une liste de paires valeur clé. Il est important de noter que :

  1. les métriques peuvent être des nombres entiers ou à virgule flottante
  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