3

Ich benutze Löffel und Espresso, um UI/Functional Instrumentation Tests auf unserer Android App zu automatisieren.Android Test Sharding mit Löffel

Ich würde gerne wissen, ob es eine Möglichkeit gibt, Instrumentierungstests über die mehreren angeschlossenen Geräte und/oder Emulatoren zu verteilen, so dass ich die Testlaufzeit reduzieren kann.

Beispiel: Ich habe 300 Tests, die 15 Minuten dauern, um auf 1 Emulator zu laufen. Gibt es eine Möglichkeit, weitere Emulatoren hinzuzufügen (sagen wir 4), 75 Tests an jeden Emulator zu verteilen und die Testausführungszeit zu reduzieren?

Schätzen Sie Ihre Eingaben dazu.

Antwort

0

Sie können im Dialogfeld "Wählen" mehrere Geräte auswählen. Drücken Sie die Taste Shift oder CTRL, wenn Sie auf klicken.

Eine andere Lösung ist Gradle zu verwenden. Auf der rechten Seite von Android Studio wählen Sie Gradle, dann verification, schließlich . Es würde Ihnen die gleiche Wirkung, wie Sie in der Konsole setzen würde:

./gradlew connectedAndroidTest oder gradlew.bat connectedAndroidTest

meine ich, ich würde alle Testfälle auf allen verfügbaren Geräten (physische und Emulatoren) laufen. Um genau zu bestimmen, welche Testklassen Sie machen sollten, machen Sie Aufgaben in build.gradle.

Lernen Sie die Grundlagen der Programmiersprache Groovy, um das Schreiben von Gradle Task-Skripten effektiver zu machen. Hier ist ein Beispiel von Aufgabe in Groovy geschrieben: Run gradle task X after "connectedAndroidTest" task is successful

Sie auch darüber erfahren, kann Continuous Integration und seine Werkzeuge wie Jenkins oder Travis, die Sie konfigurieren, dass bestimmte Testfälle laufen auf jeder begehen. Als Beispiel einen Blick auf diesem Buildprotokoll meines Android-Projektes nehmen Sie bitte: https://travis-ci.org/piotrek1543/WeatherforPoznan/builds/126944044 und hier ist eine Konfiguration von Travis: https://github.com/piotrek1543/WeatherforPoznan/blob/master/.travis.yml

Haben mehr Frage? Bitte frei zu fragen.

Hoffe, dass es

+0

Vielen Dank für Ihre Antwort. Es tut mir leid, wenn ich mit meiner Anfrage in diesem Post nicht klar war. Im Rahmen der kontinuierlichen Integration führen wir rund 500 Tests mit einem Android-Emulator für jedes Commit durch, das vom Entwickler durchgeführt wird. Dies dauert derzeit 25 Minuten und würde zunehmen, wenn wir weitere Tests hinzufügen. Ich habe hier nach einer Möglichkeit gesucht, die Ausführungszeit zu verkürzen, indem ich diese 500 Tests an zwei oder mehr Android-Emulatoren mit exakt derselben Konfiguration verteile. Bitte schlagen Sie vor, wenn Sie irgendwelche Gedanken dazu haben. –

1

helfen Was Sie suchen, auto-sharding genannt wird. Sie müssen den Löffelläufer mit --shard anrufen und die Serien aller angeschlossenen Geräte mit -serial hinzufügen. Sie können die Serien mit adb devices finden.

+0

Danke. Dies ist die Option, die ich ausprobiert habe. Aber ich sehe Espresso-Tests zufällig scheitern, wenn ich zwei oder mehr Emulatoren hinzufügen und Auto-Sharding. Wenn ich jedoch nur einen Emulator habe, gibt es keine zufälligen Testfehler. Sind Sie auf dieses Problem gestoßen? –

+0

in Bezug auf Ihre zufällig fehlgeschlagenen Tests, habe ich ähnliche Fehler mit echten Geräten insbesondere erlebt. Aber es stellt sich heraus, dass es die eigentlichen Umsetzungsprobleme sind, z. Multi Threading, da die Instrumentierung in einem anderen Thread läuft. Ich hoffe, das hilft. – WenChao

+0

Ich möchte hier meine zwei Cent hinzufügen, auch wenn wir das gleiche Problem hatten, dass einige zufällige Tests fehlgeschlagen sind, nachdem wir die Shard-Option verwendet haben. Wir fanden heraus, dass fehlgeschlagene Tests von anderen Tests abhängig waren, die nun auf einem anderen Gerät ausgeführt wurden. Daher mussten wir diese Tests reparieren und vollständig unabhängig machen, und es funktionierte wie erwartet. aber manchmal könnte es wegen des Grundes @ WenChao erwähnt werden. –