Atest est un outil de ligne de commande qui permet aux utilisateurs de compiler, d'installer et d'exécuter des tests Android en local. Il accélère considérablement les nouvelles exécutions de tests sans nécessiter de connaissances sur les options de ligne de commande du harnais de test Trade Federation . Cette page explique comment utiliser Atest pour exécuter des tests Android.
Pour obtenir des informations générales sur la création de tests pour Android, consultez la section Tests de la plate-forme Android.
Pour en savoir plus sur la structure globale d'Atest, consultez le Guide du développeur Atest.
Pour en savoir plus sur l'exécution de tests dans des fichiers TEST_MAPPING via Atest, consultez la section Exécuter des tests dans des fichiers TEST_MAPPING.
Pour ajouter une fonctionnalité à Atest, suivez le workflow du développeur Atest.
Configurer votre environnement
Pour configurer votre environnement Atest, suivez les instructions des sections Configurer l' environnement, Choisir une cible et Compiler le code.
Utilisation de base
Les commandes Atest se présentent comme suit :
atest test-to-run [optional-arguments]
Arguments facultatifs
Le tableau suivant répertorie les arguments les plus couramment utilisés. Une liste complète est disponible via atest --help.
| Option | Option longue | Description |
|---|---|---|
-b |
--build |
Compile les cibles de test. (par défaut) |
-i |
--install |
Installe les artefacts de test (APK) sur l'appareil. (par défaut) |
-t |
--test |
Exécute les tests. (par défaut) |
-s |
--serial |
Exécute les tests sur l'appareil spécifié. Un seul appareil peut être testé à la fois. |
-d |
--disable-teardown |
Désactive la suppression et le nettoyage des tests. |
|
--dry-run |
Exécute Atest sans compiler, installer ni exécuter de tests. |
-m |
--rebuild-module-info |
Force la recompilation du fichier module-info.json. |
-w |
--wait-for-debugger |
Attend que le débogueur se termine avant l'exécution. |
-v |
--verbose |
Affiche la journalisation au niveau DEBUG. |
|
--iterations |
Exécute les tests en boucle jusqu'à ce que le nombre maximal d'itérations soit atteint. (10 par défaut) |
|
--rerun-until-failure [COUNT=10] |
Réexécute tous les tests jusqu'à ce qu'un échec se produise ou que le nombre maximal d'itérations soit atteint. (10 par défaut) |
|
--retry-any-failure [COUNT=10] |
Réexécute les tests ayant échoué jusqu'à ce qu'ils réussissent ou que le nombre maximal d'itérations soit atteint. (10 par défaut) |
|
--start-avd |
Crée automatiquement un AVD et exécute des tests sur l'appareil virtuel. |
|
--acloud-create |
Crée un AVD à l'aide de la commande acloud. |
|
--[CUSTOM_ARGS] |
Spécifie des arguments personnalisés pour les lanceurs de test. |
-a |
--all-abi |
Exécute les tests pour toutes les architectures d'appareil disponibles. |
|
--host |
Exécute le test entièrement sur l'hôte sans appareil. Remarque : L'exécution d'un test d'hôte qui nécessite un appareil avec --host
échouera. |
|
--history |
Affiche les résultats des tests par ordre chronologique. |
|
--latest-result |
Affiche le dernier résultat du test. |
Pour en savoir plus sur -b, -i et -t, consultez la
section Spécifier des étapes : compiler, installer ou exécuter.
Spécifier des tests
Pour exécuter des tests, spécifiez-en un ou plusieurs à l'aide de l'un des identifiants suivants :
- Nom du module
- Module:Classe
- Nom de la classe
- Test d'intégration Tradefed
- Chemin d'accès du fichier
- Nom du package
Séparez les références à plusieurs tests par des espaces, comme suit :
atest test-identifier-1 test-identifier-2
Nom du module
Pour exécuter un module de test complet, utilisez son nom de module. Saisissez le nom tel qu'il apparaît dans les variables LOCAL_MODULE ou LOCAL_PACKAGE_NAME du fichier Android.mk ou Android.bp de ce test.
Exemples :
atest FrameworksServicesTestsatest CtsVideoTestCases
Module:Classe
Pour exécuter une seule classe dans un module, utilisez Module:Classe. Module est le
même que celui décrit dans Nom du module. Classe est le nom de la classe de test dans le fichier .java. Il peut s'agir du nom complet de la classe ou du nom de base.
Exemples :
atest CtsVideoTestCases:VideoEncoderDecoderTestatest FrameworksServicesTests:ScreenDecorWindowTestsatest FrameworksServicesTests:com.android.server.wm.ScreenDecorWindowTests
Nom de la classe
Pour exécuter une seule classe sans indiquer explicitement un nom de module, utilisez le nom de la classe.
Exemples :
atest ScreenDecorWindowTestsatest VideoEncoderDecoderTest
Test d'intégration Tradefed
Pour exécuter des tests intégrés directement à TradeFed (non modulaires), saisissez le nom tel qu'il apparaît dans la sortie de la commande tradefed.sh list configs. Exemple :
Pour exécuter le
reboot.xml test :
atest example/reboot
Pour exécuter le
native-benchmark.xml test :
atest native-benchmark
Chemin d'accès du fichier
Atest permet d'exécuter des tests basés sur des modules et des tests basés sur l'intégration en saisissant le chemin d'accès à leur fichier ou répertoire de test, selon le cas. Il permet également d'exécuter une seule classe en spécifiant le chemin d'accès au fichier Java de la classe. Les chemins d'accès relatifs et absolus sont acceptés.
Exécuter un module
Les exemples suivants montrent deux façons d'exécuter le module CtsVideoTestCases à l'aide d'un chemin d'accès de fichier.
Exécuter à partir de la racine du dépôt Android repo-root :
atest cts/tests/video
Exécuter à partir de la racine du dépôt Androidrepo-root/cts/tests/video :
atest .
Exécuter une classe de test
L'exemple suivant montre comment exécuter une classe spécifique dans le module CtsVideoTestCases à l'aide d'un chemin d'accès de fichier.
À partir de Android repo-root :
atest cts/tests/video/src/android/video/cts/VideoEncoderDecoderTest.java
Exécuter un test d'intégration
L'exemple suivant montre comment exécuter un test d'intégration à l'aide d'un chemin d'accès de fichier
à partir de la racine du dépôt Android repo-root :
atest tools/tradefederation/contrib/res/config/example/reboot.xml
Nom du package
Atest permet de rechercher des tests par nom de package.
Exemples :
atest com.android.server.wm
atest com.android.uibench.janktests
Spécifier des étapes : compiler, installer ou exécuter
Utilisez les options -b, -i et -t pour spécifier les étapes à exécuter. Si vous ne spécifiez pas d'option, toutes les étapes sont exécutées.
- Compiler uniquement les cibles :
atest -b test-to-run - Exécuter uniquement les tests :
atest -t test-to-run - Installer l'APK et exécuter les tests :
atest -it test-to-run - Compiler et exécuter, mais ne pas installer :
atest -bt test-to-run
Atest peut forcer un test à ignorer l'étape de nettoyage ou de suppression. De nombreux tests, tels que
CTS, nettoient l'appareil après l'exécution du test. Par conséquent, si vous essayez de réexécuter votre test
avec -t, l'opération échouera sans le paramètre --disable-teardown. Utilisez -d avant -t pour ignorer l'étape de nettoyage du test et tester de manière itérative.
atest -d test-to-runatest -t test-to-run
Exécuter des méthodes spécifiques
Atest permet d'exécuter des méthodes spécifiques dans une classe de test. Bien que l'ensemble du module doive être compilé, cela réduit le temps nécessaire à l'exécution des tests. Pour exécuter des méthodes spécifiques, identifiez la classe à l'aide de l'une des méthodes compatibles pour identifier une classe (Module:Classe, chemin d'accès de fichier, etc.), puis ajoutez le nom de la méthode :
atest reference-to-class#method1
Lorsque vous spécifiez plusieurs méthodes, séparez-les par des virgules :
atest reference-to-class#method1,method2,method3
Exemples :
atest com.android.server.wm.ScreenDecorWindowTests#testMultipleDecorsatest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval
Les deux exemples suivants montrent les méthodes préférées pour exécuter une seule méthode, testFlagChange. Ces exemples sont préférables à l'utilisation du nom de la classe uniquement, car la spécification du module ou de l'emplacement du fichier Java permet à Atest de trouver le test beaucoup plus rapidement.
Utiliser Module:Classe :
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange
À partir d'Android repo-root :
atest frameworks/base/services/tests/wmtests/src/com/android/server/wm/ScreenDecorWindowTests.java#testFlagChange
Plusieurs méthodes peuvent être exécutées à partir de différentes classes et modules :
atest FrameworksServicesTests:ScreenDecorWindowTests#testFlagChange,testRemoval ScreenDecorWindowTests#testMultipleDecors
Exécuter plusieurs classes
Pour exécuter plusieurs classes, séparez-les par des espaces de la même manière que pour exécuter plusieurs tests. Atest compile et exécute les classes de manière efficace. Par conséquent, la spécification d'un sous-ensemble de classes dans un module améliore les performances par rapport à l'exécution de l'ensemble du module.
Pour exécuter deux classes dans le même module :
atest FrameworksServicesTests:ScreenDecorWindowTests FrameworksServicesTests:DimmerTests
Pour exécuter deux classes dans des modules différents :
atest FrameworksServicesTests:ScreenDecorWindowTests CtsVideoTestCases:VideoEncoderDecoderTest
Exécuter des binaires GTest
Atest peut exécuter des binaires GTest. Utilisez -a pour exécuter ces tests pour toutes les architectures d'appareil disponibles, qui dans cet exemple sont armeabi-v7a (ARM 32 bits) et arm64-v8a (ARM 64 bits).
Exemple de test d'entrée :
atest -a libinput_tests inputflinger_tests
Pour sélectionner un binaire GTest spécifique à exécuter, utilisez un signe deux-points (:) pour spécifier le nom du test et un dièse (#) pour spécifier une méthode individuelle.
Par exemple, pour la définition de test suivante :
TEST_F(InputDispatcherTest, InjectInputEvent_ValidatesKeyEvents)
Exécutez la commande suivante pour spécifier l'ensemble du test :
atest inputflinger_tests:InputDispatcherTest
Ou exécutez un test individuel à l'aide de la commande suivante :
atest inputflinger_tests:InputDispatcherTest#InjectInputEvent_ValidatesKeyEvents
Exécuter des tests dans TEST_MAPPING
Atest peut exécuter des tests dans des fichiers TEST_MAPPING.
Exécuter des tests de pré-envoi de manière implicite
Exécuter des tests de pré-envoi dans des fichiers TEST_MAPPING dans les répertoires actuel et parent :
atest
Exécuter des tests de pré-envoi dans des fichiers TEST_MAPPING dans /path/to/project et
ses répertoires parents :
atest --test-mapping /path/to/project
Exécuter un groupe de tests spécifié
Les groupes de tests disponibles sont les suivants : presubmit(par défaut), postsubmit,
mainline-presubmit et all.
Exécuter des tests de post-envoi dans des fichiers TEST_MAPPING dans les répertoires actuel et parent :
atest :postsubmit
Exécuter des tests de tous les groupes dans des fichiers TEST_MAPPING :
atest :all
Exécuter des tests de post-envoi dans des fichiers TEST_MAPPING dans /path/to/project et ses répertoires parents :
atest --test-mapping /path/to/project:postsubmit
Exécuter des tests de la branche principale dans des fichiers TEST_MAPPING dans /path/to/project et ses répertoires parents :
atest --test-mapping /path/to/project:mainline-presubmit
Exécuter des tests dans des sous-répertoires
Par défaut, Atest ne recherche les tests que dans les fichiers TEST_MAPPING vers le haut (du répertoire actuel ou donné à ses répertoires parents). Si vous souhaitez également exécuter des tests dans des fichiers TEST_MAPPING dans les sous-répertoires, utilisez --include-subdirs pour forcer Atest à inclure également ces tests :
atest --include-subdirs /path/to/projectExécuter des tests de manière itérative
Exécutez des tests de manière itérative en transmettant l'argument --iterations. Qu'il réussisse ou échoue, Atest répète le test jusqu'à ce que le nombre maximal d'itérations soit atteint.
Exemples :
Par défaut, Atest effectue 10 itérations. Le nombre d'itérations doit être un entier positif.
atest test-to-run --iterationsatest test-to-run --iterations 5
Les approches suivantes facilitent la détection des tests instables :
Approche 1 : Exécutez tous les tests jusqu'à ce qu'un échec se produise ou que le nombre maximal d'itérations soit atteint.
- Arrêtez-vous lorsqu'un échec se produit ou que l'itération atteint le 10e tour (par défaut).
atest test-to-run --rerun-until-failure - Arrêtez-vous lorsqu'un échec se produit ou que l'itération atteint le 100e tour.
atest test-to-run --rerun-until-failure 100
Approche 2 : N'exécutez que les tests ayant échoué jusqu'à ce qu'ils réussissent ou que le nombre maximal d'itérations soit atteint.
- Supposons que
test-to-runcomporte plusieurs scénarios de test et que l'un des tests échoue. N'exécutez que le test ayant échoué 10 fois (par défaut) ou jusqu'à ce qu'il réussisse.atest test-to-run --retry-any-failure - Arrêtez l'exécution du test ayant échoué lorsqu'il réussit ou atteint le 100e tour.
atest test-to-run --retry-any-failure 100
Exécuter des tests sur des AVD
Atest peut exécuter des tests sur un AVD nouvellement créé. Exécutez acloud create pour créer un AVD et compiler des artefacts, puis utilisez les exemples suivants pour exécuter vos tests.
Démarrer un AVD et exécuter des tests dessus :
acloud create --local-instance --local-image && atest test-to-run
Démarrer un AVD dans le cadre d'une exécution de test :
atest test-to-run --acloud-create "--local-instance --local-image"
Pour en savoir plus, exécutez acloud create --help.
Transmettre des options au module
Atest peut transmettre des options aux modules de test. Pour ajouter des options de ligne de commande TradeFed à votre exécution de test, utilisez la structure suivante et assurez-vous que vos arguments personnalisés respectent le format des options de ligne de commande Tradefed.
atest test-to-run -- [CUSTOM_ARGS]
Transmettre des options de module de test aux préparateurs de cibles ou aux lanceurs de test définis dans le fichier de configuration de test :
atest test-to-run -- --module-arg module-name:option-name:option-valueatest GtsPermissionTestCases -- --module-arg GtsPermissionTestCases:ignore-business-logic-failure:true
Transmettre des options à un type ou une classe de lanceur :
atest test-to-run -- --test-arg test-class:option-name:option-valueatest CtsVideoTestCases -- --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true
Pour en savoir plus sur les options réservées aux tests, consultez la section Transmettre des options aux modules.