web-dev-qa-db-fra.com

Android Test: UIAutomator vs Espresso

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 -

  1. Les deux sont maintenus par Google
  2. Les deux sont utilisés pour les tests d'interface utilisateur fonctionnels
  3. Les deux sont Android uniquement des frameworks

Donc, mes questions/doutes ici sont -

  • Quelle est la principale différence entre UI Automator et Espresso?
  • Le code source devra-t-il être modifié pour intégrer l'un de ces cadres?
  • Un cadre a-t-il un avantage sur l'autre? Si oui, quel framework est le plus approprié pour l'automatisation de l'interface utilisateur d'une application Android?
56
Shikhar

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)

38
Steven Mark Ford

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:

Feuille de triche Espresso

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.

31
Dmitry Gr

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.

11

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 à

  • consultez les exemples d'utilisation de ces cadres par Google:

https://github.com/googlesamples/Android-testing/tree/master/ui

  • lire une documentation de ces frameworks:

http://developer.Android.com/training/testing/ui-testing/espresso-testing.html

http://developer.Android.com/training/testing/ui-testing/uiautomator-testing.html

5
piotrek1543

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:

  • IAutomator: Vous devez rechercher les "START" majuscules car sur Lollipop les boutons sont rendus en majuscules. device.findObject(new UiSelector().text("START")).click();
  • Espresso: Vous utiliseriez simplement 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.

3
WindRider

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.

2
Simas

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

1
phq