Je cherchais des cadres de test pour Android UI automation et je suis tombé sur UI Automator
et Espresso
et c'est la partie qui m'embrouille -
Android
uniquement des frameworksDonc, mes questions/doutes ici sont -
UI Automator
et Espresso
?UIAutomator - est puissant et a une bonne intégration du système d'exploitation externe, par exemple peut activer et désactiver le WiFi et accéder à d'autres paramètres pendant le test, mais manque de compatibilité descendante car il nécessite Jelly bean ou supérieur. Mais, il manque également un accès détaillé à la vue, on pourrait donc dire qu'il peut s'agir davantage d'un pur test de boîte noire. Où Espresso a accès pour voir les internes (voir ci-dessous). Ceci est recommandé sur developer.Android.com pour "Tester l'interface utilisateur pour plusieurs applications"
Espresso - est un peu plus léger que l'automate d'interface utilisateur et prend en charge 2.2 Froyo et jusqu'à il a également une api fluide avec une puissante hamcrest ( https://github.com/hamcrest ) intégration rendant le code plus lisible et extensible (il est plus récent que Ui automator). Il n'a pas accès aux tests d'intégration du système mais a accès à la vue interne par ex. peut tester une vue Web (utile pour les tests d'applications hybrides ou les tests intensifs de vues Web). Un peu plus de tests en boîte grise par rapport à UI Automator. Ceci est recommandé sur developer.Android.com pour "Tester l'interface utilisateur pour une seule application". À partir de Android Studio 2.2, il offre désormais un enregistrement de test d'interface utilisateur (comme UIAutomator)
En fait, vous n'avez pas besoin de choisir. UIAutomator et Espresso utilisent le même runner d'instrumentation, vous pouvez donc utiliser les commandes des deux en un seul test. Espresso a une variété d'appariements, d'assertions et d'actions sur l'interface utilisateur, que l'automate n'a pas:
Espresso s'exécute dans un thread séparé et il est vraiment rapide en comparaison avec d'autres frameworks de test.
comme résumé: utilisez les deux dans vos tests, Espresso est principal et UIAutomator comme outil supplémentaire pour l'intégration du système d'exploitation.
Si vous testez une seule application, alors Espresso.
Si vous testez plus d'une application ou son intégration avec d'autres applications ou système, alors UiAutomator.
J'ai trouvé un article intéressant, qui explique pourquoi vous devriez les utiliser tous les deux. Jeter un coup d'œil à:
http://qathread.blogspot.com/2015/05/espresso-uiautomator-perfect-tandem.html
Déjà Espresso
me suffit, mais pour certaines raisons comme tester les notifications des applications, j'apprendrais en quelques semaines uiautomator
.
Passez du temps à
https://github.com/googlesamples/Android-testing/tree/master/ui
http://developer.Android.com/training/testing/ui-testing/espresso-testing.html
http://developer.Android.com/training/testing/ui-testing/uiautomator-testing.html
Pour avoir une idée rapide du fonctionnement des deux choses, donnons un exemple. Essayons de trouver et de cliquer sur un bouton avec le titre "Démarrer" sur Lollipop en utilisant UIAutomator
et Espresso
:
device.findObject(new UiSelector().text("START")).click();
R.string.start
Et n'auriez pas besoin de vous soucier de la façon dont la chaîne est réellement rendue par la plateforme. Peu importe si la vue a textAllCaps=true
Ou si elle est ellipsée. onView(withText(R.string.start)).perform(click());
TL: DR;
IAutomator recherche les vues dans un style de niveau inférieur à Espresso - via le mécanisme d'instrumentation et traversant l'arborescence AccessibilityNodeInfo
de la hiérarchie des vues. L'espresso à son tour traverse généralement la hiérarchie des vues elle-même.
Lorsque vous utilisez UIAutomator, vous devez utiliser une API 18+ tandis qu'avec Espresso, vous pouvez descendre jusqu'à API 8.
Comme l'indique la documentation Android Android, les tests multi-applications doivent être effectués avec UIAutomator tandis que si vous souhaitez que les tests s'exécutent uniquement dans votre propre package d'application, vous pouvez utiliser Espresso.
Au bas de page de cette documentation , vous pouvez trouver l'introduction, ainsi que des exemples de ces deux styles de test.
Un avantage clé de l'utilisation d'Espresso est qu'il offre une synchronisation automatique des actions de test avec l'interface utilisateur de l'application que vous testez. Espresso détecte lorsque le fil principal est inactif, il peut donc exécuter vos commandes de test au moment approprié, améliorant ainsi la fiabilité de vos tests. Cette fonctionnalité vous évite également d'avoir à ajouter des solutions de contournement, telles que Thread.sleep () dans votre code de test.
Le framework de test Espresso est une API basée sur l'instrumentation et fonctionne avec le lanceur de test AndroidJUnitRunner.
Source: https://developer.Android.com/training/testing/ui-testing/espresso-testing.html