Erste Schritte mit Instrumentierungstests

In diesem Leitfaden wird beschrieben, wie Sie einen Instrumentierungstest mit Firebase Test Lab vorbereiten und ausführen. Für diese Anleitung benötigen Sie einen Instrumentationstest, der von Ihnen oder Ihrem Team geschrieben wurde und die Android-Testframeworks Espresso oder UI Automator verwendet. Instrumentationstests können auf physischen Geräten bis zu 45 Minuten und auf virtuellen Geräten bis zu 60 Minuten dauern.

Später laden Sie das APK Ihrer App und das APK Ihres Tests in Firebase hoch.

Optional: Screenshot-Mediathek 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 Ihr Instrumentierungstest ausgeführt wurde, können Sie sich die aufgenommenen Screenshots in der Firebase-Konsole ansehen.

Beispiel-App ausprobieren

Laden Sie die NotePad-Beispiel-App herunter, um diese Funktion auszuprobieren. Die Möglichkeit, Screenshots zu erstellen, ist bereits im NotePad-Projekt enthalten.

Schritt 1: Screenshot-Bibliothek zum Projekt hinzufügen

  1. Fügen Sie in der Gradle-Datei Einstellungen auf Stammebene Ihres Testprojekts (settings.gradle.kts oder settings.gradle) das Maven-Repository von Google in jeden repositories-Abschnitt ein:

    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()
        }
    }
    // ...
  2. Fügen Sie in der Gradle-Datei Ihres Moduls (auf App-Ebene) (in der Regel <project>/<app-module>/build.gradle.kts oder <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")
      // ...
  3. Registrieren Sie in der AndroidManifest.xml-Datei Ihres Tests die FirebaseScreenCaptureProcessor in einem Metadatentag 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>
    ...
    
  4. Fügen Sie in der Datei AndroidManifest.xml Ihrer App die folgenden Zeilen in das <manifest>-Element ein:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. Geben Sie in der Datei AndroidManifest.xml Systemberechtigungen für Ihre App an, indem Sie die folgenden Zeilen innerhalb des <manifest>-Tags hinzufügen. Wenn Sie auf Android 10 (API-Level 29) oder höher testen, lassen Sie die Berechtigung WRITE_EXTERNAL_STORAGE 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 erstellen

Rufen Sie an einer beliebigen Stelle in Ihrem Test, an der Sie einen Screenshot erstellen 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, der in Ihrem AndroidManifest.xml registriert ist. BasicScreenCaptureProcessor wird verwendet, wenn keine Prozessoren registriert sind. Da Sie die FirebaseScreenCaptureProcessor registriert haben, werden Ihre Screenshots über FirebaseScreenCaptureProcessor verarbeitet und sind zusammen mit Ihren Ergebnissen verfügbar, wenn Sie Ihren Test mit Firebase Test Lab ausführen.

Beispiele für Anwendungsfälle zum Erstellen eines ScreenCapture:

  • Vollbild-ScreenCapture auf einem API-Build mit Build.VERSION_CODES.JELLY_BEAN_MR2 und höher erstellen:

    Screenshot.capture()
    
  • ScreenCapture der Aktivität auf jeder API-Ebene erstellen. Hinweis: 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());
    ...
    

Beispiele für Anwendungsfälle für die Verarbeitung eines Screenshots

  • So bearbeiten Sie eine ScreenCapture über die FirebaseScreenCaptureProcessor:

    Screenshot.capture().process();
    
  • Verarbeiten Sie eine ScreenCapture über einen angegebenen ScreenCaptureProcessor (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 von ScreenCapture fest und verarbeiten Sie die Datei mit dem registrierten Prozessor:

    Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
    

Schritt 3: Test erstellen und ausführen

  1. Erstellen Sie Ihre App und testen Sie APKs (eine Anleitung finden Sie unter App testen).

  2. Laden Sie die APK-Dateien in das Dashboard Test Lab der Firebase-Konsole hoch.

  3. Führen Sie nun den Test aus.

Schritt 4: Test-Screenshots ansehen

Nach Abschluss des Tests können Sie sich alle erstellten Screenshots in der Firebase-Konsole ansehen.

  1. Wählen Sie auf dem Tab Tests den abgeschlossenen Test aus und klicken Sie dann auf den Tab Ergebnisse.

  2. 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 aktuelle Version von Orchestrator.

Wenn Sie Orchestrator für Test Lab aktivieren möchten, klicken Sie bei der Einrichtung von Instrumentierungstests auf Zusätzliche Optionen > Mit Orchestrator ausführen.

Wenn Sie Orchestrator verwenden, profitieren Sie von den folgenden Vorteilen:

  • Kein gemeinsamer Status. Jeder Test wird in einer eigenen Instrumentation-Instanz ausgeführt, sodass sich kein gemeinsamer Status über mehrere Tests hinweg ansammelt.
  • Vereinzelte Abstürze. Wenn ein Test abstürzt, wird nur diese Instrumentation beendet. Andere Tests in Ihrer Suite können weiterhin ausgeführt werden.

Wenn Sie Orchestrator verwenden, wird für jeden Test eine eigene Instrumentation-Instanz 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 abgerechnete Zeit auswirken und dazu führen, dass Sie die Zeitüberschreitungslimits Ihrer Geräte überschreiten. Wenn Sie die Startzeit Ihrer App verkürzen, wird dieser Overhead reduziert.

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, nutzen Sie diese Option in gcloud:

--environment-variables clearPackageData=true

Sharding aktivieren

Beim Test-Sharding wird eine Reihe von Tests in Untergruppen (Shards) unterteilt, die separat und isoliert ausgeführt werden. Mit Test Lab wird jeder Shard automatisch parallel auf mehreren Geräten ausgeführt. So kann der gesamte Testsatz in kürzerer Zeit abgeschlossen werden.

Wenn Sie beispielsweise N Shards erstellen, werden für jedes ausgewählte Gerät N identische Geräte gestartet und auf jedem Gerät wird eine Teilmenge der Tests ausgeführt.Test Lab Das bedeutet, dass durch Sharding von Testläufen mehrere Testausführungen pro Gerät möglich sind. Nicht aufgeteilte 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 das Test-Sharding in der Firebase-Konsole:

  1. Klicken Sie unter Einrichtung von Instrumentierungstests auf Weitere Optionen.

  2. Geben Sie im Bereich Sharding 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 Testläufe) in Rechnung gestellt werden, sollte die Anzahl der erstellten Shards geringer sein als die Gesamtzahl der Testläufe. Je nachdem, wie lange die Ausführung der einzelnen Testläufe dauert, ist es in der Regel sinnvoll, jedem Shard 2 bis 10 Testläufe zuzuweisen.

Weitere Informationen zur Abrechnung finden Sie unter Nutzung, Kontingente und Abrechnung.