webentwicklung-frage-antwort-db.com.de

Google Espresso oder Robotium

Ich muss ein automatisiertes UI-Testtool verwenden und bin verwirrt, wenn ich Robotium oder Google Espresso verwende.

Was sind die Hauptunterschiede zwischen den beiden? Gibt es Merkmale, die in einem existieren, aber nicht in dem anderen?

114
Androidme

Vollständige Offenlegung: Ich bin einer der Autoren von Espresso.

Sowohl Espresso als auch Robotium sind instrumentenbasierte Frameworks, dh sie verwenden Android Instrumentation , um die getesteten Aktivitäten zu überprüfen und mit ihnen zu interagieren.

Bei Google haben wir mit Robotium begonnen, weil es praktischer war als die Standardinstrumentierung (was Robotium-Entwicklern zu verdanken ist). Unser Bedürfnis nach einem Framework, das das Schreiben zuverlässiger Tests für Entwickler einfach machte, wurde jedoch nicht erfüllt.

Die wichtigsten Fortschritte bei Espresso gegenüber Robotium:

  1. Synchronisation. Standardmäßig wird die Instrumentationstestlogik auf einem anderen (Instrumentations-) Thread ausgeführt als Benutzeroberflächenoperationen (die auf dem Benutzeroberflächen-Thread verarbeitet werden). Ohne die Synchronisierung von Testvorgängen mit Benutzeroberflächenaktualisierungen sind die Tests anfällig für Schuppenbildung - d. H. Sie schlagen aufgrund von Zeitproblemen zufällig fehl. Die meisten Testautoren ignorieren diese Tatsache, einige fügen Schlaf-/Wiederholungsmechanismen hinzu und noch weniger implementieren komplexeren Thread-Sicherheitscode. Nichts davon ist ideal. Espresso sorgt für die Thread-Sicherheit, indem Testaktionen und Behauptungen nahtlos mit der Benutzeroberfläche der zu testenden Anwendung synchronisiert werden. Robotium versucht, dieses Problem mit Schlaf-/Wiederholungsmechanismen zu beheben, die nicht nur unzuverlässig sind, sondern auch dazu führen, dass Tests langsamer als erforderlich ausgeführt werden.

  2. API. Espresso verfügt über eine kleine, gut definierte und vorhersehbare API, die angepasst werden kann. Sie teilen dem Framework mit, wie ein UI-Element mit standard hamcrest matchers gefunden werden soll, und weisen es dann an, entweder eine Aktion auszuführen oder eine Zusicherung für das Zielelement zu überprüfen. Sie können dies mit der API von Robotium vergleichen, bei der der Testautor aus über 30 Klickmethoden auswählen muss. Darüber hinaus stellt Robotium gefährliche Methoden wie getCurrentActivity (was bedeutet aktuell überhaupt?) Und getView zur Verfügung, mit denen Sie Objekte außerhalb des Hauptthreads bearbeiten können (siehe oben).

  3. Fehlerinformationen löschen. Espresso ist bestrebt, im Fehlerfall umfassende Debugging-Informationen bereitzustellen. Außerdem können Sie die Art und Weise, wie Fehler von Espresso behandelt werden, mit Ihrer eigenen Fehlerbehandlungsroutine anpassen. Ich habe es eine Weile nicht versucht, aber frühere Versionen von Robotium litten unter inkonsistenter Fehlerbehandlung (z. B. würde die clickOnView-Methode SecurityExceptions verschlucken).

Im Gegensatz zu einer früheren Antwort wird Espresso auf allen API-Versionen mit einer erheblichen Anzahl von Benutzern unterstützt (siehe: http://developer.Android.com/about/dashboards/index.html ). Es funktioniert auf einigen älteren Versionen, aber das Testen auf diesen wäre eine Verschwendung von Ressourcen. Apropos Testen ... Espresso wird bei jeder Änderung von einer umfassenden Testsuite (mit einer Abdeckung von über 95%) sowie den meisten von Google entwickelten Android) Anwendungen getestet.

174
ValeraZakharov

Espresso ist viel schneller als Robotium, funktioniert aber nur bei einigen SDK-Versionen.

Wenn Sie also einen Test wünschen, der auf allen Geräten funktioniert, entscheiden Sie sich für Roboitum. Wenn nicht, gönnen Sie sich einen Espresso und vergessen Sie nicht, dass Sie noch einige Zeit als Beta-Tester arbeiten werden.

8
Snicolas