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 im Testlabor 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: Richten Sie die gcloud-CLI ein
- Laden Sie das Google Cloud SDK herunter
- Stellen Sie sicher, dass Ihre Installation auf dem neuesten Stand ist:
gcloud components update
- Melden Sie sich mit Ihrem Google-Konto bei der gcloud-CLI an:
gcloud auth login
- Legen Sie Ihr Firebase-Projekt in gcloud fest, wobei PROJECT_ID die ID Ihres Firebase-Projekts ist:
gcloud config set project PROJECT_ID
Dazu gehört das gcloud CLI-Tool.
Schritt 2. Überprüfen Sie die verfügbaren Testgeräte
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 Beispiel- Notepad-App herunterladen, um sofort mit der Ausführung der Befehle zu beginnen. 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
: Erhalten Sie 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 zum Ausführen von Tests für das Gerätemodell verwenden können. - Die Spalte
OS_VERSION_ID
enthält die vom Gerät unterstützten Betriebssystemversionen.
Beispielausgabe
- Die Spalte
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, 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 aktuell 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
undVERSION
) verwenden, um später Tests für eine Android-Betriebssystemversion auszuführen. Wenn Sie die zu testenden Android-Betriebssystemversionen nicht angeben, wird der in der SpalteTAGS
angegebene Standard verwendet.Beispielausgabe
locales list
: Rufen Sie die aktuelle Liste der zum Testen verfügbaren Gebietsschemas ab.gcloud firebase test android versions list
Die erste Spalte der Befehlsausgabe,
LOCALE
, enthält die Kennung, die Sie später zum Ausführen von Tests für ein Gebietsschema verwenden können. Wenn Sie die zu testenden Gebietsschemata nicht angeben, wird Englisch als Standardgebietsschema verwendet.
Schritt 3: Führen Sie Ihren Test durch
Da Sie nun wissen, welche Gerätemodelle, Gebietsschemas und Betriebssystemversionen zum Testen Ihrer App verfügbar sind, können Sie Geräte mit dem gcloud firebase test android run
-Befehl 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 dennoch nach Fehlern in Ihrer App suchen. Verwenden Sie den Robo-Test, um eine automatisierte Ü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 anschließend die App durchsucht, um Abstürze und andere potenzielle Probleme zu finden.
Um einen Robo-Test auszuführen, führen Sie 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 beim Identifizieren und Auffinden Ihrer Testmatrizen in der Firebase-Konsole zu helfen, 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 an Befehlszeilenoptionen zum Ausführen von Tests anzeigen, indem Sie Folgendes eingeben:
gcloud help firebase test android run
.
Alternativ zur Angabe dieser Argumente in der Befehlszeile können Sie Ihre Argumente 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 Untersuchen der Testergebnisse des Robo-Tests finden Sie unter Analysieren Ihrer Testergebnisse .
Führen Sie einen Instrumentierungstest durch
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 --client-details matrixLabel="Example matrix label"
- Der Instrumentierungsparameter
--type
ist implizit, wenn mit--test
ein Test-APK angegeben wird. - Um Ihnen beim Identifizieren und Auffinden Ihrer Testmatrizen in der Firebase-Konsole zu helfen, 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 an Befehlszeilenoptionen zum Ausführen von Tests anzeigen, indem Sie
gcloud help firebase test android run
eingeben.
Alternativ zur Angabe dieser Argumente in der Befehlszeile können Sie Ihre Argumente 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. Um es zu aktivieren, verwenden Sie gcloud firebase test android run
es mit dem aus
--use-orchestrator
Flag. Um es zu deaktivieren, verwenden Sie 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 angezeigt werden. Sie können beispielsweise 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 vorliegen aus irgendeinem Grund scheitern. 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 erhalten, 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:
- Öffnen Sie den Firebase-Konsolenlink, den das
gcloud
Tool über der Testergebnistabelle in Ihrem Terminal gedruckt hat. - Klicken Sie in der Liste unter diesem Link auf eine Testausführung, um die Detailseite dieser Ausführung zu öffnen.
- Klicken Sie auf Testergebnisse , um zum Cloud Storage-Bucket mit den Testergebnissen dieser Ausführung zu gelangen.
- Öffnen Sie
artifacts/coverage.ec
, um Ihren Code-Coverage-Bericht anzuzeigen.
Analysieren Sie Ihre Testergebnisse
Nach ein paar Minuten wird vom gcloud-Tool eine grundlegende Zusammenfassung Ihrer Testergebnisse gedruckt:
Die Ausgabe Ihres Befehlszeilentestlaufs enthält auch einen Link zum Anzeigen der Testergebnisse. Weitere Informationen zur Interpretation dieser Ergebnisse finden Sie unter Analysieren der Ergebnisse des Firebase-Testlabors für Android .
Benutzerdefinierte Anmeldung und Texteingabe mit Robo-Test
Der 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 mithilfe der von Ihnen bereitgestellten Testkonto-Anmeldeinformationen ausfüllen. Sie können diesen Parameter auch verwenden, um benutzerdefinierten Eingabetext für andere von Ihrer App verwendete Textfelder bereitzustellen.
Um Textfelder in Ihrer App zu vervollständigen, verwenden Sie 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 (z. B. die Schaltfläche „Abmelden“) zu ignorieren. EditText
Felder werden unterstützt, jedoch 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-CLI des Testlabors verfügt über mehrere Befehle und Flags, 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 die Durchführung von Game Loop-Tests mit Test Lab .
Uniform-Sharding-Flag (in der Betaversion) : 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 der Betaversion) : 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 der Betaversion) : Ein Flag, das angibt, welches Netzwerkprofil Ihre Tests mit physischen Geräten verwenden. Netzwerkprofile emulieren verschiedene Netzwerkbedingungen, sodass Sie die Leistung Ihrer App in unzuverlässigen oder unvorhersehbaren Netzwerken testen können.
Skripterstellung für gcloud-Befehle mit Test Lab
Sie können Shell-Skripte 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 einer Zeitüberschreitung 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
Skript-Exit-Codes
Test Lab bietet mehrere Exit-Codes, die Sie verwenden können, um die Ergebnisse von Tests, die Sie mithilfe von Skripts oder Batchdateien ausführen, besser zu verstehen.
Skripterstellung von Exit-Codes für Test Lab
Exit-Code | Anmerkungen |
---|---|
0 | Alle Testdurchfü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 angegeben wurden. |
10 | Einer 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 bestanden wurde 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 | Es ist ein Fehler in der Testinfrastruktur aufgetreten. |