了解 2023 年 Google I/O 大会上介绍的 Firebase 亮点。了解详情

Beginnen Sie mit dem Testen mit der gcloud-Befehlszeilenschnittstelle

In dieser Anleitung wird beschrieben, wie Sie einen Instrumentierungs-, Robo- oder Game Loop-Test mit der gcloud-Befehlszeilenschnittstelle 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 .

Bevor Sie beginnen

Fügen Sie Ihrem Android-Projekt Firebase hinzu , falls Sie dies noch nicht getan haben .

Schritt 1. Richten Sie die gcloud-CLI ein

  1. Laden Sie das Google Cloud-SDK herunter.
  2. Dazu gehört das CLI-Tool gcloud.

  3. Stellen Sie sicher, dass Ihre Installation auf dem neuesten Stand ist:
    gcloud components update
    
  4. Melden Sie sich mit Ihrem Google-Konto bei der gcloud-Befehlszeilenschnittstelle 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. Überprüfen Sie verfügbare Testgeräte

Verwenden Sie die folgenden gcloud-Befehle, um Testgeräte und Gebietsschemata anzuzeigen, 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 Instrumentierungstestdatei app-debug-test-unaligned.apk , die sich in NotePad/app/build/outputs/apk/ befinden.

  • models list : Holen Sie sich eine aktuelle Liste der verfügbaren Android-Geräte, mit denen Sie testen können.

    gcloud firebase test android models list
    

    In der Befehlsausgabe:

    • Die Spalte MODEL_ID enthält die Kennung, die Sie später verwenden können, um Tests für das Gerätemodell auszuführen.
    • Die Spalte OS_VERSION_ID enthält die vom Gerät unterstützten Betriebssystemversionen.

    Beispielausgabe

    gcloud firebase test android models list output

  • models describe : Erhalten 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, unterstützte API-Ebenen, unterstützte Application Binary Interfaces (ABI), Veröffentlichungsdaten und ob das Gerät physisch oder virtuell ist.

  • versions list : Rufen Sie eine Liste der derzeit verfügbaren Betriebssystemversionen zum Testen ab.

    gcloud firebase test android versions list
    

    Sie können einen Bezeichner aus einer der ersten beiden Spalten der Befehlsausgabe ( OS_VERSION_ID und VERSION ) verwenden, um später Tests mit einer Android-Betriebssystemversion auszuführen. Wenn Sie die zu testenden Android-Betriebssystemversionen nicht angeben, wird die in der Spalte TAGS angegebene Standardeinstellung verwendet.

    Beispielausgabe

    gcloud android versions list

  • locales list : Holen Sie sich die aktuelle Liste der Gebietsschemas, die zum Testen verfügbar sind.

    gcloud firebase test android versions list
    

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

Schritt 3. Führen Sie Ihren Test durch

Da Sie nun die Auswahl an Gerätemodellen, Gebietsschemas 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.

Führen Sie einen Robo-Test durch

Auch wenn Sie keine Instrumentierungstests haben, können Sie trotzdem nach Fehlern in Ihrer App suchen. Verwenden Sie den Robo-Test, um eine automatische Überprüfung der Benutzeroberfläche Ihrer App durchzuführen. Der Robo-Test testet die App, indem er eine statische Analyse der verschiedenen Pfade durch die Benutzeroberfläche der App durchführt und dann die App durchsucht, 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 --type robo ist implizit, wenn kein --type Wert angegeben ist.
  • Um Ihnen zu helfen, Ihre Testmatrizen in der Firebase-Konsole zu identifizieren und zu finden, können Sie das optionale Flag --client-details matrixLabel="Example matrix label" verwenden, um Ihre Testmatrix zu kennzeichnen.
  • Sie können den vollständigen Satz von Befehlszeilenoptionen zum Ausführen von Tests anzeigen, indem Sie Folgendes eingeben: gcloud help firebase test android run .

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 diese Funktion verwenden.

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

Führen Sie einen Instrumententest durch

Verwenden Sie jetzt das gcloud Befehlszeilentool, um die Espresso- Tests der Notepad-App auf Ihren angegebenen Android-Gerätekonfigurationen auszuführen. Verwenden Sie den 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 Instrumentierungsparameter --type ist implizit, wenn ein Test-APK mit --test angegeben wird.
  • Um Ihnen zu helfen, Ihre Testmatrizen in der Firebase-Konsole zu identifizieren und zu finden, können Sie das optionale Flag --client-details matrixLabel="Example matrix label" verwenden, um Ihre Testmatrix zu kennzeichnen.
  • Sie können den vollständigen Satz von Befehlszeilenoptionen zum Ausführen von Tests anzeigen, indem 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 diese Funktion verwenden.

Die gcloud-Befehlszeilenschnittstelle unterstützt Android Test Orchestrator . Orchestrator erfordert AndroidJUnitRunner v1.1 oder höher. Verwenden Sie zum Aktivieren gcloud firebase test android run with the
--use-orchestrator Flag. Verwenden Sie zum Deaktivieren das Flag --no-use-orchestrator .

Sie können auch steuern, wie Test Lab Ihre Instrumentierungstests durchführt, indem Sie zusätzliche Flags verwenden, die oben nicht gezeigt werden. Beispielsweise können Sie das Flag --test-targets verwenden, um eine einzelne Klasse oder eine Klassenmethode zu testen, die von Ihrem Test-APK verwendet wird. Sie können auch herausfinden, ob Ihr fehlgeschlagener Test tatsächlich fehlerhaft war oder nicht, indem Sie das Flag --num-flaky-test-attempts verwenden, das angibt, wie oft eine Testausführung erneut versucht werden soll, wenn einer oder mehrere seiner Testfälle vorhanden sind scheitern aus irgendeinem Grund. Weitere Informationen finden Sie unter gcloud firebase test android run .

Codeabdeckungsberichte für Instrumentierungstests

Test Lab unterstützt die Code Coverage Reporting Tools EMMA und JaCoCo . Wenn Sie eines der beiden Tools in den Build für Ihre App integriert haben, können Sie einen Codeabdeckungsbericht für Testlabortests 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 generieren und gleichzeitig Android Test Orchestrator verwenden, ändern Sie Ihre 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 Ihre Codeabdeckungsberichte in Google Cloud Storage:

  1. Öffnen Sie den Firebase-Konsolenlink, den das gcloud Tool über der Testergebnistabelle in Ihrem Terminal gedruckt hat.
  2. Klicken Sie in der Liste unter diesem Link auf eine Testausführung, um die Detailseite dieser Testausführung zu öffnen.
  3. Klicken Sie auf Testergebnisse , um zum Cloud Storage-Bucket mit den Testergebnissen dieser Ausführung zu wechseln.
  4. Öffnen Sie artifacts/coverage.ec , um Ihren Codeabdeckungsbericht anzuzeigen.

Analysieren Sie Ihre Testergebnisse

Nach einigen Minuten wird eine grundlegende Zusammenfassung Ihrer Testergebnisse vom gcloud-Tool gedruckt:

Command test results

Die Ausgabe Ihres Befehlszeilen-Testlaufs enthält auch einen Link zum Anzeigen der Testergebnisse. Weitere Informationen zur Interpretation dieser Ergebnisse finden Sie unter Analysieren der Ergebnisse von Firebase Test Lab für Android .

Benutzerdefinierte Anmeldung und Texteingabe mit Robo-Test

Robo-Test vervollständigt automatisch Anmeldebildschirme, die ein Google-Konto zur Authentifizierung verwenden, es sei denn, Sie verwenden den Parameter --no-auto-google-login . Es kann auch benutzerdefinierte Anmeldebildschirme mit den von Ihnen bereitgestellten Anmeldeinformationen für das Testkonto vervollständigen. Sie können diesen Parameter auch verwenden, um benutzerdefinierten Eingabetext für andere Textfelder bereitzustellen, die von Ihrer App verwendet werden.

Verwenden Sie zum Ausfüllen von Textfeldern in Ihrer App den Parameter --robo-directives und stellen Sie eine durch Kommas getrennte Liste von key-value Paaren bereit, wobei der key der Android-Ressourcenname des Ziel-UI-Elements und der value die Textzeichenfolge 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, aber keine Textfelder in WebView UI-Elementen.

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

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

Verfügbare Befehle und Flags

Die gcloud-Befehlszeilenschnittstelle von Test Lab stellt mehrere Befehle und Flags zur Verfügung, 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 Ihrer App-Tests in einem eigenen Aufruf von Instrumentation ausführen können. Test Lab führt immer die neueste Version von Orchestrator aus.

  • Game Loop-Testflags : Eine Reihe von Konfigurationsflags, die einen „Demomodus“ aktivieren und steuern, um Spieleraktionen in Spiele-Apps zu simulieren. Erfahren Sie mehr über das Ausführen von Game Loop-Tests mit Test Lab .

  • Uniform-Sharding-Flag (in Beta) : Ein Flag, das die Anzahl der Shards angibt, in die Sie Testfälle gleichmäßig verteilen möchten. Die Shards werden parallel auf separaten Geräten ausgeführt.

  • Manuelles Sharding-Flag (in Beta) : Ein Flag, das eine Gruppe von Paketen, Klassen und/oder Testfällen angibt, die in einem Shard ausgeführt werden sollen (eine Gruppe von Testfällen). Die Shards werden parallel auf separaten Geräten ausgeführt.

  • Flag für Netzwerkverkehrsprofile (in Beta) : Ein Flag, das angibt, welches Netzwerkprofil Ihre Tests mit physischen Geräten verwenden. Netzwerkprofile emulieren eine Vielzahl von Netzwerkbedingungen, sodass Sie die Leistung Ihrer App in unzuverlässigen oder unvorhersehbaren Netzwerken testen können.

gcloud-Befehle mit Test Lab skripten

Sie können Shell-Skripts oder Batchdateien verwenden, um Befehle zum Testen mobiler Apps zu automatisieren, die Sie andernfalls über die gcloud-Befehlszeile ausführen würden. Das folgende Bash-Beispielskript führt einen Instrumentierungstest mit einem zweiminütigen Timeout 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

Skript-Exit-Codes

Test Lab stellt mehrere Beendigungscodes bereit, die Sie verwenden können, um die Ergebnisse von Tests besser zu verstehen, die Sie mithilfe von Skripts oder Stapeldateien ausführen.

Skript-Exit-Codes für Test Lab

Exit-Code Anmerkungen
0 Alle Testausführungen bestanden.
1 Es ist ein allgemeiner Fehler aufgetreten. Mögliche Ursachen sind: ein nicht vorhandener Dateiname oder ein HTTP-/Netzwerkfehler.
2 Der Test wurde beendet, weil unbekannte Befehle oder Argumente bereitgestellt wurden.
10 Ein oder mehrere Testfälle (getestete Klassen oder Klassenmethoden) innerhalb einer Testausführung wurden nicht bestanden.
15 Firebase Test Lab konnte aufgrund eines unerwarteten Fehlers nicht feststellen, ob die Testmatrix erfolgreich war oder nicht.
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 Benutzer abgebrochen.
20 Ein Testinfrastrukturfehler ist aufgetreten.