1. Einführung
Zuletzt aktualisiert:07.04.2022
Tests für Mobilgeräte mit CI/CD-Systemen ausführen
Die Durchführung von Tests für Mobilgeräte kann schwierig sein: Viele Apps laufen auf verschiedenen Plattformen, Geräten und API-Versionen. App-Entwickler möchten möglichst viele Konfigurationen testen, um Probleme zu erkennen, bevor die Nutzer sie verwenden. Kosten- und Ressourceneinschränkungen schränken jedoch die Anzahl der Testgeräte und den Umfang der manuellen Wartung ein, in die einzelne Entwickler investieren können. Wenn der Entwicklungsprozess hochskaliert wird, insbesondere bei Systemen für die kontinuierliche Integration und Entwicklung (Continuous Integration/Continuous Development, CI/CD), muss der Testprozess automatisiert werden, wobei die Kosten und der Aufwand für die Wartung minimiert werden.
Damit Sie die Leistung Ihrer Apps auf den Geräten Ihrer Nutzer besser nachvollziehen können, werden in Firebase Test Lab eine Reihe von physischen und virtuellen Mobilgeräten in unseren Rechenzentren gehostet. Außerdem stellen wir die Google Cloud CLI zur Verfügung, ein plattformunabhängiges Befehlszeilentool, mit dem Tests auf den Geräten in unseren Rechenzentren orchestriert werden. Mit der gcloud CLI lässt sich die cloudbasierte Testlösung von Test Lab ganz einfach in bestehende CI/CD-Workflows einbinden.
Plattformübergreifende Unterstützung
Test Lab bietet Testlösungen für Android- und iOS-Apps sowie speziellen Support für mobile Spiele wie Unity. Die Testoptionen decken gängige Test-Frameworks wie Android Espresso, UI Automator und iOS XCTest ab. Mit unserem automatisierten Crawler Robo können in Test Lab sogar Tests ohne Testcode ausgeführt werden.
Keine Hardwareanforderungen
Test Lab hostet physische Geräte in Google-Rechenzentren und virtuelle Geräte in Google Cloud. Sie müssen lediglich Ihre Tests an Test Lab senden und auf die Ergebnisse warten.
Schnell und zuverlässig
Das Ausführen vieler gleichzeitiger Testfälle kann viel Zeit in Anspruch nehmen und CI/CD-Prozesse blockieren. Mit Test Lab können Sie ganz einfach Tests auf mehrere Geräte verteilen und parallel ausführen. Sie können auch Unzuverlässigkeiten erkennen, ein häufiges Problem bei mobilen Tests.
Lerninhalte
- Testartefakte erstellen
- So führen Sie einen mobilen Test mit der gcloud CLI aus
- Jenkins CI einrichten
- Mobile Tests mit Jenkins CI ausführen
- Tests so konfigurieren, dass sie mit CI-Systemen skaliert werden
In diesem Codelab geht es um das Ausführen von Tests. Auf irrelevante Konzepte wird nicht genauer eingegangen und entsprechende Codeblöcke können Sie einfach kopieren und einfügen.
Voraussetzungen
Wenn Sie lieber etwas von Grund auf neu erstellen möchten, benötigen Sie Android Studio für einen Android-Test oder XCode für einen iOS-Test. Sie können auch einfach nur vorbeikommen und wir stellen Ihnen die Artefakte zur Verfügung.
2. Test mit der gcloud CLI ausführen
APK und Test-APK einer Android-App erstellen
Wenn Sie einen Test mit Test Lab ausführen möchten, müssen Sie zuerst ein APK für die Android-App und ein Test-APK erstellen, das instrumentierte Tests enthält, die auf Hardwaregeräten oder Emulatoren ausgeführt werden können. Wenn Sie bereits eine funktionierende Codebasis haben, können Sie Ihre eigenen APKs erstellen oder das BasicSample für Espresso verwenden.
Wenn Sie APKs mit Gradle-Befehlen erstellen möchten, müssen Sie das Android SDK installieren. Wenn Android Studio auf Ihrem Computer nicht installiert ist, installieren Sie Android Studio und das Android SDK und legen Sie die ANDROID_HOME
-Umgebung mit Ihrem Android SDK-Verzeichnis fest. Fügen Sie Ihrer ~/.bash_profile
-Datei beispielsweise die folgende Zeile hinzu:
export ANDROID_HOME=~/Android/Sdk # For linux
export ANDROID_HOME=~/Library/Android/sdk # For MacOS
Führen Sie dann die folgenden Befehle aus, um den Code zu klonen und APKs zu erstellen:
git clone https://github.com/android/testing-samples.git cd testing-samples/ui/espresso/BasicSample/ ./gradlew assembleDebug # for generating app apk ./gradlew assembleDebugAndroidTest # for generating testing apk
Nachdem Sie die Befehle zum Klonen und Erstellen ausgeführt haben, finden Sie das App-APK und das Test-APK an folgenden Stellen:
app/build/outputs/apk/debug/app-debug.apk app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
Alternativ können Sie die folgenden Optionen verwenden, um die Test- und App-APKs abzurufen:
- Folgen Sie der Anleitung unter In Android Studio testen, um APKs in Android Studio zu erstellen.
- Laden Sie die Beispiel-Notepad-App herunter. Verwenden Sie die Binärdatei
app-debug-unaligned.apk
und die Datei für Instrumentierungstestsapp-debug-test-unaligned.apk
, die sich inNotePad/app/build/outputs/apk/
befinden.
Wenn Sie funktionierenden Quellcode für eine iOS-App haben, können Sie einen XCTest schreiben und aus der App und den Tests eine ZIP-Datei erstellen.
Test mit der gcloud CLI mit Test Lab ausführen
In diesem Abschnitt erstellen Sie ein Firebase-Projekt und konfigurieren Ihre lokale Google Cloud SDK-Umgebung. Weitere Informationen finden Sie unter Tests mit der gcloud CLI starten.
Die gcloud CLI einrichten
- Laden Sie das Google Cloud SDK herunter, in dem das gcloud CLI-Tool enthalten ist.
- Prüfen Sie, ob Ihre Installation auf dem neuesten Stand ist:
gcloud components update
- Melden Sie sich mit Ihrem Google-Konto in der gcloud CLI an:
gcloud auth login
- Legen Sie Ihr Firebase-Projekt in der gcloud CLI fest, wobei
PROJECT_ID
Ihre Firebase-Projekt-ID ist. Sie finden die Projekt-ID in der Firebase Console-URL. Diese folgt dieser Benennungskonvention:https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID
Wenn Sie noch kein Firebase-Projekt haben, erstellen Sie eines in der Firebase Console.
Test mit den erstellten APKs ausführen
In diesem Abschnitt führen Sie einen Instrumentierungstest auf dem Standardgerät von Test Lab aus, einem Google Pixel 3 mit API-Level 28. Wenn Sie ein anderes Gerät verwenden möchten, sehen Sie sich die verfügbaren Geräte an.
Führen Sie mit der App und den Test-APKs, die Sie unter „Android-APK erstellen und testen“ erstellt haben, einen Android-Instrumentierungstest mit dem folgenden Befehl aus:
gcloud firebase test android run \ --type instrumentation \ --app app/build/outputs/apk/debug/app-debug.apk \ --test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
Testergebnisse analysieren
Sie können die Testergebnisse mit einer der folgenden Optionen analysieren:
gcloud
summary (Zusammenfassung): Nach Abschluss des Tests gibt die gcloud CLI eine grundlegende Zusammenfassung der Testergebnisse aus.gcloud
exit code: Nach Abschluss des Tests wird der Befehl mit 0 beendet, wenn der Test bestanden wurde. Wenn der Test fehlschlägt, wird der Befehl mit einem Exit-Code ungleich Null beendet.- Firebase Console: Die gcloud-Befehlszeile gibt einen Link zur Firebase Console aus. Der Link folgt der Namenskonvention
https://console.firebase.google.com/project/PROJECT_ID/testlab/...
. Weitere Informationen finden Sie unter Ergebnisse einer einzelnen Testausführung interpretieren. - JUnit-XML-Datei: Die gcloud CLI gibt Folgendes aus:
Raw results will be stored in your Cloud Storage bucket at [https://console.developers.google.com/storage/browser/test-lab-xxxxx/xxxxx/]
test-lab-xxxxx/xxxxx
ist der Cloud Storage-Bucket, in dem Testartefakte und -ergebnisse gespeichert werden. Um die JUnit-XML-Datei mit den Testergebnissen zu finden, öffnen Sie den Link und rufen Sie blueline-28-en-portrait/test_result_1.xml
auf.
3. Mit Jenkins CI einrichten
In diesem Abschnitt verwenden Sie Jenkins CI, ein beliebtes CI-System, um Tests mit Test Lab auszuführen. Wenn Sie ein anderes CI-System verwenden möchten, lesen Sie die erweiterten Best Practices zum Ausführen großer Testsuites und die Dokumentation für andere CI-Systeme wie Bitrise und Circle CI. Sie können Flank als Alternative zur gcloud CLI verwenden.
gcloud-Befehlszeile für Jenkins aktivieren
Bevor Sie Test Lab mit Jenkins verwenden können, müssen Sie die erforderlichen APIs aktivieren und ein Dienstkonto einrichten, mit dem sich Jenkins bei der gcloud CLI authentifizieren kann.
Google Cloud-Dienstkonto für Jenkins hinzufügen
Dienstkonten sind eingeschränkte Konten, die für Dienstintegrationen vorgesehen sind. Diese Konten bieten eine differenzierte Kontrolle für bestimmte Dienste und unterliegen keinen Spamprüfungen oder Captcha-Aufforderungen, die Ihre CI-Builds andernfalls blockieren könnten.
So erstellen Sie ein Dienstkonto:
- Öffnen Sie in der Google Cloud Console die Seite Dienstkonten.
- Klicken Sie auf Dienstkonto erstellen, fügen Sie einen Namen und eine Beschreibung hinzu und klicken Sie dann auf Erstellen und fortfahren.
- Wählen Sie im Drop-down-Menü Rolle auswählen die Option Basic und dann Bearbeiter aus.
- Klicken Sie auf Weiter und dann auf Fertig.
Als Nächstes erstellen Sie einen Authentifizierungsschlüssel und laden ihn herunter, mit dem Jenkins sich als das von Ihnen erstellte Dienstkonto authentifizieren kann.
So erstellen und laden Sie den Dienstkontoschlüssel herunter:
- Klicken Sie in der Google Cloud Console auf der Seite Dienstkonten auf die E-Mail-Adresse des erstellten Kontos.
- Wählen Sie Schlüssel aus und klicken Sie dann auf Schlüssel hinzufügen und Neuen Schlüssel erstellen.
- Wählen Sie JSON aus und klicken Sie auf Erstellen.
- Wenn Sie aufgefordert werden, die Datei herunterzuladen, klicken Sie auf OK. Laden Sie die Datei an einen sicheren Ort auf Ihrem Computer herunter. Sie benötigen diese Datei später beim Konfigurieren von Jenkins.
Weitere Informationen zum Erstellen von Dienstkonten finden Sie unter Dienstkonto erstellen.
Erforderliche Google Cloud APIs aktivieren
Mit der Cloud Testing API können Sie Tests in der Google-Infrastruktur ausführen. Sie haben diese API aktiviert, als Sie einen Test mit der gcloud CLI ausgeführt haben. Mit der Cloud Tool Results API können Sie programmatisch auf Ihre Testergebnisse zugreifen.
- Öffnen Sie die API-Bibliothek der Google Developers Console.
- Geben Sie oben in der Firebase Console in der Suchleiste den Namen jeder erforderlichen API ein ( Cloud Testing API und Cloud Tool Results API). Die Übersichtsseite der angeforderten API wird angezeigt.
- Klicken Sie auf der Übersichtsseite der einzelnen APIs auf API aktivieren.
Jenkins installieren und einrichten
Sie können Jenkins CI in Linux, macOS, Windows und vielen anderen Umgebungen installieren und einrichten. Bestimmte Details dieses Codelabs beziehen sich speziell auf die Installation und Ausführung von Jenkins CI unter Linux, einschließlich der Verwendung von Schrägstriche (/) in Dateipfaden.
Wenn Sie Jenkins auf einem Computer mit Linux oder Windows herunterladen und installieren möchten, folgen Sie der Anleitung zum Installieren von Jenkins. Nachdem Sie Jenkins installiert haben, folgen Sie derselben Jenkins-Installationsanleitung, um die Einrichtung abzuschließen und über http://localhost:8080 auf das Jenkins-Dashboard zuzugreifen.
Installierte Plug-ins prüfen
Jenkins unterstützt verschiedene Versionskontrollsysteme. In diesem Codelab verwenden Sie Git, um den vorherigen Test auszuführen. Für eine bessere Ausführung der gcloud CLI müssen Sie das GCloud SDK-Plug-in installieren.
- Klicken Sie im Jenkins-Dashboard auf Jenkins verwalten und dann auf Plug-ins verwalten.
- Suchen Sie nach den Plug-ins Git und GCloud SDK und installieren Sie sie, sofern sie noch nicht installiert sind.
Speicherort des Android- und Google Cloud SDKs konfigurieren
Sie weisen Jenkins nun an, wo es das Google Cloud SDK und das Android SDK finden kann.
So konfigurieren Sie das Google Cloud SDK und das Android-SDK für Jenkins:
- Klicken Sie im Jenkins-Dashboard auf Manage Jenkins (Jenkins verwalten) und dann auf Global Tool Configuration (Global Tool-Konfiguration).
- Klicken Sie im Bereich Google Cloud SDK auf Google Cloud SDK hinzufügen.
- Geben Sie im Feld Name einen Namen für die Google Cloud SDK-Instanz ein, den Sie sich leicht merken können, z. B. „GCloud-SDK“.
- Geben Sie Ihr Google Cloud SDK-Basisverzeichnis ein, z. B.
/opt/google-cloud-sdk
. - Klicken Sie auf Speichern.
- Konfigurieren Sie die systemweiten Eigenschaften für die Android- und Google Cloud SDKs unter Dashboard > Jenkins verwalten > System konfigurieren.
- Klicken Sie das Kästchen Umgebungsvariablen an und klicken Sie auf Hinzufügen.
- Geben Sie im Feld Name ANDROID_HOME ein. Geben Sie im Feld Value (Wert) den Speicherort Ihres Android SDK ein, z. B.
/opt/Android/Sdk
. - Klicken Sie auf das Kästchen Tool Locations (Toolstandorte) und dann auf Add (Hinzufügen). Wählen Sie im Drop-down-Menü Name den Namen der Google Cloud SDK-Instanz aus, die Sie in der globalen Toolkonfiguration hinzugefügt haben.
- Geben Sie im Feld Start den Speicherort Ihres Google Cloud SDK ein, z. B.
/opt/google-cloud-sdk
. - Klicken Sie auf Speichern.
Dienstkonto-Anmeldedaten zu Jenkins hinzufügen
Fügen Sie Jenkins jetzt die Anmeldedaten Ihres gcloud CLI-Dienstkontos hinzu, damit Jenkins sich authentifizieren und gcloud CLI-Befehle erfolgreich ausführen kann.
- Klicken Sie im Jenkins-Dashboard auf Jenkins verwalten und dann auf Anmeldedaten verwalten.
- Klicken Sie im Abschnitt Stores Scope to Jenkins (Auf Jenkins beschränkte Geschäfte) auf den Domainlink (global) und dann auf Add Credentials (Anmeldedaten hinzufügen).
- Wählen Sie im Drop-down-Menü Kind die Option Google-Dienstkonto von privatem Schlüssel aus.
- Geben Sie im Feld Projektname den Namen Ihres Firebase-Projekts ein.
- Wählen Sie JSON-Schlüssel aus, klicken Sie auf Durchsuchen und gehen Sie zum Speicherort, an dem Sie Ihren Dienstkontoschlüssel gespeichert haben.
- Klicken Sie auf Erstellen.
Jetzt können Sie den automatisierten Jenkins-Build für Test Lab konfigurieren.
4. Test Lab-Tests mit Jenkins CI ausführen
Nachdem Sie Jenkins eingerichtet haben, fassen wir alles zusammen und führen den gleichen Test mit Jenkins durch.
Sie können Jenkins so konfigurieren, dass automatisierte Builds und Tests ausgeführt werden, sobald Updates für Ihre App eingecheckt werden. Sie können Jenkins auch so konfigurieren, dass Builds regelmäßig ausgeführt werden. Weitere Informationen zum Konfigurieren von Builds in Jenkins finden Sie unter Automatische Builds konfigurieren.
Jenkins-Projekt erstellen und konfigurieren
Erstellen Sie ein Projekt, um mit Test Lab kontinuierliche Integrationstests für Ihre App durchzuführen.
Jenkins-Projekt erstellen
- Öffnen Sie das Jenkins-Dashboard, indem Sie http://localhost:8080 aufrufen.
- Klicken Sie im Jenkins-Dashboard auf Neues Element.
- Geben Sie im Feld Artikelname einen Namen für Ihr Projekt ein und klicken Sie auf Freestyle-Projekt, um ein Projekt mit einer einzelnen Build-Konfiguration zu erstellen.
- Klicken Sie auf OK. Führen Sie die verbleibenden Abschnitte der Projektkonfiguration nacheinander aus.
Quellcodeverwaltung konfigurieren
- Wählen Sie auf dem Tab Source Code Management (Quellcodeverwaltung) die Option Git aus.
- Geben Sie https://github.com/android/testing-samples.git in das Feld Repository-URL ein.
Build-Umgebung konfigurieren
Im Bereich „Build-Umgebung“ können Sie Build-Eigenschaften konfigurieren. Aktivieren Sie die Google Cloud-Authentifizierung mit den folgenden Schritten:
- Klicken Sie auf dem Tab Build Environment (Build-Umgebung) das Kästchen GCloud SDK authentication (GCloud SDK-Authentifizierung) an und wählen Sie den Installationsnamen aus, den Sie beim Hinzufügen der Google Cloud-Installationsinformationen angegeben haben.
- Wählen Sie im Drop-down-Menü Google-Anmeldedaten die von Ihnen konfigurierten Anmeldedaten für das Dienstkonto aus.
Gradle-Build-Schritte hinzufügen, um APK-Pakete neu zu erstellen
- Scrollen Sie nach unten zum Abschnitt Build, klicken Sie auf Add build step (Build-Schritt hinzufügen) und wählen Sie Execute shell aus.
- Fügen Sie einen Build-Schritt hinzu, um die folgenden Befehle im Hauptverzeichnis Ihrer Anwendung auszuführen:
cd ui/espresso/BasicSample/ ./gradlew assembleDebug # for generating app apk ./gradlew assembleDebugAndroidTest # for generating testing apk
Jenkins einen gcloud CLI-Buildschritt hinzufügen
Jetzt können Sie Jenkins einen Buildschritt hinzufügen, um Test Lab mit der gcloud CLI auszuführen.
Wenn Sie den Buildschritt für die gcloud CLI hinzufügen möchten, fügen Sie einen neuen Buildschritt vom Typ Execute shell hinzu und geben Sie den folgenden Befehl ein:
gcloud config set project PROJECT_ID gcloud firebase test android run \ --app ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/debug/app-debug.apk --test ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
Scrollen Sie nach Abschluss der Projekteinrichtung nach unten und speichern Sie die Konfiguration. Sie werden zur Startseite des neuen Projekts weitergeleitet.
Tests mit Jenkins ausführen
Jetzt sind Sie bereit, das Jenkins-Projekt zu erstellen und einen Test wie den manuellen Test auszuführen, den Sie mit der gcloud CLI ausgeführt haben.
So führen Sie einen Test mit Jenkins aus:
- Wenn Sie den Build manuell auslösen möchten, klicken Sie auf Jetzt erstellen.
- Sie können den Fortschritt und die Ergebnisse prüfen, indem Sie auf den neuen Build > Console Output (Konsolenausgabe) klicken.
Wenn keine Fehler angezeigt werden, haben Sie alles richtig gemacht. Sie haben gerade ein Projekt eingerichtet und mit nur einem Klick einen Test auf einem Pixel 2-Gerät durchgeführt. Falls Fehler auftreten, lesen Sie den Abschnitt Fehlerbehebung.
5. Erweiterte Best Practices zum Ausführen großer Testsuiten
Wenn Sie viele Tests gleichzeitig ausführen möchten, beachten Sie die folgenden Best Practices, damit Ihre Tests schnell und zuverlässig ausgeführt werden.
Abdeckung auf mehreren Gerätekonfigurationen erhöhen
Sie können dem Build-Schritt der gcloud CLI ganz einfach mehrere Geräte hinzufügen. Außerdem können Sie verfügbare Geräte, Versionen, Sprachen und Ausrichtungen prüfen und auswählen. Mit dem folgenden Befehl werden beispielsweise Tests auf zwei Geräten ausgeführt:
- Ein virtuelles Google Pixel 2 mit API-Level 30 im Hochformat und in englischer Sprache
- Ein physisches Samsung Galaxy S20 mit API-Level 29 im Querformat und der französischen Sprache
gcloud firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --device model=Pixel2,version=30,locale=en,orientation=portrait \ --device model=x1q,version=29,locale=fr,orientation=landscape
YAML-Konfigurationsdatei für die gcloud CLI verwenden
Wenn Sie Ihre Argumente lieber an einer Stelle oder mit Ihrem Versionsverwaltungssystem verwalten möchten, können Sie diese Argumente in einer Argumentdatei im YAML-Format angeben. Führen Sie gcloud topic arg-files
aus, um zu erfahren, wie Sie dieses Feature verwenden.
Parallel auszuführende Shard-Tests
Beim Test-Sharding werden mehrere Tests in Untergruppen (Shards) unterteilt, die separat und isoliert ausgeführt werden. Test Lab führt jeden Shard automatisch parallel mit mehreren Geräten aus, sodass Test Lab den gesamten Testsatz schneller abschließen kann. Weitere Informationen finden Sie unter Sharding aktivieren.
Wenn Sie das Sharding aktivieren möchten, verwenden Sie den gcloud beta
-Channel und fügen Sie dem gcloud CLI-Buildschritt entweder das Flag –num-uniform-shards oder –test-targets-for-shard hinzu. Wenn Sie Ihre Tests beispielsweise in fünf Ausführungen aufteilen und parallel ausführen möchten, führen Sie die folgenden Befehle aus:
gcloud beta firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --num-uniform-shards 5
Erkennung von Instabilität aktivieren
Mobile Tests können oft instabil sein. Manchmal sind Tests bestanden, andere schlagen fehl, selbst bei gleicher Einrichtung. Mit dem gcloud-CLI-Flag -num-flaky-test-attempts können Sie feststellen, ob ein fehlgeschlagener Test instabil war. Dieses Flag gibt an, wie oft eine Testausführung wiederholt werden soll, wenn mindestens einer der Testfälle aus irgendeinem Grund fehlschlägt.
Wenn Sie beispielsweise fehlgeschlagene Testläufe nach der ersten fehlgeschlagenen Ausführung noch einmal ausführen möchten, geben Sie Folgendes an:
gcloud beta firebase test android run \ --type instrumentation \ --app app-debug.apk \ --test app-debug-test.apk \ --num-flaky-test-attempts 3
6. Glückwunsch
Herzlichen Glückwunsch! Sie haben Ihren ersten Test Lab-Test mit einem CI-System erfolgreich ausgeführt.
Sie haben App- und Test-APKs erstellt und mit Test Lab über die gcloud CLI einen Instrumentierungstest durchgeführt. Außerdem richten Sie ein Jenkins-Projekt ein, um denselben Test zu automatisieren.
Jetzt kennen Sie die wichtigsten Schritte zur Integration von Test Lab in Ihr CI/CD-System.
Nächste Schritte
Weitere Informationen finden Sie unter CI mit der Firebase Emulator Suite einrichten.
Weitere Informationen
- Tests mit CI-Systemen starten | Firebase-Dokumentation
- Mit der gcloud CLI testen | Firebase-Dokumentation