Check out what’s new from Firebase@ Google I/O 2021, and join our alpha program for early access to the new Remote Config personalization feature. Learn more

Beginnen Sie mit dem Testen mit der gcloud-CLI

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 .

Bevor Sie beginnen

Falls noch nicht geschehen , fügen Sie Firebase zu Ihrem Android-Projekt hinzu .

Schritt 1. Einrichten der gcloud-CLI

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

  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-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

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

  • models list : Rufen Sie eine aktuelle Liste der verfügbaren Android-Geräte zum Testen ab.

    gcloud firebase test android models list
    

    In der Befehlsausgabe:

    • Die Spalte MODEL_ID enthält die Kennung, mit der Sie später Tests am 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 : 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-Ebenen, das Veröffentlichungsdatum 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 für eine Android-Betriebssystemversion auszuführen. Wenn Sie die Android-Betriebssystemversionen für den Test nicht angeben, wird der in der Spalte TAGS vermerkte Standard verwendet.

    Beispielausgabe

    gcloud android versions list

  • locales list : Ruft die aktuelle Liste der verfügbaren Gebietsschemas zum Testen ab.

    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 Gebietsschemata nicht angeben, gegen die getestet werden soll, wird Englisch als Standardgebietsschema verwendet.

Laufende Tests

Da Sie nun wissen, welche Gerätemodelle, Gebietsschemas und Betriebssystemversionen zum Testen Ihrer App verfügbar sind, können Sie Geräte mit dem Befehl --device gcloud firebase test android run und dem Flag --device angeben, um gcloud firebase test android run oder Instrumentierungstests auszuführen.

Ausführen des Robo-Tests

Auch wenn Sie keine Instrumentierungstests haben, können Sie dennoch 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 übt 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.

Beginnen wir mit einem Beispielbefehl:

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

Der --type robo Parameter --type robo ist implizit, wenn kein --type Wert angegeben wird. Sie können die vollständigen Befehlszeilenoptionen zum Ausführen von Tests gcloud help firebase test android run indem Sie gcloud help firebase test android run eingeben: gcloud help firebase test android run . Als Alternative zur Angabe all dieser Argumente in der Befehlszeile können Sie Ihre Argumente optional in einer YAML-formatierten Argumentdatei angeben. Führen Sie gcloud topic arg-files , um zu erfahren, wie Sie diese Funktion verwenden.

Lesen Sie den Abschnitt Analysieren Sie Ihre Testergebnisse , um zu erfahren, wie Sie die Testergebnisse des Robo-Tests untersuchen.

Ausführen Ihrer Instrumentierungstests

Verwenden Sie nun 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

Der --type instrumentation ist implizit, wenn ein Test-APK mit --test . Als Alternative zur Angabe all dieser Argumente in der Befehlszeile können Sie Ihre Argumente optional in einer YAML-formatierten Argumentdatei angeben. Führen Sie gcloud topic arg-files , um zu erfahren, wie Sie diese Funktion verwenden.

Die gcloud-Befehlszeilenschnittstelle unterstützt Android Test Orchestrator . Orchestrator erfordert AndroidJUnitRunner v1.0 oder höher. Um es zu aktivieren, verwenden Sie gcloud firebase test android run mit dem
--use-orchestrator Flag. Um es zu deaktivieren, verwenden Sie das Flag --no-use-orchestrator .

Hinweis: Sie können auch steuern, wie Test Lab Ihre Instrumentierungstests ausführt, indem Sie zusätzliche Flags verwenden, die oben nicht aufgeführt sind. Sie können beispielsweise das --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 Test, der fehlgeschlagen ist, tatsächlich flockig war oder nicht, indem Sie das Flag '--num-flaky-test-attempts' verwenden, das angibt, wie oft eine Testausführung erneut versucht werden soll, wenn eine oder mehrere davon Testfälle schlagen aus irgendeinem Grund fehl. 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 eines der beiden Tools in den Build für Ihre App integriert ist, können Sie einen Bericht zur Codeabdeckung für Test Lab-Tests gcloud firebase test android run indem Sie den gcloud firebase test android run mit den folgenden Argumenten gcloud firebase test android run :

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/coverage.ec" \
  --directories-to-pull /sdcard

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 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 Ihren Code-Coverage-Bericht anzuzeigen.

Analysieren Sie Ihre Testergebnisse

Nach einigen Minuten wird vom gcloud-Tool eine grundlegende Zusammenfassung Ihrer Testergebnisse 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 des Firebase Test Lab für Android .

Benutzerdefinierte Anmeldung und Texteingabe mit Robo-Test

Robo-Test vervollständigt automatisch --no-auto-google-login , 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 Testkonto-Anmeldeinformationen ausfüllen. Sie können diesen Parameter auch verwenden, um benutzerdefinierten Eingabetext für andere Textfelder bereitzustellen, die von Ihrer App verwendet werden.

Verwenden Sie zum --robo-directives Textfeldern in Ihrer App den Parameter --robo-directives und geben Sie eine durch Kommas getrennte Liste von key-value Paaren an, 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 Elemente der Benutzeroberfläche zu ignorieren (z. B. die Schaltfläche "Abmelden"). EditText Felder werden unterstützt, jedoch 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

In der gcloud-CLI von Test Lab stehen 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 der Tests Ihrer App in einem eigenen Aufruf von Instrumentation ausführen können. Test Lab führt immer die neueste Version von Orchestrator aus.

  • Game-Loop-Test-Flags : Eine Reihe von Konfigurations-Flags, die einen "Demo-Modus" 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, auf 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 (einer Gruppe von Testfällen) ausgeführt werden sollen. 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.

Skripting von gcloud-Befehlen mit Test Lab

Sie können Shell-Skripts oder Batchdateien verwenden, um Testbefehle für mobile Apps zu automatisieren, die Sie sonst ü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 bietet mehrere Exitcodes, die Sie verwenden können, um die Ergebnisse von Tests, die Sie mit Skripts oder Batchdateien ausführen, besser zu verstehen.

Skripting-Exit-Codes für Test Lab

Exit-Code Anmerkungen
0 Alle Testdurchführungen bestanden.
1 Ein allgemeiner Fehler ist 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 haben nicht bestanden.
fünfzehn Firebase Test Lab konnte aufgrund eines unerwarteten Fehlers nicht feststellen, 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 die ausgewählte Android-API-Ebene vom ausgewählten Gerätetyp nicht unterstützt wird.
19 Die Testmatrix wurde vom Benutzer abgebrochen.
20 Ein Fehler in der Testinfrastruktur ist aufgetreten.