Mit der gcloud CLI testen

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 in Test Lab verwenden können, finden Sie in der Referenzdokumentation für gcloud firebase test android.

Hinweis

Fügen Sie Ihrem Android-Projekt Firebase hinzu, falls noch nicht geschehen.

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. Dabei ist PROJECT_ID die ID Ihres Firebase-Projekts:
    gcloud config set project PROJECT_ID
    

Schritt 2: Verfügbare Testgeräte prüfen

Mit den folgenden gcloud-Befehlen können Sie Testgeräte und ‑sprachen aufrufen, die für Ihren Test verfügbar sind.

Alternativ 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 mit Instrumentierungstests app-debug-test-unaligned.apk, die sich in NotePad/app/build/outputs/apk/ befinden.

  • models list: Rufen Sie eine aktuelle Liste der Android-Geräte ab, die für Tests zur Verfügung stehen.

    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: 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-Levels, die unterstützten Application Binary Interfaces (ABIs), die Veröffentlichungsdaten und Informationen dazu, ob es sich um ein physisches oder virtuelles Gerät handelt.

  • versions list: Ruft eine Liste der derzeit verfügbaren Betriebssystemversionen ab, mit denen getestet werden kann.

    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, die getestet werden sollen, nicht angeben, wird der Standardwert verwendet, der in der Spalte TAGS angegeben ist.

    Beispielausgabe

    gcloud android versions list

  • locales list: Die aktuelle Liste der verfügbaren Gebietsschemas für Tests abrufen.

    gcloud firebase test android versions list

    Die erste Spalte der Befehlsausgabe, LOCALE, enthält die ID, die Sie später verwenden können, um Tests für ein Gebietsschema auszuführen. Wenn Sie keine zu testenden Sprachen angeben, wird Englisch als Standardsprache verwendet.

Schritt 3: Test ausführen

Nachdem Sie nun wissen, welche Gerätemodelle, Gebietsschemas und Betriebssystemversionen 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 trotzdem nach Fehlern in Ihrer App suchen. Verwenden Sie den Robo-Test, um eine automatisierte Überprüfung der Benutzeroberfläche Ihrer App durchzuführen. Beim Robo-Test wird die App durch eine statische Analyse der verschiedenen Pfade durch die Benutzeroberfläche der App getestet. Anschließend wird die App gecrawlt, 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.
  • Damit Sie Ihre Testmatrizen in der Firebase Console leichter identifizieren und finden können, können Sie sie mit dem optionalen Flag --client-details matrixLabel="Example matrix label" kennzeichnen.
  • Die vollständigen Befehlszeilenoptionen zum Ausführen von Tests können Sie mit dem Befehl gcloud help firebase test android run aufrufen.

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

Informationen zum Analysieren der Testergebnisse aus dem Robo-Test finden Sie unter Testergebnisse analysieren.

Instrumentierungstest ausführen

Führen Sie nun mit dem gcloud-Befehlszeilentool die Espresso-Tests der Notepad-App auf den angegebenen Android-Gerätekonfigurationen aus. 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.
  • Damit Sie Ihre Testmatrizen in der Firebase Console leichter identifizieren und finden können, können Sie das optionale Flag --client-details matrixLabel="Example matrix label" verwenden, um Ihre Testmatrix zu kennzeichnen.
  • Wenn Sie gcloud help firebase test android run eingeben, wird die vollständige Liste der Befehlszeilenoptionen für das Ausführen von Tests angezeigt.

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

Die gcloud CLI unterstützt Android Test Orchestrator. Orchestrator erfordert AndroidJUnitRunner v1.1 oder höher. Verwenden Sie dazu gcloud firebase test android run mit dem Flag
--use-orchestrator. Verwenden Sie das Flag --no-use-orchestrator, um die Funktion zu deaktivieren.

Sie können auch mit zusätzlichen Flags, die oben nicht aufgeführt sind, steuern, wie Test Lab Ihre Instrumentierungstests ausführt. Mit dem Flag --test-targets können Sie beispielsweise eine einzelne Klasse oder eine Klassenmethode testen, die von Ihrem Test-APK verwendet wird. Mit dem Flag --num-flaky-test-attempts können Sie auch herausfinden, ob Ihr fehlgeschlagener Test tatsächlich instabil war. Damit wird angegeben, wie oft ein Testlauf wiederholt werden soll, wenn einer oder mehrere der zugehörigen Testläufe 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 Berichte zur Codeabdeckung. Wenn Sie eines der beiden Tools in den Build für Ihre App eingebunden haben, können Sie einen Code-Coverage-Bericht für Test Lab-Tests erstellen, 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 Code-Coverage-Berichte erstellen 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 Konsolenlink Firebase, den das Tool gcloud in Ihrem Terminal über der Tabelle mit den Testergebnissen ausgegeben hat.
  2. Klicken Sie in der Liste auf einen Testlauf, um die Detailseite des jeweiligen Laufs 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 den Bericht zur Codeabdeckung aufzurufen.

Testergebnisse analysieren

Nach einigen Minuten wird vom gcloud-Tool eine grundlegende Zusammenfassung der Testergebnisse ausgegeben:

Ergebnisse des Befehlstests

Die Ausgabe Ihres 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

Beim Robo-Test werden Anmeldebildschirme, die ein Google-Konto zur Authentifizierung verwenden, automatisch ausgefüllt, sofern Sie nicht den Parameter --no-auto-google-login verwenden. Er kann auch benutzerdefinierte Anmeldebildschirme mit Anmeldedaten für Testkonten ausfüllen, die Sie bereitstellen. Sie können diesen Parameter auch verwenden, um benutzerdefinierten Eingabetext für andere Textfelder anzugeben, die von Ihrer App verwendet werden.

Verwenden Sie den Parameter --robo-directives, um Textfelder in Ihrer App auszufüllen. 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. „Abmelden“-Schaltfläche). 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

Die Test Lab gcloud-Befehlszeile bietet mehrere Befehle und Flags, mit denen Sie Tests mit verschiedenen 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 neueste Version von Orchestrator aus.

  • Test-Flags für die Spielschleife: Eine Reihe von Konfigurations-Flags, mit denen ein „Demomodus“ aktiviert und gesteuert werden kann, um Spieleraktionen in Spiele-Apps zu simulieren. Weitere Informationen zu Spielschleifentests mit Test Lab

  • Flag für einheitliches Sharding (Beta): Ein Flag, mit dem Sie die Anzahl der Shards angeben, auf die Sie Testläufe gleichmäßig verteilen möchten. 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 Testläufen angibt, die in einem Shard (einer Gruppe von Testläufen) ausgeführt werden sollen. Die Shards werden parallel auf separaten Geräten ausgeführt.

  • Flag für Netzwerkverkehrsprofile (Beta): Ein Flag, das angibt, welches Netzwerkprofil für Ihre Tests mit physischen Geräten verwendet wird. Mit Netzwerkprofilen können Sie verschiedene Netzwerkbedingungen simulieren und so die Leistung Ihrer App in unzuverlässigen oder unvorhersehbaren Netzwerken testen.

gcloud-Befehle mit Test Lab in Skripts verwenden

Sie können Shell-Skripts oder Batchdateien verwenden, um Befehle zum Testen von Mobilanwendungen zu automatisieren, die Sie sonst über die gcloud-Befehlszeile ausführen würden. Im folgenden Beispiel-Bash-Skript wird ein Instrumentierungstest mit einem Zeitlimit von zwei Minuten ausgeführt. Außerdem 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

Exit-Codes von Scripts

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

Scripting-Beendigungscodes für Test Lab

Exit-Code Hinweise
0 Alle Testausführungen erfolgreich.
1 Ein allgemeiner Fehler ist aufgetreten. Mögliche Ursachen: Ein Dateiname, der nicht vorhanden ist, oder ein HTTP-/Netzwerkfehler.
2 Der Test wurde beendet, weil unbekannte Befehle oder Argumente angegeben wurden.
10 Mindestens ein Testlauf (getestete Klassen oder Klassenmethoden) in einem Testlauf ist fehlgeschlagen.
15 Firebase Test Lab konnte aufgrund eines unerwarteten Fehlers nicht ermitteln, ob die Testmatrix bestanden oder fehlgeschlagen ist.
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.