In diesem Leitfaden wird beschrieben, wie Sie einen Instrumentierungstest mit Firebase Test Lab vorbereiten und ausführen. Für diesen Leitfaden benötigen Sie einen Instrumentierungstest (von Ihnen oder Ihrem Team geschrieben), der die Android-Test-Frameworks Espresso oder UI Automator 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 zur 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 der Instrumentierungstest ausgeführt wurde, können Sie die aufgenommenen Screenshots in der Firebase-Konsole ansehen.
Beispielanwendung ausprobieren
Lade die Beispiel-App „NotePad“ herunter, um diese Funktion auszuprobieren. Die Möglichkeit, Screenshots zu erstellen, ist bereits in das NotePad-Projekt integriert.
Schritt 1: Screenshot-Bibliothek zum Projekt hinzufügen
Fügen Sie in der Gradle-Datei mit den Einstellungen auf Stammebene Ihres Testprojekts (
settings.gradle.ktsodersettings.gradle) das Maven-Repository von Google zu jedemrepositories-Abschnitt 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) (normalerweise
<project>/<app-module>/build.gradle.ktsoder<project>/<app-module>/build.gradle) eine Abhängigkeit für die Screenshot-Bibliothek Test Lab hinzu.dependencies { // ... // Add Test Lab's instrumentation test screenshot library: androidTestImplementation("com.google.firebase:testlab-instr-lib:0.2") // ...
Registrieren Sie in der
AndroidManifest.xml-Datei Ihres Tests dieFirebaseScreenCaptureProcessorin einem Metadaten-Tag innerhalb des<instrumentation>-Elements. 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 im Element<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 du Tests unter Android 10 (API-Level 29) oder höher durchführst, lass die BerechtigungWRITE_EXTERNAL_STORAGEweg. Deine 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 erstellen
Wenn du an einer beliebigen Stelle im Test einen Screenshot erstellen möchtest, rufe die Methode Screenshot.capture() aus der AndroidX-Bibliothek auf. Dadurch wird ein ScreenCapture-Objekt erzeugt.
Wenn Sie process() für das Objekt ScreenCapture aufrufen, wird es mit dem ScreenCaptureProcessor verarbeitet, der in Ihrer AndroidManifest.xml registriert ist. Beachten Sie, dass der BasicScreenCaptureProcessor verwendet wird, wenn keine Prozessoren registriert sind.
Da Sie FirebaseScreenCaptureProcessor registriert haben, werden Ihre Screenshots über FirebaseScreenCaptureProcessor verarbeitet und stehen Ihnen zusammen mit den Ergebnissen zur Verfügung, wenn Sie den Test mit Firebase Test Lab ausführen.
Beispielhafte Anwendungsfälle für das Erstellen eines ScreenCapture:
Vollständiges ScreenCapture auf einem API Build.VERSION_CODES.JELLY_BEAN_MR2 und höher erstellen:
Screenshot.capture()Erstellen Sie einen
ScreenCaptureder Aktivität auf einer beliebigen API-Ebene. Dies ist die einzige Option für Geräte, die unter Build.VERSION_CODES.JELLY_BEAN_MR2 liegen.@Rule public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class); ... Screenshot.capture(activityRule.getActivity()); ...
Beispielanwendungsfälle für die Verarbeitung eines ScreenCapture
ScreenCaptureüber dieFirebaseScreenCaptureProcessorverarbeiten: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);Legen Sie den Namen und das Format der
ScreenCapturefest und verarbeiten Sie sie mit dem registrierten Prozessor:Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
Schritt 3: Test erstellen und ausführen
Erstellen Sie Ihre App und testen Sie APKs (Anleitung siehe App testen).
Rufen Sie in der Firebase Console DevOps & Engagement > Test Lab auf und laden Sie die APK-Dateien hoch.
Führen Sie abschließend den Test aus.
Schritt 4: Test-Screenshots ansehen
Nach Abschluss des Tests können Sie sich die aufgenommenen Screenshots ansehen:
Rufen Sie in der Firebase Console DevOps & Engagement > Test Lab auf.
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, der angezeigt wird.
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 aktuelle Version von Orchestrator.
Wenn Sie Orchestrator für Test Lab aktivieren möchten, klicken Sie in der Einrichtung des Instrumentierungstests auf Zusätzliche Optionen > Mit Orchestrator ausführen.
Die Verwendung von Orchestrator bietet folgende Vorteile:
- Kein gemeinsamer Status. Jeder Test wird in einer eigenen Instrumentierungsinstanz ausgeführt, sodass sich kein gemeinsamer Status über Tests hinweg ansammelt.
- Vereinzelte 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 daraus resultierenden längeren Laufzeiten können sich auf Ihre Kontingentnutzung oder die abgerechnete Zeit auswirken und dazu führen, dass die Zeitlimits Ihrer Geräte überschritten werden. Wenn Sie die Startzeit Ihrer App verkürzen, wird dieser Aufwand geringer.
Wenn Sie zusätzliche Optionen für Orchestrator festlegen möchten, geben Sie sie über das Feld environmentVariables an. Wenn Sie beispielsweise clearPackageData verwenden möchten, verwenden Sie diese Option in gcloud:
--environment-variables clearPackageData=true
Fragmentierung 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 alle Tests in kürzerer Zeit ab.
Wenn Sie beispielsweise N Shards erstellen, startet Test Lab für jedes ausgewählte Gerät N identische Geräte und führt auf jedem Gerät eine Teilmenge der Tests aus. Das bedeutet, dass fragmentierte Testläufe zu mehreren Testausführungen pro Gerät führen können. Nicht fragmentierte Testläufe führen jedoch zu einer Testausführung pro Gerät. Informationen zu Test Lab-Konzepten finden Sie unter Wichtige Konzepte.
So aktivieren Sie die Testfragmentierung in der Firebase-Konsole:
Klicken Sie unter Instrumentierungstest einrichten auf Zusätzliche Optionen.
Geben Sie im Abschnitt Fragmentierung die Anzahl der Shards ein, die Sie ausführen möchten.
Abrechnung für Test-Shards
Test Lab implementiert Ihre Shards mithilfe des integrierten Sharding-Mechanismus von AndroidJUnitRunner. Damit Ihnen keine leeren Shards (Shards ohne zugewiesene Testfälle) in Rechnung gestellt werden, sollte die Anzahl der erstellten Shards kleiner sein als die Gesamtzahl der Testfälle. Je nachdem, wie lange die Ausführung der einzelnen Testläufe dauert, ist es in der Regel sinnvoll, jedem Shard 2–10 Testläufe zuzuweisen.
Weitere Informationen zur Abrechnung finden Sie unter Nutzung, Kontingente und Abrechnung.