Catch up on everthing we announced at this year's Firebase Summit. Learn more

Erste Schritte mit Instrumentierungstests

In diesem Handbuch wird beschrieben, wie Sie einen Instrumentierungstest mit Firebase Test Lab vorbereiten und ausführen. Um dieses Handbuch zu verwenden, erhalten Sie einen benötigen Instrumentierung Test (geschrieben von Ihnen oder Ihrem Team), die verwendet Espresso oder UI Automator 2.0 Android Test - Frameworks. Instrumentation Tests können bis zu 45 Minuten auf physische Geräte und bis zu 60 Minuten auf laufen virtuelle Geräte .

In den folgenden Schritten laden Sie das APK Ihrer App und das APK Ihres Tests in Firebase hoch.

(Optional) Füge die Screenshot-Bibliothek zu deiner App hinzu

Firebase Test Lab umfasst eine Bibliothek (testlab-instr-lib) , dass Sie keine Screenshots bearbeiten können Sie mit AndroidX des nehmen Screen wenn Tests Instrumentierung ausgeführt wird , wie Tests geschrieben , um die Verwendung von Test - Framework Espresso . In diesem Abschnitt wird das Erstellen ScreenCapture Objekte mit der AndroidX Bibliothek und wie sie testlab-instr-lib mit verarbeiten.

Nachdem Ihr Instrumentierungstest ausgeführt wurde, können Sie die aufgenommenen Screenshots in der Firebase-Konsole anzeigen.

Probieren Sie eine Beispiel-App aus

Laden Sie die Notizbuch Beispielanwendung , um zu versuchen , diese Funktionalität aus. Die Möglichkeit, Screenshots zu erstellen, ist bereits in das NotePad-Projekt integriert.

Schritt 1. Fügen Sie die Screenshot-Bibliothek zu Ihrem Projekt hinzu

  1. In Ihrem Root-Level-Test - Projekt (Projektebene) Gradle Datei ( build.gradle ), in dem jeden Repositorys Abschnitt Googles Maven - Repository:

    buildscript {
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
      }
    
      dependencies {
        // ...
    
        // Check that you have the following line (if not, add it):
        classpath 'com.google.gms:google-services:4.3.8'  // Google Services plugin
      }
    }
    
    allprojects {
      // ...
    
      repositories {
        // Add the following line:
        google()  // Google's Maven repository
        // ...
      }
    }
  2. In Ihrem Modul (app-Ebene) Gradle Datei ( in der Regel app/build.gradle ), fügen Sie eine Abhängigkeit für die Bibliothek Screenshot Test Lab.

    dependencies {
      // ...
      // Add Test Lab's instrumentation test screenshot library:
      androidTestCompile `com.google.firebase:testlab-instr-lib:02`
      // ...
    }
  3. In Ihrem Test AndroidManifest.xml Datei, registriert die FirebaseScreenCaptureProcessor in einem Meta-Daten - Tag innerhalb des <instrumentation> Elements. Sie können auch den Prozessor als Argument in AndroidJUnitRunner angeben statt (die sehen AndroidJUnitRunner Referenzdokumentation für Anweisungen, wie).

    <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. AndroidManifest.xml Datei in Ihrer App, fügen Sie die folgenden Zeilen im <manifest> Element:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. In Ihrer AndroidManifest.xml Datei, geben Sie Systemberechtigungen für Ihre Anwendung , indem die folgenden Zeilen im <manifest> -Tag. Wenn Sie Tests auf 10 Android (API - Ebene 29) oder höher, lassen Sie die WRITE_EXTERNAL_STORAGE Erlaubnis (Ihre Anwendung erfordert nicht diese Berechtigung , um Lese- und Schreib Screenshots zum Gerät).

    <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. Machen Sie während Ihres Tests Screenshots

An jedem Punkt in Ihrem Test , in dem Sie einen Screenshot machen wollen, rufen Sie die Screenshot.capture() Methode aus der AndroidX Bibliothek. Dadurch entsteht ein ScreenCapture Objekt . Wenn Sie anrufen process() auf dem ScreenCapture Objekt, wird es verarbeitet , um die Verwendung von ScreenCaptureProcessor , die in Ihrem registriert ist AndroidManifest.xml . Beachten Sie, dass der BasicScreenCaptureProcessor verwendet wird , wenn keine Prozessoren registriert sind. Da Sie die registrierte FirebaseScreenCaptureProcessor , wird Ihre Screenshots über verarbeitete FirebaseScreenCaptureProcessor und wird für Sie mit Ihren Ergebnissen zur Verfügung, wenn Sie Ihren Test mit Firebase Test Lab laufen.

Beispiel Anwendungsfälle für die Schaffung eines ScreenCapture :

  • Machen Sie eine vollständige ScreenCapture auf einem API-Build.VERSION_CODES.JELLY_BEAN_MR2 und höher:

    Screenshot.capture()
    
  • Nehmen Sie einen ScreenCapture der Aktivität auf jeder API - Ebene. Beachten Sie, dass dies die einzige Option für Geräte unter Build.VERSION_CODES.JELLY_BEAN_MR2 ist.

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

Beispielanwendungsfälle für die Verarbeitung eines ScreenCapture

  • Verarbeiten eines ScreenCapture über die FirebaseScreenCaptureProcessor :

    Screenshot.capture().process();
    
  • Verarbeiten eines ScreenCapture über einen bestimmten ScreenCaptureProcessor (dies ermöglicht es Ihnen , die Registrierung der Prozessor zu überspringen):

    Set<ScreenCaptureProcessor> processors = new HashSet<>();
    processors.add(new FirebaseScreenCaptureProcessor());
    Screenshot.capture().process(processors);
    
  • Legen Sie den Namen und das Format des ScreenCapture und verarbeitet es den registrierten Prozessor:

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

Schritt 3. Erstellen Sie Ihren Test und führen Sie ihn aus

  1. Erstellen Sie Ihre App und Test APKs (siehe Testen Sie Ihre App für Anweisungen).

  2. Laden Sie die APK - Dateien in das Testlabor Armaturenbrett der Firebase - Konsole.

  3. Führen Sie abschließend Ihren Test durch.

Schritt 4. Sehen Sie sich Ihre Test-Screenshots an

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

  1. In der Registerkarte Tests Wählen Sie Ihre vollständigen Test, und klicken Sie auf die Registerkarte Ergebnisse.

  2. Wählen Sie ein Test erneut, dann klicken Sie auf die Registerkarte Screenshots , die 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 Werkzeug , das unabhängig voneinander bei jedem Ihrer App Instrumentierung Tests ausführt. Test Lab verwendet immer die neueste Version von Orchestrator.

So aktivieren Sie Orchestrator für Test Lab, in Instrumentation Test - Setup, klicken Sie auf Zusätzliche Optionen> Ausführen mit Orchestrator.

Vorteile und Nachteile

  • Vorteil: Kein gemeinsamer Status. Jeder Test wird in einer eigenen Instrumentierungsinstanz ausgeführt, sodass sich kein gemeinsamer Status über die Tests hinweg ansammelt.
  • Vorteil: 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.
  • Nachteil: Längere Laufzeiten. Jeder Test führt seine eigene Instrumentierungsinstanz aus, was bedeutet, dass der Testprozess insgesamt etwas länger dauert. Wenn nicht aktiviert ist , können die erhöhte Laufzeiten beeinflussen möglicherweise Ihre Kontingentnutzung oder berechneter Zeit und verursachen können Sie Ihre Geräte schlagen Time-out Grenzen .

Sharding aktivieren

Test-Sharding unterteilt eine Reihe von Tests in Untergruppen (Shards), die getrennt voneinander ausgeführt werden. Test Lab führt jeden Shard automatisch parallel auf mehreren Geräten aus und schließt den gesamten Testsatz in kürzerer Zeit ab.

So funktioniert Test-Sharding

Angenommen, Sie erstellen N Shards. Für jedes ausgewählte Gerät erstellt Test Lab N identische Geräte und führt eine Teilmenge der Tests auf jedem Gerät aus. Dies bedeutet , dass sharded Testfälle in mehreren Testausführungen pro Gerät führen können, im Gegensatz zu nicht-sharded Testfällen, die in einer Testausführung pro Gerät führen immer (für einen schnellen Überblick über die wichtigsten Konzepte in Test Lab, siehe Schlüsselkonzepte ).

Sie können das Test-Sharding in der Firebase-Konsole aktivieren:

  1. In Instrumentierung Testaufbau auf Weitere Optionen.

  2. Im Sharding Abschnitt geben Sie die Anzahl von Scherben Sie ausführen möchten.

Abrechnung für Test-Shards

Test Lab setzt Ihre Scherben durch den Einsatz von AndroidJUnitRunner eingebautem in sharding Mechanismus. Um zu vermeiden, dass Ihnen das Hochfahren leerer Shards (Shards ohne zugewiesene Testfälle) in Rechnung gestellt wird, sollte die Anzahl der von Ihnen erstellten Shards geringer sein als die Gesamtzahl der Testfälle. Je nachdem, wie lange die Ausführung jedes Testfalls dauert, ist es in der Regel eine gute Idee, 2-10 Testfälle pro Shard zuzuweisen.

Weitere Informationen zu Abrechnung, lesen Nutzungs, Quoten und Abrechnung .