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. 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 steht PROJECT_ID für 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 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 Datei für Instrumentierungstests app-debug-test-unaligned.apk, die sich in NotePad/app/build/outputs/apk/ befinden.

  • models list: Aktuelle Liste der Android-Geräte abrufen, die für Tests verfügbar sind.

    gcloud firebase test android models list
    

    In der Befehlsausgabe:

    • 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, den Hersteller, die Betriebssystemversionen, die unterstützten API-Ebenen, die unterstützten Application Binary Interfaces (ABIs), die Veröffentlichungsdaten und ob es sich um ein physisches oder virtuelles Gerät handelt.

  • versions list: Liste der derzeit verfügbaren Betriebssystemversionen abrufen, mit denen getestet werden soll

    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 ein Gebietsschema 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.
  • Mithilfe des optionalen Flags --client-details matrixLabel="Example matrix label" können Sie Ihre Testmatrizen in der Firebase Console leichter identifizieren und finden.
  • Die vollständigen Befehlszeilenoptionen zum Ausführen von Tests sehen Sie, wenn 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.

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.
  • Wenn Sie gcloud help firebase test android run eingeben, werden alle Befehlszeilenoptionen zum Ausführen von Tests angezeigt.

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 den Android Test Orchestrator. Für Orchestrator ist AndroidJUnitRunner 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 die Funktion zu deaktivieren.

Mithilfe zusätzlicher Flags, die oben nicht aufgeführt sind, können Sie auch festlegen, 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 Befehlszeilentests 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. „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. Auf Test Lab wird immer die neueste Version von Orchestrator ausgeführt.

  • 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 Netzwerkverkehrsprofile (Beta): Mit diesem Flag wird angegeben, welches Netzwerkprofil für Ihre Tests auf 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-Endcodes 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 Ein Fehler bei der Testinfrastruktur ist aufgetreten.