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
- 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-Befehlszeilenschnittstelle 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 CLI-Tool gcloud.
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
- Die Spalte
models describe
: Erhalten Sie weitere Informationen zu einer bestimmten AndroidMODEL_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
undVERSION
) verwenden, um später Tests mit einer Android-Betriebssystemversion auszuführen. Wenn Sie die zu testenden Android-Betriebssystemversionen nicht angeben, wird die in der SpalteTAGS
angegebene Standardeinstellung verwendet.Beispielausgabe
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:
- Ö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 Testausführung zu öffnen.
- Klicken Sie auf Testergebnisse , um zum Cloud Storage-Bucket mit den Testergebnissen dieser Ausführung zu wechseln.
- Ö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:
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. |