Beginnen Sie mit dem Testen mit der gcloud-CLI

In dieser Anleitung wird beschrieben, wie Sie einen Instrumentierungs-, Robo- oder Game-Loop-Test mit der gcloud-CLI ausführen.

Eine vollständige Liste der gcloud Befehle, die Sie mit Ihrer Android-App im Testlabor verwenden können, finden Sie in der Referenzdokumentation für gcloud firebase test android .

Bevor Sie beginnen

Falls noch nicht geschehen, fügen Sie Firebase zu Ihrem Android-Projekt hinzu .

Schritt 1: Richten Sie die gcloud-CLI ein

  1. Laden Sie das Google Cloud SDK herunter
  2. Dazu gehört das gcloud CLI-Tool.

  3. Stellen Sie sicher, dass Ihre Installation auf dem neuesten Stand ist:
    gcloud components update
    
  4. Melden Sie sich mit Ihrem Google-Konto bei der gcloud-CLI an:
    gcloud auth login
    
  5. Legen Sie Ihr Firebase-Projekt in gcloud fest, wobei PROJECT_ID die ID Ihres Firebase-Projekts ist:
    gcloud config set project PROJECT_ID
    

Schritt 2. Überprüfen Sie die verfügbaren Testgeräte

Verwenden Sie die folgenden gcloud-Befehle, um Testgeräte und Gebietsschemas anzuzeigen, die für Ihren Test verfügbar sind.

Optional können Sie auch die Beispiel- Notepad-App herunterladen, um sofort mit der Ausführung der Befehle zu beginnen. Verwenden Sie die Binärdatei app-debug-unaligned.apk und die Instrumentierungstestdatei app-debug-test-unaligned.apk , die sich in NotePad/app/build/outputs/apk/ befinden.

  • models list : Erhalten Sie eine aktuelle Liste der verfügbaren Android-Geräte, mit denen Sie testen können.

    gcloud firebase test android models list
    

    In der Befehlsausgabe:

    • Die Spalte MODEL_ID enthält die Kennung, die Sie später zum Ausführen von Tests für das Gerätemodell verwenden können.
    • Die Spalte OS_VERSION_ID enthält die vom Gerät unterstützten Betriebssystemversionen.

    Beispielausgabe

    gcloud firebase test android models list output

  • models describe : Erhalten Sie weitere Informationen zu einer bestimmten Android- MODEL_ID .

    gcloud firebase test android models describe MODEL_ID
    

    Die Ausgabe enthält die Marke des Gerätemodells, den Hersteller, Betriebssystemversionen, unterstützte API-Ebenen, unterstützte Application Binary Interfaces (ABI), Veröffentlichungsdaten und ob das Gerät physisch oder virtuell ist.

  • versions list : Rufen Sie eine Liste der aktuell verfügbaren Betriebssystemversionen zum Testen ab.

    gcloud firebase test android versions list
    

    Sie können einen Bezeichner aus einer der ersten beiden Spalten der Befehlsausgabe ( OS_VERSION_ID und VERSION ) verwenden, um später Tests für eine Android-Betriebssystemversion auszuführen. Wenn Sie die zu testenden Android-Betriebssystemversionen nicht angeben, wird der in der Spalte TAGS angegebene Standard verwendet.

    Beispielausgabe

    gcloud android versions list

  • locales list : Rufen Sie die aktuelle Liste der zum Testen verfügbaren Gebietsschemas ab.

    gcloud firebase test android versions list
    

    Die erste Spalte der Befehlsausgabe, LOCALE , enthält die Kennung, die Sie später zum Ausführen von Tests für ein Gebietsschema verwenden können. Wenn Sie die zu testenden Gebietsschemata nicht angeben, wird Englisch als Standardgebietsschema verwendet.

Schritt 3: Führen Sie Ihren Test durch

Da Sie nun wissen, welche Gerätemodelle, Gebietsschemas und Betriebssystemversionen zum Testen Ihrer App verfügbar sind, können Sie Geräte mit dem gcloud firebase test android run -Befehl und dem Flag --device angeben, um Robo- oder Instrumentierungstests auszuführen.

Führen Sie einen Robo-Test durch

Auch wenn Sie keine Instrumentierungstests haben, können Sie dennoch nach Fehlern in Ihrer App suchen. Verwenden Sie den Robo-Test, um eine automatisierte Überprüfung der Benutzeroberfläche Ihrer App durchzuführen. Der Robo-Test testet die App, indem er eine statische Analyse der verschiedenen Pfade durch die Benutzeroberfläche der App durchführt und anschließend die App durchsucht, um Abstürze und andere potenzielle Probleme zu finden.

Um einen Robo-Test auszuführen, führen Sie den folgenden Beispielbefehl aus:

gcloud firebase test android run \
  --type robo \
  --app app-debug-unaligned.apk \
  --device model=Nexus6,version=21,locale=en,orientation=portrait  \
  --device model=Nexus7,version=19,locale=fr,orientation=landscape \
  --timeout 90s \
  --client-details matrixLabel="Example matrix label"
  • Der --type robo ist implizit, wenn kein --type Wert angegeben ist.
  • Um Ihnen beim Identifizieren und Auffinden Ihrer Testmatrizen in der Firebase-Konsole zu helfen, können Sie das optionale Flag --client-details matrixLabel="Example matrix label" verwenden, um Ihre Testmatrix zu kennzeichnen.
  • Sie können den vollständigen Satz an Befehlszeilenoptionen zum Ausführen von Tests anzeigen, indem Sie Folgendes eingeben: gcloud help firebase test android run .

Alternativ zur Angabe dieser Argumente in der Befehlszeile können Sie Ihre Argumente optional in einer YAML-formatierten Argumentdatei angeben. Führen Sie gcloud topic arg-files aus, um zu erfahren, wie Sie diese Funktion verwenden.

Informationen zum Untersuchen der Testergebnisse des Robo-Tests finden Sie unter Analysieren Ihrer Testergebnisse .

Führen Sie einen Instrumentierungstest durch

Verwenden Sie nun das gcloud Befehlszeilentool, um die Espresso- Tests der Notepad-App auf Ihren angegebenen Android-Gerätekonfigurationen auszuführen. Verwenden Sie den instrumentation , um die Tests in app-debug-test-unaligned.apk wie folgt auszuführen:

gcloud firebase test android run \
  --type instrumentation \
  --app app-debug-unaligned.apk \
  --test app-debug-test-unaligned.apk \
  --device model=Nexus6,version=21,locale=en,orientation=portrait  \
  --device model=Nexus7,version=19,locale=fr,orientation=landscape
  --client-details matrixLabel="Example matrix label"
  • Der Instrumentierungsparameter --type ist implizit, wenn mit --test ein Test-APK angegeben wird.
  • Um Ihnen beim Identifizieren und Auffinden Ihrer Testmatrizen in der Firebase-Konsole zu helfen, können Sie das optionale Flag --client-details matrixLabel="Example matrix label" verwenden, um Ihre Testmatrix zu kennzeichnen.
  • Sie können den vollständigen Satz an Befehlszeilenoptionen zum Ausführen von Tests anzeigen, indem Sie gcloud help firebase test android run eingeben.

Alternativ zur Angabe dieser Argumente in der Befehlszeile können Sie Ihre Argumente optional in einer YAML-formatierten Argumentdatei angeben. Führen Sie gcloud topic arg-files aus, um zu erfahren, wie Sie diese Funktion verwenden.

Die gcloud-CLI unterstützt Android Test Orchestrator . Orchestrator erfordert AndroidJUnitRunner v1.1 oder höher. Um es zu aktivieren, verwenden Sie gcloud firebase test android run es mit dem aus
--use-orchestrator Flag. Um es zu deaktivieren, verwenden Sie das Flag --no-use-orchestrator .

Sie können auch steuern, wie Test Lab Ihre Instrumentierungstests durchführt, indem Sie zusätzliche Flags verwenden, die oben nicht angezeigt werden. Sie können beispielsweise das Flag --test-targets verwenden, um eine einzelne Klasse oder eine Klassenmethode zu testen, die von Ihrem Test-APK verwendet wird. Sie können auch herausfinden, ob Ihr fehlgeschlagener Test tatsächlich fehlerhaft war oder nicht, indem Sie das Flag --num-flaky-test-attempts verwenden, das angibt, wie oft eine Testausführung erneut versucht werden soll, wenn einer oder mehrere seiner Testfälle vorliegen aus irgendeinem Grund scheitern. Weitere Informationen finden Sie unter gcloud firebase test android run .

Codeabdeckungsberichte für Instrumentierungstests

Test Lab unterstützt die Code-Coverage-Reporting-Tools EMMA und JaCoCo . Wenn Sie eines der beiden Tools in den Build für Ihre App integriert haben, können Sie einen Codeabdeckungsbericht für Testlabortests erhalten, indem Sie gcloud firebase test android run mit einigen zusätzlichen Argumenten ausführen. Wenn Android Test Orchestrator nicht aktiviert ist, verwenden Sie Folgendes:

gcloud firebase test android run \
  --type instrumentation \
  --app your-app.apk \
  --test your-app-test.apk \
  --device model=TestDevice,version=AndroidVersion  \
  --environment-variables coverage=true,coverageFile="/sdcard/Download/coverage.ec" \
  --directories-to-pull /sdcard/Download

Wenn Sie Codeabdeckungsberichte generieren und gleichzeitig Android Test Orchestrator verwenden, ändern Sie Ihre Umgebungsvariablen wie folgt:

gcloud firebase test android run \
  --type instrumentation \
  --app your-app.apk \
  --test your-app-test.apk \
  --device model=TestDevice,version=AndroidVersion  \
  --environment-variables clearPackageData=true,coverage=true,coverageFilePath="/sdcard/Download/" \
  --directories-to-pull /sdcard/Download

Wenn Test Lab die Ausführung Ihrer Tests abgeschlossen hat, finden Sie Ihre Codeabdeckungsberichte in Google Cloud Storage:

  1. Öffnen Sie den Firebase-Konsolenlink, den das gcloud Tool über der Testergebnistabelle in Ihrem Terminal gedruckt hat.
  2. Klicken Sie in der Liste unter diesem Link auf eine Testausführung, um die Detailseite dieser Ausführung zu öffnen.
  3. Klicken Sie auf Testergebnisse , um zum Cloud Storage-Bucket mit den Testergebnissen dieser Ausführung zu gelangen.
  4. Öffnen Sie artifacts/coverage.ec , um Ihren Code-Coverage-Bericht anzuzeigen.

Analysieren Sie Ihre Testergebnisse

Nach ein paar Minuten wird vom gcloud-Tool eine grundlegende Zusammenfassung Ihrer Testergebnisse gedruckt:

Command test results

Die Ausgabe Ihres Befehlszeilentestlaufs enthält auch einen Link zum Anzeigen der Testergebnisse. Weitere Informationen zur Interpretation dieser Ergebnisse finden Sie unter Analysieren der Ergebnisse des Firebase-Testlabors für Android .

Benutzerdefinierte Anmeldung und Texteingabe mit Robo-Test

Der Robo-Test vervollständigt automatisch Anmeldebildschirme, die ein Google-Konto zur Authentifizierung verwenden, es sei denn, Sie verwenden den Parameter --no-auto-google-login . Es kann auch benutzerdefinierte Anmeldebildschirme mithilfe der von Ihnen bereitgestellten Testkonto-Anmeldeinformationen ausfüllen. Sie können diesen Parameter auch verwenden, um benutzerdefinierten Eingabetext für andere von Ihrer App verwendete Textfelder bereitzustellen.

Um Textfelder in Ihrer App zu vervollständigen, verwenden Sie den Parameter --robo-directives und stellen Sie eine durch Kommas getrennte Liste von key-value Paaren bereit, wobei der key der Android-Ressourcenname des Ziel-UI-Elements und der value die Textzeichenfolge ist . Sie können dieses Flag auch verwenden, um Robo anzuweisen, bestimmte UI-Elemente (z. B. die Schaltfläche „Abmelden“) zu ignorieren. EditText Felder werden unterstützt, jedoch keine Textfelder in WebView UI-Elementen.

Sie könnten beispielsweise den folgenden Parameter für die benutzerdefinierte Anmeldung verwenden:

--robo-directives username_resource=username,password_resource=password

Verfügbare Befehle und Flags

Die gcloud-CLI des Testlabors verfügt über mehrere Befehle und Flags, mit denen Sie Tests mit unterschiedlichen Spezifikationen ausführen können:

  • Android Test Orchestrator-Flag : Ein Flag zum Aktivieren von Orchestrator, einem Tool, mit dem Sie jeden Ihrer App-Tests in einem eigenen Aufruf von Instrumentation ausführen können. Test Lab führt immer die neueste Version von Orchestrator aus.

  • Game Loop-Testflags : Eine Reihe von Konfigurationsflags, die einen „Demomodus“ aktivieren und steuern, um Spieleraktionen in Spiele-Apps zu simulieren. Erfahren Sie mehr über die Durchführung von Game Loop-Tests mit Test Lab .

  • Uniform-Sharding-Flag (in der Betaversion) : Ein Flag, das die Anzahl der Shards angibt, auf die Sie Testfälle gleichmäßig verteilen möchten. Die Shards werden parallel auf separaten Geräten ausgeführt.

  • Manuelles Sharding-Flag (in der Betaversion) : Ein Flag, das eine Gruppe von Paketen, Klassen und/oder Testfällen angibt, die in einem Shard (einer Gruppe von Testfällen) ausgeführt werden sollen. Die Shards werden parallel auf separaten Geräten ausgeführt.

  • Flag für Netzwerkverkehrsprofile (in der Betaversion) : Ein Flag, das angibt, welches Netzwerkprofil Ihre Tests mit physischen Geräten verwenden. Netzwerkprofile emulieren verschiedene Netzwerkbedingungen, sodass Sie die Leistung Ihrer App in unzuverlässigen oder unvorhersehbaren Netzwerken testen können.

Skripterstellung für gcloud-Befehle mit Test Lab

Sie können Shell-Skripte oder Batchdateien verwenden, um Testbefehle für mobile Apps zu automatisieren, die Sie sonst über die gcloud-Befehlszeile ausführen würden. Das folgende Bash-Beispielskript führt einen Instrumentierungstest mit einer Zeitüberschreitung von zwei Minuten aus und meldet, ob der Testlauf erfolgreich abgeschlossen wurde:

if gcloud firebase test android run --app my-app.apk --test my-test.apk --timeout 2m
then
    echo "Test matrix successfully finished"
else
    echo "Test matrix exited abnormally with non-zero exit code: " $?
fi

Skript-Exit-Codes

Test Lab bietet mehrere Exit-Codes, die Sie verwenden können, um die Ergebnisse von Tests, die Sie mithilfe von Skripts oder Batchdateien ausführen, besser zu verstehen.

Skripterstellung von Exit-Codes für Test Lab

Exit-Code Anmerkungen
0 Alle Testdurchführungen bestanden.
1 Es ist ein allgemeiner Fehler aufgetreten. Mögliche Ursachen sind: ein nicht vorhandener Dateiname oder ein HTTP-/Netzwerkfehler.
2 Der Test wurde beendet, weil unbekannte Befehle oder Argumente angegeben wurden.
10 Einer oder mehrere Testfälle (getestete Klassen oder Klassenmethoden) innerhalb einer Testausführung wurden nicht bestanden.
15 Firebase Test Lab konnte aufgrund eines unerwarteten Fehlers nicht feststellen, ob die Testmatrix bestanden wurde oder nicht.
18 Die Testumgebung für diese Testausführung wird aufgrund inkompatibler Testdimensionen nicht unterstützt. Dieser Fehler kann auftreten, wenn die ausgewählte Android-API-Ebene vom ausgewählten Gerätetyp nicht unterstützt wird.
19 Die Testmatrix wurde vom Benutzer abgebrochen.
20 Es ist ein Fehler in der Testinfrastruktur aufgetreten.