Mit der gcloud CLI testen

In dieser Anleitung wird beschrieben, wie Sie mit der gcloud CLI einen Instrumentierungs-, Robo- oder Spielschleifentest 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. Laden Sie das Google Cloud SDK herunter.
  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 Gebietsschemas aufrufen, die für Ihren Test verfügbar sind.

Optional können Sie auch die Beispiel- App „Notepad“ herunterladen, um die Befehle sofort auszuführen. Verwenden Sie die Binärdatei app-debug-unaligned.apk und die Datei mit den 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, mit der Sie später Tests auf dem 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: Rufen Sie weitere Informationen zu einer bestimmten Android-MODEL_ID ab.

    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 Application Binary Interfaces (ABI), die Veröffentlichungsdaten und Informationen dazu, ob das Gerät physisch oder virtuell ist.

  • versions list: Rufen Sie eine Liste der derzeit verfügbaren Betriebssystemversionen ab, die für Tests zur Verfügung stehen.

    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 für Tests zur Verfügung stehen, nicht angeben, wird die Standardversion verwendet, die in der Spalte TAGS angegeben ist.

    Beispielausgabe

    gcloud android versions list

  • locales list: Rufen Sie die aktuelle Liste der Gebietsschemas ab, die für Tests zur Verfügung stehen.

    gcloud firebase test android locales list

    Die erste Spalte der Befehlsausgabe, LOCALE, enthält die Kennung, mit der Sie später Tests für ein Gebietsschema ausführen können. Wenn Sie die Gebietsschemas, die für Tests zur Verfügung stehen, nicht angeben, wird Englisch als Standardgebietsschema verwendet.

Schritt 3: Test ausführen

Nachdem Sie nun die verfügbaren Gerätemodelle, Gebietsschemas und Betriebssystemversionen für das Testen Ihrer App kennen, 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. Beim Robo-Test wird die App ausgeführt, indem eine statische Analyse der verschiedenen Pfade durch die Benutzeroberfläche der App durchgeführt und dann die App durchsucht wird, 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 --type robo Parameter 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 Ihre Testmatrix mit dem optionalen --client-details matrixLabel="Example matrix label" Flag kennzeichnen.
  • Die vollständige Liste der Befehlszeilenoptionen zum Ausführen von Tests finden Sie unter gcloud help firebase test android run.

Alternativ zur Angabe dieser Argumente in der Befehlszeile können Sie sie 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 Analysieren 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 in den von Ihnen angegebenen Android-Gerätekonfigurationen auszuführen. Verwenden Sie den Testtyp 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 Parameter --type instrumentation ist implizit, wenn mit --test ein Test-APK angegeben wird.
  • Damit Sie Ihre Testmatrizen in der Firebase Console, leichter identifizieren und finden können,--client-details matrixLabel="Example matrix label"können Sie Ihre Testmatrix mit dem optionalen Flag kennzeichnen.
  • Die vollständige Liste der Befehlszeilenoptionen zum Ausführen von Tests finden Sie unter gcloud help firebase test android run.

Alternativ zur Angabe dieser Argumente in der Befehlszeile können Sie sie 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. Verwenden Sie gcloud firebase test android run mit dem
--use-orchestrator Flag, um es zu aktivieren. 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 Ihrem Test-APK verwendet wird. Mit dem Flag --num-flaky-test-attempts können Sie auch herausfinden, ob Ihr fehlgeschlagener Test tatsächlich fehlerhaft war. Dieses Flag gibt an, wie oft die Testausführung wiederholt werden soll, wenn mindestens einer der Testfälle aus irgendeinem Grund fehlschlägt. Weitere Informationen finden Sie unter gcloud firebase test android run.

Codeabdeckungsberichte für Instrumentierungstests

Test Lab unterstützt die Codeabdeckungstools EMMA und JaCoCo. Wenn eines der Tools in den Build Ihrer App integriert ist, können Sie einen Codeabdeckungsbericht 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 Codeabdeckungsberichte erstellen und gleichzeitig Android Test Orchestrator verwenden, ändern Sie die 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 die Codeabdeckungsberichte in Google Cloud Storage:

  1. Öffnen Sie den Firebase Konsolenlink, den das gcloud Tool in Ihrem Terminal über der Tabelle mit den Testergebnissen ausgegeben hat.
  2. Klicken Sie in der Liste 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 den Codeabdeckungsbericht aufzurufen.

Testergebnisse analysieren

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

Ergebnisse des Befehlstests

Die Ausgabe Ihres Befehlszeilentests enthält auch einen Link zum Aufrufen der Testergebnisse. Weitere Informationen zum Interpretieren dieser Ergebnisse finden Sie unter Analysieren Firebase Test Lab für Android-Ergebnisse.

Benutzerdefinierte Anmeldung und Texteingabe mit Robo-Test

Beim Robo-Test werden Anmeldebildschirme, die ein Google-Konto zur Authentifizierung verwenden, automatisch ausgefüllt, es sei denn, Sie verwenden den --no-auto-google-login Parameter. Benutzerdefinierte Anmeldebildschirme können auch mit Anmeldedaten für Testkonten ausgefüllt werden, die Sie angeben. Mit diesem Parameter können Sie auch benutzerdefinierten Eingabetext für andere Textfelder angeben, die von Ihrer App verwendet werden.

Verwenden Sie den --robo-directives Parameter und geben Sie eine durch Kommas getrennte Liste von key-value Paaren an, um Textfelder in Ihrer App auszufüllen. Dabei ist das key der Android-Ressourcenname des Ziel-UI-Elements und das value ist der Textstring. Mit diesem Flag können Sie Robo auch anweisen, 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

Die Test Lab gcloud CLI bietet mehrere Befehle und Flags, mit denen Sie Tests mit verschiedenen Spezifikationen ausführen können:

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

  • Flags für Spielschleifentests: Eine Reihe von Konfigurationsflags, mit denen ein "Demomodus" aktiviert und gesteuert wird, um Spieleraktionen in Spiele-Apps zu simulieren. Weitere Informationen zum Ausführen von Spielschleifentests mit Test Lab.

  • Flag für einheitliches Sharding (Beta): Ein Flag, mit dem die Anzahl der Shards angegeben wird, auf die Sie Testfälle gleichmäßig verteilen möchten. Die Shards werden parallel auf separaten Geräten ausgeführt.

  • Flag für manuelles Sharding (Beta): Ein Flag, mit dem eine Gruppe von Paketen, Klassen und/oder Testfällen angegeben wird, 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 (Beta): Ein Flag, mit dem angegeben wird, welches Netzwerkprofil von Ihren Tests mit physischen Geräten verwendet wird. 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 zum Testen von mobilen Apps zu automatisieren, die Sie sonst über die gcloud-Befehlszeile ausführen würden. Das folgende Bash-Skript führt einen Instrumentierungstest mit einem Zeitlimit 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

Exit-Codes für Skripts

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.

Exit-Codes für Skripts für Test Lab

Exit-Code Hinweise
0 Alle Testausführungen wurden erfolgreich abgeschlossen.
1 Ein allgemeiner Fehler ist aufgetreten. Mögliche Ursachen: Eine Datei ist nicht vorhanden oder ein HTTP-/Netzwerkfehler.
2 Der Test wurde beendet, da unbekannte Befehle oder Argumente angegeben wurden.
10 Mindestens ein Testfall (getestete Klassen oder Klassenmethoden) in einer Testausführung ist fehlgeschlagen.
15 Firebase Test Lab konnte aufgrund eines unerwarteten Fehlers nicht feststellen, ob die Testmatrix erfolgreich war oder fehlgeschlagen ist.
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 Nutzer abgebrochen.
20 Es ist ein Fehler in der Testinfrastruktur aufgetreten.