Erste Schritte mit Instrumentierungstests

In diesem Leitfaden wird beschrieben, wie Sie einen Instrumentierungstest mit Firebase Test Lab Zur Verwendung dieses Leitfadens benötigen Sie einen Instrumentierungstest die von Ihnen oder Ihrem Team verfasst wurden, Espresso oder UI Automator Android-Test-Frameworks Instrumentierungstests können auf physischen Geräten bis zu 45 Minuten und auf virtuellen Geräten bis zu 60 Minuten dauern.

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

Optional: Screenshot-Bibliothek zu Ihrer 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 ScreenCapture-Objekte mit AndroidX erstellt werden. und wie sie mit testlab-instr-lib verarbeitet werden.

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

Beispiel-App ausprobieren

Laden Sie die NotePad-Beispiel-App herunter. um diese Funktion auszuprobieren. Die Möglichkeit, Screenshots aufzunehmen, ist bereits in das Notepad-Projekt eingebunden.

Schritt 1: Screenshotbibliothek zum Projekt hinzufügen

  1. In der Gradle-Datei Ihres Testprojekts unter Einstellungen auf Stammebene (settings.gradle.kts oder settings.gradle) Maven-Repository von Google hinzufügen für jeden repositories-Abschnitt:

    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. In der Gradle-Datei des Moduls (auf App-Ebene) (in der Regel <project>/<app-module>/build.gradle.kts oder <project>/<app-module>/build.gradle), fügen Sie eine Abhängigkeit für die Screenshot-Mediathek von Test Lab.

    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 den FirebaseScreenCaptureProcessor in einem Metadaten-Tag innerhalb der <instrumentation>-Element. Sie können den Prozessor auch als -Argument in AndroidJUnitRunner (siehe die 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 im <manifest>-Element:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. Gib in der Datei AndroidManifest.xml die Systemberechtigungen für deine App an indem Sie die folgenden Zeilen in das <manifest>-Tag einfügen. Wenn Sie einen Test Android 10 (API-Level 29) oder höher verwenden, lassen Sie WRITE_EXTERNAL_STORAGE weg. (Deine App benötigt diese Berechtigung nicht, um Daten Screenshots auf dem Gerät 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 Sie einen Screenshot erstellen möchten, rufen Sie während des Tests die Methode Screenshot.capture() aus der AndroidX-Bibliothek. Dies erzeugt eine ScreenCapture-Objekt. Wenn Sie process() für das ScreenCapture-Objekt aufrufen, wird es verarbeitet. mithilfe des ScreenCaptureProcessor das in Ihrem AndroidManifest.xml registriert ist. Hinweis: BasicScreenCaptureProcessor wird verwendet, wenn keine Zahlungsabwickler registriert sind. Da du FirebaseScreenCaptureProcessor registriert hast, werden deine Screenshots werden über FirebaseScreenCaptureProcessor verarbeitet und sind mit den Ergebnissen, wenn Sie den Test mit Firebase Test Lab durchführen.

Beispielanwendungsfälle zum Erstellen eines ScreenCapture:

  • Machen Sie eine vollständige Bildschirmaufnahme mit einem API Build.VERSION_CODES.JELLY_BEAN_MR2 und oben:

    Screenshot.capture()
    
  • Führe ein ScreenCapture der Aktivität auf einer beliebigen API-Ebene durch. Beachten Sie, dass dies Option nur für Geräte unter Build.VERSION_CODES.JELLY_BEAN_MR2.

    @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 Dadurch 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 ihn mit dem registrierter Auftragsverarbeiter:

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

Schritt 3: Test erstellen und ausführen

  1. Erstellen Sie Ihre App und testen Sie APKs (siehe App testen .

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

  3. Führen Sie zum Schluss den Test durch.

Schritt 4: Test-Screenshots ansehen

Nach Abschluss des Tests können Sie sich alle Screenshots ansehen, die Sie in der Firebase-Konsole aufgenommen haben.

  1. Wählen Sie auf dem Tab Tests Ihren abgeschlossenen Test aus. 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:

Orchestrator aktivieren

Android Test Orchestrator ist ein Tool, das jeden der Instrumentierungstests Ihrer App unabhängig ausführt. Test Lab verwendet immer die neueste Version von Orchestrator.

Zum Aktivieren von Orchestrator für Test Lab im Instrumentierungstest einrichten Klicken Sie 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 die Tests hinweg ansammelt.
  • Isolierte Abstürze: Wenn ein Test abstürzt, die Instrumentierung beendet wird und andere Tests in Ihrer Suite noch ausgeführt werden können.

Wenn Sie Orchestrator verwenden, wird jeder Test für sich ausgeführt Instrumentierungsinstanz, was bedeutet, dass der Anwendungsprozess nach dem Testlauf durchgeführt. Die sich daraus ergebende längere Laufzeit kann sich die Kontingentnutzung oder die abgerechnete Zeit dazu führen, dass Sie die Zeitlimits. Wenn Sie die Startzeit Ihrer App verkürzen, wird dieser Overhead verkürzt.

Wenn Sie zusätzliche Optionen für Orchestrator festlegen möchten, geben Sie diese mithilfe von an: Feld environmentVariables. Wenn Sie z. B. clearPackageData verwenden möchten, verwenden Sie Folgendes: Option in gcloud:

--environment-variables clearPackageData=true

Fragmentierung aktivieren

Bei der Testfragmentierung wird ein Satz von Tests in Untergruppen (Shards) unterteilt, die ausgeführt werden isoliert voneinander isoliert betrachtet werden. Test Lab führt jeden Shard automatisch parallel aus mit mehreren Geräten 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 fragmentierte Testläufe zu mehreren Testausführungen pro Gerät führen können. Nicht fragmentierte Testfälle führen jedoch zu einer Testausführung pro . Konzepte zu Test Lab finden Sie unter Schlüsselkonzepte:

So aktivieren Sie die Testfragmentierung in der Firebase-Konsole:

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

  2. 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 der integrierten API von AndroidJUnitRunner Fragmentierungsmechanismus. Um zu vermeiden, dass Ihnen das Hochfahren leerer Shards (Shards ohne zugewiesene Shards) in Rechnung gestellt wird Testläufe), die Anzahl der Shards, „create“ sollte kleiner sein als die Gesamtzahl der Testläufe. Je nachdem, wie jeden Testlauf dauert, sollten Sie 2 bis 10 Tests zuweisen, Fälle pro Shard.

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