Google Espresso ou Robotium [fermé]

116

Je dois utiliser l'outil de test automatisé de l'interface utilisateur et je ne comprends pas comment utiliser Robotium ou Google Espresso.

Quelles sont les principales différences entre les deux? Existe-t-il des fonctionnalités dans l'une mais pas dans l'autre?

Androidme
la source
20
Je déteste honnêtement quand les gens refusent de voter sans écrire de commentaire. J'apprécierais que la personne qui vote contre écrive quelques commentaires expliquant pourquoi il / elle fait cela
Androidme
9
Je pense que la question est très utile. De nombreux développeurs se le demandent. Quelles sont les différences? Je pense que le problème est la façon dont vous demandez. Vous devriez le demander plus en détail et ne pas simplement demander lequel utiliser.
tasomaniac
8
C'est la question exacte à laquelle je voulais répondre. Merci d'avoir posté
Richard Fung
8
Je n'aime pas le fait que ce soit hors sujet selon StackOverflow. Je sais que si nous devions comparer chaque bibliothèque et chaque outil, il pourrait y avoir beaucoup de réponses basées sur l'opinion, mais une question comme celle-ci qui demande les différences entre deux ressources est très utile.
David Argyle Thacker

Réponses:

176

Divulgation complète: je suis l'un des auteurs d'Espresso.

Espresso et Robotium sont des frameworks basés sur l'instrumentation, ce qui signifie qu'ils utilisent Android Instrumentation pour inspecter et interagir avec les activités testées.

Chez Google, nous avons commencé par utiliser Robotium car il était plus pratique que l'instrumentation standard (chapeau aux développeurs Robotium pour l'avoir fait). Cependant, cela ne répondait pas à notre besoin d'un framework facilitant l' écriture de tests fiables pour les développeurs.

Les avancées majeures de l'Espresso par rapport au Robotium:

  1. Synchronisation. Par défaut, la logique de test d'instrumentation s'exécute sur un thread (d'instrumentation) différent des opérations d'interface utilisateur (traitées sur le thread d'interface utilisateur). Sans synchronisation des opérations de test avec les mises à jour de l'interface utilisateur, les tests seront sujets à la fragilité - c'est-à-dire échoueront de manière aléatoire en raison de problèmes de synchronisation. La plupart des auteurs de tests ignorent ce fait, certains ajoutent des mécanismes de veille / nouvelle tentative et encore moins implémentent un code de sécurité des threads plus sophistiqué. Aucun de ceux-ci n'est idéal. Espresso prend en charge la sécurité des threads en synchronisant de manière transparente les actions de test et les assertions avec l'interface utilisateur de l'application testée. Robotium tente de résoudre ce problème avec des mécanismes de veille / nouvelle tentative, qui non seulement ne sont pas fiables, mais entraînent également des tests plus lents que nécessaire.

  2. API. Espresso a une petite API bien définie et prévisible, qui est ouverte à la personnalisation. Vous indiquez au framework comment localiser un élément d'interface utilisateur à l'aide de correspondeurs hamcrest standard, puis vous lui demandez d'exécuter une action ou de vérifier une assertion sur l'élément cible. Vous pouvez comparer cela avec l'API de Robotium, où l'auteur du test doit choisir parmi plus de 30 méthodes de clic. De plus, Robotium expose des méthodes dangereuses comme getCurrentActivity (que signifie le courant de toute façon?) Et getView, qui vous permettent d'opérer sur des objets en dehors du thread principal (voir le point ci-dessus).

  3. Effacer les informations d'échec. Espresso s'efforce de fournir des informations de débogage riches en cas de panne. De plus, vous pouvez personnaliser la façon dont les échecs sont gérés par Espresso avec votre propre gestionnaire de pannes. Je ne l'ai pas essayé depuis un moment, mais les versions précédentes de Robotium souffraient d'une gestion des échecs incohérente (par exemple, la méthode clickOnView avalerait SecurityExceptions).

Contrairement à une réponse précédente, Espresso est pris en charge sur toutes les versions d'API avec un nombre important d'utilisateurs (voir: http://developer.android.com/about/dashboards/index.html ). Cela fonctionne sur certaines des anciennes versions, mais les tester serait un gaspillage de ressources. En parlant de tests ... Espresso est testé à chaque changement par une suite de tests complète (avec plus de 95% de couverture) ainsi que la majorité des applications Android développées par Google.

ValeraZakharov
la source
Salut ! Merci pour votre réponse, Espresso offre-t-il la possibilité de tester plusieurs applications dans le même cas de test? Je dois tester mon application qui appelle une activité d'une autre application (mon autre application qui partage le même sharedUserId), puis récupère le résultat. Je ne peux pas faire ça avec Robotium, mais peut-être avec Espresso? :-)
nbe_42
1
Non - vous ne pouvez pas interagir avec l'interface utilisateur en dehors de votre processus avec Espresso. Il s'agit d'une limitation du cadre d'instrumentation.
ValeraZakharov
1
@ValeraZakharov :: Hii ... !! Comme vous l'avez dit, espresso se chargera de la synchronisation des threads de l'interface utilisateur et il n'est pas nécessaire de mettre en veille. Mais dans mon cas, j'ai écrit quelques tests et tous les tests fonctionnent sur ma machine locale (avec un sommeil par TestSuite comme début). Mais près de 99% des tests échouent lorsque je cours avec jenkins local / serveur. J'ai désactivé toutes les animations de l'émulateur jenkins. La plupart du temps, j'obtiens AppNotIdleException. Im incapable de comprendre la cause profonde. Pouvez vous me donner un coup de main.
Naresh Gunda
@Radu Je l'ai fait. Votre commentaire est nul et sans explication appropriée semble être une tentative téméraire d'attirer l'attention.
Rakib
9

Espresso est beaucoup plus rapide que Robotium, mais ne fonctionne que sur certaines versions du SDK.

Donc, si vous voulez un test qui fonctionne sur tous les appareils, optez pour Roboitum. Sinon, optez pour l'espresso et n'oubliez pas que vous serez un bêta-testeur pendant encore un certain temps.

Snicolas
la source
Un vote positif m'aiderait à créer un synonyme pour ce tag ..;)
Snicolas
2
Lien ci-dessus modifié, c'est le nouveau: google.github.io/android-testing-support-library/docs/espresso
...