Mit der gcloud CLI testen

In diesem Leitfaden wird beschrieben, wie Sie einen Instrumentierungs-, Robo- oder Spielschleifentest mit der gcloud CLI ausführen.

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

Hinweis

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

Schritt 1: Die gcloud CLI einrichten

  1. Google Cloud SDK herunterladen
  2. Dazu gehört auch das gcloud CLI-Tool.

  3. Prüfen Sie, ob Ihre Installation auf dem neuesten Stand ist:
    gcloud components update
    
  4. Melden Sie sich mit Ihrem Google-Konto in 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: Verfügbare Testgeräte prüfen

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

Optional können Sie auch die Notepad-Beispiel-App herunterladen, um die Befehle sofort auszuführen. Verwenden Sie die Binärdatei app-debug-unaligned.apk und die Datei für Instrumentierungstests app-debug-test-unaligned.apk, die sich in NotePad/app/build/outputs/apk/ befinden.

  • models list: Ruft eine aktuelle Liste der Android-Geräte ab, die für Tests verfügbar sind.

    gcloud firebase test android models list

    In der Befehlsausgabe:

    • Die Spalte MODEL_ID enthält die Kennung, mit der Sie später Tests für das Gerätemodell ausführen 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: Weitere Informationen zu einem bestimmten Android-MODEL_ID abrufen.

    gcloud firebase test android models describe MODEL_ID

    Die Ausgabe enthält die Marke, den Hersteller, die Betriebssystemversionen, die unterstützten API-Ebenen, die unterstützten Binärschnittstellen (Application Binary Interfaces, ABI), die Veröffentlichungsdaten und die Information, ob es sich um ein physisches oder virtuelles Gerät handelt.

  • versions list: Ruft eine Liste der derzeit verfügbaren Betriebssystemversionen ab, mit denen Sie testen können.

    gcloud firebase test android versions list

    Sie können eine Kennung 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 Android-Betriebssystemversionen, mit denen getestet werden soll, nicht angeben, wird die Standardversion verwendet, die in der Spalte TAGS angegeben ist.

    Beispielausgabe

    gcloud android versions list

  • locales list: Ruft die aktuelle Liste der verfügbaren Sprachen ab, die für Tests verwendet werden können.

    gcloud firebase test android locales list

    Die erste Spalte der Befehlsausgabe, LOCALE, enthält die Kennung, mit der Sie später Tests für eine Sprache ausführen können. Wenn Sie die zu testenden Sprachen nicht angeben, wird Englisch als Standardsprache verwendet.

Schritt 3: Test ausführen

Nachdem Sie nun die Palette der Gerätemodelle, Sprachen und Betriebssystemversionen kennen, die zum Testen Ihrer App verfügbar sind, können Sie Geräte mit dem Befehl gcloud firebase test android run und dem Flag --device angeben, um Robo- oder Instrumentierungstests auszuführen.

Robo-Test ausführen

Auch wenn Sie keine Instrumentierungstests haben, können Sie 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 führt eine statische Analyse der verschiedenen Pfade durch die Benutzeroberfläche der App durch und crawlt dann die App, um Abstürze und andere potenzielle Probleme zu finden.

Führen Sie den folgenden Beispielbefehl aus, um einen Robo-Test auszuführen:

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 Parameter --type robo ist implizit, wenn kein --type-Wert angegeben ist.
  • Mit dem optionalen Flag --client-details matrixLabel="Example matrix label" können Sie Ihre Testmatrix mit einem Label versehen, um sie in der Firebase Console leichter zu finden.
  • Sie können sich alle Befehlszeilenoptionen zum Ausführen von Tests anzeigen lassen, 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.

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

Instrumentierungstest ausführen

Verwenden Sie jetzt das gcloud-Befehlszeilentool, um die Espresso-Tests der Notepad-App auf den angegebenen Android-Gerätekonfigurationen auszuführen. Verwenden Sie den Testtyp instrumentation, um die Tests in app-debug-test-unaligned.apk so 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 ein Test-APK mit --test angegeben wird.
  • Mithilfe des optionalen Flags --client-details matrixLabel="Example matrix label" können Sie Ihre Testmatrix mit einem Label versehen, um sie in der Firebase Console leichter zu identifizieren und zu finden.
  • Sie können sich alle Befehlszeilenoptionen zum Ausführen von Tests ansehen, 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 den Android Test Orchestrator. Orchestrator erfordert AndroidJUnitRunner v1.1 oder höher. Verwenden Sie zum Aktivieren gcloud firebase test android run mit dem Flag
--use-orchestrator. Verwenden Sie das Flag --no-use-orchestrator, um es zu deaktivieren.

Sie können auch steuern, wie Test Lab Ihre Instrumentierungstests ausführt, indem Sie zusätzliche Flags verwenden, die oben nicht aufgeführt sind. Mit dem Flag --test-targets können Sie beispielsweise eine einzelne Klasse oder eine Klassenmethode testen, die von Ihrer Test-APK verwendet wird. Mit dem Flag --num-flaky-test-attempts können Sie auch herausfinden, ob der fehlgeschlagene Test tatsächlich instabil war oder nicht. Mit diesem Flag wird angegeben, wie oft eine Testausführung wiederholt werden soll, wenn einer oder mehrere der Testfälle aus irgendeinem Grund fehlschlagen. Weitere Informationen finden Sie unter gcloud firebase test android run.

Berichte zur Codeabdeckung für Instrumentierungstests

Test Lab unterstützt die Tools EMMA und JaCoCo für die Berichterstellung zur Codeabdeckung. Wenn Sie eines der beiden Tools in den Build für Ihre App eingebunden haben, können Sie einen Bericht zur Codeabdeckung für Test Lab-Tests abrufen, 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 Berichte zur Codeabdeckung generieren und gleichzeitig Android Test Orchestrator verwenden, ändern Sie Ihre Umgebungsvariablen so:

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 Tests abgeschlossen hat, finden Sie die Berichte zur Codeabdeckung in Google Cloud Storage:

  1. Öffnen Sie den Firebase-Konsolenlink, den das gcloud-Tool über der Testergebnistabelle in Ihrem Terminal ausgegeben 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 den Bucket Cloud Storage mit den Testergebnissen dieser Ausführung aufzurufen.
  4. Öffnen Sie artifacts/coverage.ec, um den Bericht zur Codeabdeckung aufzurufen.

Testergebnisse analysieren

Nach einigen Minuten wird vom gcloud-Tool eine einfache Zusammenfassung Ihrer Testergebnisse ausgegeben:

Testergebnisse für Befehle

Die Ausgabe des Befehlszeilentestlaufs enthält auch einen Link zum Aufrufen der Testergebnisse. Weitere Informationen zur Interpretation dieser Ergebnisse finden Sie unter Firebase Test Lab für Android-Ergebnisse analysieren.

Benutzerdefinierte Anmeldung und Texteingabe mit Robo-Test

Der Robo-Test füllt automatisch Anmeldebildschirme aus, die ein Google-Konto zur Authentifizierung verwenden, es sei denn, Sie verwenden den Parameter --no-auto-google-login. Er kann auch benutzerdefinierte Anmeldebildschirme mit den von Ihnen angegebenen Anmeldedaten für Testkonten ausfüllen. Sie können diesen Parameter auch verwenden, um benutzerdefinierten Eingabetext für andere Textfelder bereitzustellen, die von Ihrer Anwendung verwendet werden.

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

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

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

Verfügbare Befehle und Flags

In der Test Lab gcloud CLI sind mehrere Befehle und Flags verfügbar, 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 Test Ihrer App in einem eigenen Aufruf von Instrumentation ausführen können. Test Lab führt immer die aktuelle Version von Orchestrator aus.

  • Test-Flags für Spielschleifen: Eine Reihe von Konfigurations-Flags, die einen „Demomodus“ aktivieren und steuern, um Spieleraktionen in Gaming-Apps zu simulieren. Weitere Informationen zum Ausführen von Spielschleifentests mit Test Lab

  • Flag für einheitliches Sharding (Beta): Ein Flag, das die Anzahl der Shards angibt, auf die Testfälle gleichmäßig verteilt werden sollen. Die Shards werden parallel auf separaten Geräten ausgeführt.

  • Flag für manuelles Sharding (Beta): 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 Netzwerk-Traffic-Profile (Beta): 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.

gcloud-Befehle mit Test Lab in Skripts verwenden

Sie können Shell-Skripts oder Batchdateien verwenden, um Befehle für Tests mobiler Apps zu automatisieren, die Sie sonst über die gcloud-Befehlszeile ausführen würden. Im folgenden Bash-Beispielskript wird ein Instrumentierungstest mit einem Zeitlimit von zwei Minuten ausgeführt und es wird gemeldet, 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

Script-Exit-Codes

Test Lab bietet mehrere Exit-Codes, mit denen Sie die Ergebnisse von Tests, die Sie mit Skripts oder Batchdateien ausführen, besser nachvollziehen können.

Skript-Exit-Codes für Test Lab

Exit-Code Hinweise
0 Alle Testausführungen erfolgreich.
1 Ein allgemeiner Fehler ist 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 Mindestens ein Testlauf (getestete Klassen oder Klassenmethoden) innerhalb einer Testausführung ist fehlgeschlagen.
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 das ausgewählte Android API-Level vom ausgewählten Gerätetyp nicht unterstützt wird.
19 Die Testmatrix wurde vom Nutzer abgebrochen.
20 Es ist ein Fehler in der Testinfrastruktur aufgetreten.