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 in Test Lab mit Ihrer Android-App 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. Achten Sie darauf, dass 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

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

Alternativ können Sie auch die Beispiel-Notiz-App herunterladen, um die Befehle sofort auszuführen. 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: Aktuelle Liste der Android-Geräte abrufen, auf denen Sie testen können

    gcloud firebase test android models list

    In der Befehlsausgabe gilt:

    • Spalte MODEL_ID enthält die Kennung, mit der Sie später Tests auf dem Gerätemodell ausführen können.
    • Spalte OS_VERSION_ID enthält die vom Gerät unterstützten Betriebssystemversionen.

    Beispielausgabe

    gcloud firebase test android models list output

  • models describe: Hier finden 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, die Betriebssystemversionen, die unterstützten API-Levels, die unterstützten Binärschnittstellen (Application Binary Interfaces, ABI) sowie das Datum der Veröffentlichung und ob das Gerät physisch oder virtuell ist.

  • versions list: Ruft eine Liste der derzeit verfügbaren Betriebssystemversionen ab, die getestet werden können.

    gcloud firebase test android versions list

    Sie können eine ID 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 die Standardeinstellung in der Spalte TAGS verwendet.

    Beispielausgabe

    gcloud android versions list

  • locales list: Aktuelle Liste der verfügbaren Sprachen für Tests abrufen

    gcloud firebase test android versions 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 keine zu testenden Sprachen angeben, wird Englisch als Standardsprache verwendet.

Schritt 3: Test ausführen

Nachdem Sie nun wissen, welche Gerätemodelle, Sprachen und Betriebssystemversionen für das Testen Ihrer App verfügbar sind, können Sie mit dem Befehl gcloud firebase test android run und dem Flag --device Geräte 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 die Benutzeroberfläche Ihrer App automatisch zu überprüfen. 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 zum Ausführen eines Robo-Tests 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 Parameter --type robo ist implizit, wenn kein --type-Wert angegeben ist.
  • Damit Sie Ihre Testmatrizen in der Firebase Console leichter finden, können Sie sie mit dem optionalen Flag --client-details matrixLabel="Example matrix label" kennzeichnen.
  • Die vollständigen Befehlszeilenoptionen zum Ausführen von Tests sehen Sie, wenn Sie gcloud help firebase test android run eingeben.

Als Alternative zur Angabe dieser Argumente in der Befehlszeile können Sie Ihre Argumente optional in einer Argumentdatei im YAML-Format angeben. Führen Sie gcloud topic arg-files aus, um zu erfahren, wie Sie dieses Feature verwenden.

Informationen zum Prüfen der Testergebnisse des Robo-Tests finden Sie unter Testergebnisse analysieren.

Instrumentierungstest ausführen

Führen Sie jetzt mit dem gcloud-Befehlszeilentool die Espresso-Tests der Notiz-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 Parameter --type ist implizit, wenn ein Test-APK mit --test angegeben wird.
  • Damit Sie Ihre Testmatrizen in der Firebase-Konsole leichter finden, können Sie sie mit dem optionalen --client-details matrixLabel="Example matrix label"-Flag kennzeichnen.
  • Sie können den vollständigen Satz der Befehlszeilenoptionen zum Ausführen von Tests aufrufen, indem Sie gcloud help firebase test android run eingeben.

Alternativ zur Angabe dieser Argumente in der Befehlszeile können Sie sie auch in einer Argumentdatei im YAML-Format angeben. Führen Sie gcloud topic arg-files aus, um mehr über die Verwendung dieser Funktion zu erfahren.

Die gcloud CLI unterstützt Android Test Orchestrator. Für Orchestrator ist AndroidJUnitRunner Version 1.1 oder höher erforderlich. Verwenden Sie gcloud firebase test android run mit dem Flag
--use-orchestrator, um die Funktion zu aktivieren. Verwenden Sie das Flag --no-use-orchestrator, um sie zu deaktivieren.

Mithilfe zusätzlicher Flags, die oben nicht aufgeführt sind, können Sie auch 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 in Ihrer Test-APK verwendet wird. Mit dem Flag --num-flaky-test-attempts können Sie auch herausfinden, ob Ihr fehlgeschlagener Test tatsächlich instabil war. Mit diesem Flag wird angegeben, wie oft eine Testausführung wiederholt werden soll, wenn einer oder mehrere 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 zur Berichterstellung zur Codeabdeckung EMMA und JaCoCo. Wenn Sie eines der beiden Tools in den Build Ihrer App eingebunden haben, 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, gehen Sie so vor:

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 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 unter 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 grundlegende Zusammenfassung Ihrer Testergebnisse ausgegeben:

Ergebnisse des Befehlstests

Die Ausgabe des Befehlszeilen-Testlaufs enthält auch einen Link zum Ansehen der Testergebnisse. Weitere Informationen zur Auswertung 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, bei denen für die Authentifizierung ein Google-Konto verwendet wird, automatisch abgeschlossen, es sei denn, Sie verwenden den Parameter --no-auto-google-login. Er kann auch benutzerdefinierte Anmeldebildschirme mit von Ihnen bereitgestellten Anmeldedaten für Testkonten ausfüllen. Mit diesem Parameter können Sie auch benutzerdefinierten Eingabetext für andere Textfelder in Ihrer App angeben.

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. Dabei ist key der Android-Ressourcenname des Ziel-UI-Elements und value der Textstring. Mit diesem Flag können Sie Robo auch anweisen, bestimmte UI-Elemente zu ignorieren (z. B. Schaltfläche „Abmelden“. EditText-Felder werden unterstützt, aber keine Textfelder in WebView-UI-Elementen.

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 unterschiedlichen Spezifikationen ausführen können:

  • Android Test Orchestrator-Flag: Mit dieser Flag wird Orchestrator aktiviert, ein Tool, mit dem Sie die Tests Ihrer App in einer eigenen Aufrufinstanz von Instrumentation ausführen können. Test Lab führt immer die neueste Version von Orchestrator aus.

  • Test-Flags für die Spielschleife: Mit diesen Konfigurations-Flags können Sie einen „Demomodus“ aktivieren und steuern, um Spieleraktionen in Spiele-Apps zu simulieren. Weitere Informationen zum Ausführen von Spielschleifentests mit Test Lab

  • Flag für einheitliches Sharding (in Beta): Mit diesem Flag wird die Anzahl der Shards angegeben, 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 (in Beta): Mit diesem Flag wird eine Gruppe von Paketen, Klassen und/oder Testfällen angegeben, 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 Netzwerktraffic-Profile (in der Betaversion): Dieses Flag gibt an, welches Netzwerkprofil von den Tests mit physischen Geräten verwendet wird. Netzwerkprofile emulieren eine Vielzahl von Netzwerkbedingungen, sodass Sie die Leistung Ihrer App in nicht zuverlässigen oder unvorhersehbaren Netzwerken testen können.

gcloud-Befehle mit Test Lab in Skripts verwenden

Mit Shell-Scripts oder Batchdateien können Sie Befehle für mobile App-Tests automatisieren, die Sie sonst über die gcloud-Befehlszeile ausführen würden. Im folgenden Beispiel-Bash-Script wird ein Instrumentierungstest mit einer Zeitüberschreitung von zwei Minuten ausgeführt und es wird gemeldet, ob der Test 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 Beendigungscodes, mit denen Sie die Ergebnisse von Tests besser nachvollziehen können, die Sie mit Scripts oder Batchdateien ausführen.

Scripting-Exit-Codes für Test Lab

Exit-Code Hinweise
0 Alle Testausführungen wurden bestanden.
1 Ein allgemeiner Fehler ist aufgetreten. Mögliche Ursachen sind ein nicht vorhandener Dateiname oder ein HTTP-/Netzwerkfehler.
2 Die Tests wurden beendet, weil unbekannte Befehle oder Argumente angegeben wurden.
10 Mindestens einer der Testfälle (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 oder nicht bestanden hat.
18 Die Testumgebung für diese Testausführung wird aufgrund von inkompatiblen 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 Beim Testen der Infrastruktur ist ein Fehler aufgetreten.