In diesem Leitfaden wird beschrieben, wie Sie einen Instrumentierungstest mit Firebase Test Lab vorbereiten und ausführen. Dazu benötigen Sie einen Instrumentierungstest (der von Ihnen oder Ihrem Team geschrieben wurde) der die Espresso oder UI Automator Android-Testframeworks verwendet. Instrumentierungstests können auf physischen Geräten bis zu 45 Minuten und auf virtuellen Geräten bis zu 60 Minuten dauern.
In den folgenden Schritten laden Sie das APK Ihrer App und das APK Ihres Tests in Firebase hoch.
Optional: Screenshot-Bibliothek zu Ihrer App hinzufügen
Firebase Test Lab enthält eine Bibliothek (testlab-instr-lib), mit der Sie alle Screenshots verarbeiten können, die Sie mit ScreenCapture von AndroidX aufnehmen, wenn Sie Instrumentierungstests ausführen, z. B. Tests, die mit dem Espresso-Testframework geschrieben wurden.
In diesem Abschnitt wird beschrieben, wie Sie ScreenCapture-Objekte mit der AndroidX-Bibliothek erstellen und mit testlab-instr-lib verarbeiten.
Nachdem Ihr Instrumentierungstest ausgeführt wurde, können Sie sich die aufgenommenen Screenshots in der Firebase Konsole ansehen.
Beispielanwendung ausprobieren
Laden Sie die Beispiel-App NotePad herunter, um diese Funktion auszuprobieren. Die Möglichkeit, Screenshots aufzunehmen, ist bereits in das NotePad-Projekt integriert.
Schritt 1: Screenshot-Bibliothek zu Ihrem Projekt hinzufügen
Fügen Sie in der Gradle-Datei auf Stammebene Ihres Testprojekts (
settings.gradle.ktsodersettings.gradle) in jedemrepositoriesAbschnitt das Maven-Repository von Google hinzu:pluginManagement { repositories { // Add the following line: google() // Google's Maven repository mavenCentral() gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { // Add the following line: google() // Google's Maven repository mavenCentral() } } // ...
Fügen Sie in der Gradle-Datei des Moduls (auf App-Ebene) (in der Regel
<project>/<app-module>/build.gradle.ktsoder<project>/<app-module>/build.gradle) eine Abhängigkeit für die Test Lab Screenshot-Bibliothek hinzu.dependencies { // ... // Add Test Lab's instrumentation test screenshot library: androidTestImplementation("com.google.firebase:testlab-instr-lib:0.2") // ...
Registrieren Sie in der Datei
AndroidManifest.xmlIhres Tests denFirebaseScreenCaptureProcessorin einem Meta-Tag innerhalb des Elements<instrumentation>. Sie können den Prozessor auch als Argument in AndroidJUnitRunner angeben. Eine Anleitung dazu finden Sie in der Referenzdokumentation zu AndroidJUnitRunner .<instrumentation // Check that you have the following line (if not, add it): android:name="androidx.test.runner.AndroidJUnitRunner" // Specifies AndroidJUnitRunner as the test runner android:targetPackage="com.your.package.name"> // Add the following: <meta-data android:name="screenCaptureProcessors" android:value="com.google.firebase.testlab.screenshot.FirebaseScreenCaptureProcessor" /> </instrumentation> ...Fügen Sie in der Datei
AndroidManifest.xmlIhrer App die folgenden Zeilen innerhalb des Elements<manifest>hinzu:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>Geben Sie in der Datei
AndroidManifest.xmlSystemberechtigungen für Ihre App an, indem Sie die folgenden Zeilen innerhalb des Tags<manifest>hinzufügen. Wenn Sie unter Android 10 (API-Level 29) oder höher testen, lassen Sie dieWRITE_EXTERNAL_STORAGEBerechtigung weg. Ihre App benötigt diese Berechtigung nicht, um Screenshots auf dem Gerät zu lesen und zu schreiben.<manifest ... > <!-- WRITE_EXTERNAL_STORAGE is not needed on Android 10 (API level 29) or higher. --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> ... </manifest>
Schritt 2: Screenshots während des Tests aufnehmen
Rufen Sie an einer beliebigen Stelle in Ihrem Test, an der Sie einen Screenshot aufnehmen möchten, die Methode Screenshot.capture() aus der AndroidX-Bibliothek auf. Dadurch wird ein
ScreenCapture Objekt erstellt.
Wenn Sie process() für das ScreenCapture-Objekt aufrufen, wird es
mit dem ScreenCaptureProcessor
verarbeitet, das in Ihrer AndroidManifest.xml registriert ist. Hinweis: Wenn keine Prozessoren registriert sind, wird BasicScreenCaptureProcessor verwendet.
Da Sie FirebaseScreenCaptureProcessor registriert haben, werden Ihre Screenshots
über FirebaseScreenCaptureProcessor verarbeitet und sind
mit Ihren Ergebnissen verfügbar, wenn Sie Ihren Test mit Firebase Test Lab ausführen.
Anwendungsfallbeispiele für das Erstellen eines ScreenCapture:
Vollständigen ScreenCapture unter Android 4.3 (API-Level 18) und höher aufnehmen:
Screenshot.capture()ScreenCaptureder Aktivität auf einem beliebigen API-Level aufnehmen. Dies ist die einzige Option für Geräte unter Android 4.3 (API-Level 18).@Rule public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class); ... Screenshot.capture(activityRule.getActivity()); ...
Anwendungsfallbeispiele für die Verarbeitung eines ScreenCapture
ScreenCaptureüber denFirebaseScreenCaptureProcessorverarbeiten:Screenshot.capture().process();ScreenCaptureüber einen angegebenenScreenCaptureProcessorverarbeiten. So können Sie die Registrierung des Prozessors überspringen:Set<ScreenCaptureProcessor> processors = new HashSet<>(); processors.add(new FirebaseScreenCaptureProcessor()); Screenshot.capture().process(processors);Name und Format des
ScreenCapturefestlegen und mit dem registrierten Prozessor verarbeiten:Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
Schritt 3: Test erstellen und ausführen
Erstellen Sie die APKs Ihrer App und Ihres Tests. Eine Anleitung finden Sie unter App testen .
Laden Sie die APK-Dateien im Test Lab Dashboard der Firebase Konsole hoch.
Führen Sie den Test aus.
Schritt 4: Test-Screenshots ansehen
Nachdem der Test abgeschlossen ist, können Sie sich alle aufgenommenen Screenshots in der Firebase Konsole ansehen.
Wählen Sie auf dem Tab Tests den abgeschlossenen Test aus und klicken Sie dann auf den Tab Ergebnisse.
Wählen Sie den Test noch einmal aus und klicken Sie dann auf den Tab Screenshots.
Optional: Zusätzliche Testfunktionen aktivieren
Sie können die folgenden Funktionen in Ihrem Test aktivieren, bevor Sie ihn mit Test Lab ausführen:
Orchestrator aktivieren
Android Test Orchestrator ist ein Tool, mit dem jeder Instrumentierungstest Ihrer App unabhängig ausgeführt wird. Test Lab verwendet immer die neueste Version von Orchestrator.
Wenn Sie Orchestrator für Test Lab aktivieren möchten, klicken Sie bei der Einrichtung des Instrumentierungstests auf Zusätzliche Optionen > Mit Orchestrator ausführen.
Wenn Sie Orchestrator verwenden, profitieren Sie von folgenden Vorteilen:
- Kein gemeinsamer Status Jeder Test wird in einer eigenen Instrumentierungsinstanz ausgeführt, sodass sich kein gemeinsamer Status über Tests hinweg ansammelt.
- Isolierte Abstürze Wenn ein Test abstürzt, wird nur diese Instrumentierung beendet und andere Tests in Ihrer Suite können weiterhin ausgeführt werden.
Wenn Sie Orchestrator verwenden, wird für jeden Test eine eigene Instrumentierungsinstanz ausgeführt. Das bedeutet, dass der App-Prozess nach jedem Testlauf neu gestartet wird. Die dadurch längeren Ausführungszeiten können sich auf Ihre Kontingentnutzung oder die in Rechnung gestellte Zeit auswirken und dazu führen, dass die Zeitlimits Ihrer Geräte überschritten werden. Wenn Sie die Startzeit Ihrer App verkürzen, wird dieser Mehraufwand reduziert.
Wenn Sie zusätzliche Optionen für Orchestrator festlegen möchten, geben Sie sie über das
environmentVariables Feld an. Wenn Sie beispielsweise clearPackageData verwenden möchten, verwenden Sie diese Option in gcloud:
--environment-variables clearPackageData=true
Sharding aktivieren
Beim Test-Sharding wird eine Reihe von Tests in Untergruppen (Shards) aufgeteilt, die separat und isoliert ausgeführt werden. Test Lab führt jeden Shard automatisch parallel auf mehreren Geräten aus und schließt die gesamte Testreihe in kürzerer Zeit ab.
Wenn Sie beispielsweise N Shards erstellen, startet für jedes ausgewählte Gerät Test Lab N identische Geräte und führt auf jedem Gerät eine Teilmenge der Tests aus. Das bedeutet, dass Shard-Testfälle zu mehreren Testausführungen pro Gerät führen können. Nicht-Shard-Testfälle führen jedoch zu einer Testausführung pro Gerät. Weitere Informationen zu Test Lab Konzepten finden Sie unter Wichtige Konzepte.
So aktivieren Sie das Test-Sharding in der Firebase Konsole:
Klicken Sie bei der Einrichtung des Instrumentierungstests auf Zusätzliche Optionen.
Geben Sie im Abschnitt Sharding die Anzahl der Shards ein, die Sie ausführen möchten.
Abrechnung für Test-Shards
Test Lab implementiert Ihre Shards mithilfe des integriertenSharding-Mechanismus von AndroidJUnitRunner. Damit Ihnen keine leeren Shards (Shards ohne zugewiesene Testfälle) in Rechnung gestellt werden, sollte die Anzahl der erstellten Shards geringer sein als die Gesamtzahl der Testfälle. Je nachdem, wie lange die Ausführung der einzelnen Testfälle dauert, ist es in der Regel sinnvoll, 2 bis 10 Testfälle pro Shard zuzuweisen.
Weitere Informationen zur Abrechnung finden Sie unter Nutzung, Kontingente und Abrechnung.