Erste Schritte mit Instrumentierungstests

In diesem Leitfaden wird beschrieben, wie Sie einen Instrumentierungstest mit Firebase Test Lab vorbereiten und ausführen. Wenn Sie diese Anleitung verwenden möchten, 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-Mediathek zur App hinzufügen

Firebase Test Lab enthält eine Bibliothek (testlab-instr-lib), mit der Sie 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 der testlab-instr-lib verarbeiten.

Nachdem der Instrumentierungstest ausgeführt wurde, können Sie sich die aufgenommenen Screenshots in der Firebase Console ansehen.

Beispiel-App ausprobieren

Laden Sie die NotePad-Beispiel-App herunter, um diese Funktion auszuprobieren. Das Erstellen von Screenshots ist bereits im NotePad-Projekt integriert.

Schritt 1: Screenshot-Bibliothek zum Projekt hinzufügen

  1. Fügen Sie in der Gradle-Datei auf Stammebene Ihres Testprojekts (settings.gradle.kts oder settings.gradle) jedem Abschnitt repositories 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()
        }
    }
    // ...
  2. Fügen Sie in der Gradle-Datei des 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 des Tests das FirebaseScreenCaptureProcessor in einem Metadaten-Tag innerhalb des <instrumentation>-Elements. Sie können den Prozessor stattdessen 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 Element <manifest> ein:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. Lege in der Datei AndroidManifest.xml die Systemberechtigungen für deine App fest, indem du dem <manifest>-Tag die folgenden Zeilen hinzufügst. Wenn Sie die App mit 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: Während des Tests Screenshots erstellen

An jeder Stelle im Test, an der Sie einen Screenshot erstellen möchten, können Sie die Methode Screenshot.capture() aus der AndroidX-Bibliothek aufrufen. Dadurch wird ein ScreenCapture-Objekt erstellt. Wenn Sie process() auf dem ScreenCapture-Objekt aufrufen, wird es mit dem ScreenCaptureProcessor verarbeitet, der in Ihrem AndroidManifest.xml registriert ist. Beachten Sie, dass BasicScreenCaptureProcessor verwendet wird, wenn keine Prozessoren registriert sind. Da du FirebaseScreenCaptureProcessor registriert hast, werden deine Screenshots über FirebaseScreenCaptureProcessor verarbeitet und stehen dir zusammen mit deinen Ergebnissen zur Verfügung, wenn du deinen Test mit Firebase Test Lab durchführst.

Anwendungsfälle für die Erstellung einer ScreenCapture:

  • Vollbild-Screenshots mit API Build.VERSION_CODES.JELLY_BEAN_MR2 und höher aufnehmen:

    Screenshot.capture()
    
  • Erfassen Sie eine ScreenCapture der Aktivität auf einer beliebigen API-Ebene. Beachten Sie, dass dies die einzige Option für Geräte ist, die niedriger als Build.VERSION_CODES.JELLY_BEAN_MR2 sind.

    @Rule
      public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class);
    ...
    Screenshot.capture(activityRule.getActivity());
    ...
    

Beispielanwendungsfälle für die Verarbeitung einer Bildschirmaufnahme

  • Verarbeite einen ScreenCapture über FirebaseScreenCaptureProcessor:

    Screenshot.capture().process();
    
  • ScreenCapture über eine angegebene ScreenCaptureProcessor verarbeiten (so können Sie die Registrierung des Auftragsverarbeiters überspringen):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • Legen Sie den Namen und das Format der ScreenCapture fest und verarbeiten Sie sie 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. Lade die APK-Dateien in das Test Lab-Dashboard der Firebase-Konsole hoch.

  3. Führen Sie abschließend den Test aus.

Schritt 4: Test-Screenshots ansehen

Nach Abschluss des Tests können Sie sich die in der Firebase-Konsole aufgenommenen Screenshots 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 die Instrumentierungstests Ihrer App unabhängig voneinander ausgeführt werden. Für Test Lab wird immer die aktuelle Version von Orchestrator verwendet.

Klicken Sie zum Aktivieren von Orchestrator für Test Lab 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 mehrere Tests hinweg ansammelt.
  • Vereinzelte Abstürze. Wenn ein Test abstürzt, wird nur die entsprechende Instrumentierung beendet. 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 Testfall neu gestartet wird. Die dadurch verlängerten Laufzeiten können sich auf Ihre Kontingentnutzung oder in Rechnung gestellte Zeit auswirken und dazu führen, dass Sie die Zeitlimits Ihrer Geräte überschreiten. Wenn Sie die Startzeit Ihrer Anwendung reduzieren, reduziert sich dieser Aufwand.

Wenn Sie zusätzliche Optionen für Orchestrator festlegen möchten, geben Sie diese über das Feld environmentVariables an. Um beispielsweise clearPackageData zu verwenden, nutzen Sie diese Option in gcloud:

--environment-variables clearPackageData=true

Sharding aktivieren

Beim Test-Sharding werden mehrere Tests in Untergruppen (Shards) unterteilt, die separat und isoliert ausgeführt werden. Test Lab führt jeden Shard automatisch parallel mit mehreren Geräten aus und führt den gesamten Testsatz in kürzerer Zeit durch.

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 einen Teil der Tests aus. Das bedeutet, dass bei ge shardeten Testfällen mehrere Testausführungen pro Gerät möglich sind. Bei nicht ge shardeten Testfällen wird jedoch eine Testausführung pro Gerät ausgeführt. Informationen zu Test Lab-Konzepten finden Sie unter Schlüsselkonzepte.

So aktivieren Sie das Test-Sharding in der Firebase-Konsole:

  1. Klicken Sie in der Einrichtung des Instrumentierungstests auf Weitere Optionen.

  2. 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 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 Testfälle dauert, ist es in der Regel empfehlenswert, 2 bis 10 Testfälle pro Shard zuzuweisen.

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