Tests d'instrumentation

Commencez par lire Tester votre application. sur developer.android.com. Notez qu'il existe quelques différences dans comment les tests d'instrumentation sont utilisés dans les tests de plate-forme.

En résumé, un test d'instrumentation fournit une exécution de test spéciale l'environnement d'exécution comme lancé via la commande am instrument, où le processus d'application est redémarré et initialisé avec le contexte de base de l'application, et un thread d'instrumentation est démarré dans la VM du processus d'application. Votre le code de test lance 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 les API pour manipuler le processus d'application testé.

Concepts clés

  • une instrumentation doit être déclarée dans un package d'application, <instrumentation> imbriquée sous la balise <manifest> du fichier manifeste du package de l'application.
  • le fichier manifeste d'un package d'application peut techniquement contenir Des balises <instrumentation>, bien qu'elles ne soient pas couramment utilisées de cette manière.
  • chaque <instrumentation> doit contenir: <ph type="x-smartling-placeholder">
      </ph>
    • Un attribut android:name: il doit s'agir du nom d'une sous-classe de Instrumentation inclus dans l'application de test, qui est généralement d'exécution utilisé, par exemple : android.support.test.runner.AndroidJUnitRunner
    • un attribut android:targetPackage doit être défini. Sa valeur doit défini sur le package d'application testé.

Résumé des étapes

  1. Vous trouverez ci-dessous des destinations courantes pour les tests hermétiques de services de framework:

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

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

  2. Respectez la convention existante si vous ajoutez des tests à l'un des emplacements ci-dessus. Si vous configurez un nouveau module de test, veuillez suivre le configuration de AndroidManifest.xml et Android.mk dans l'un des emplacements au-dessus

  3. Voir frameworks/base/core/tests/coretests/ à titre d'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. 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 en cas de réussite ou d'échec à l'aide des API JUnit. dans toutes les exceptions non détectées entraîneront é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 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 APK de test peut être soit des tests fonctionnels, soit des tests de métriques, le mélange des deux n'est actuellement pas pris en charge