1. Einführung
Zuletzt aktualisiert: 07.04.2022
Mobile Tests mit CI/CD-Systemen ausführen
Mobile Tests können schwierig sein, da viele Apps auf verschiedenen Plattformen, Geräten und API-Versionen ausgeführt werden. App-Entwickler möchten ihre Apps auf möglichst vielen Konfigurationen testen, um Probleme zu erkennen, bevor ihre Nutzer sie bemerken. Kosten- und Ressourcenbeschränkungen begrenzen jedoch die Anzahl der Testgeräte und den Umfang der manuellen Wartung, die einzelne Entwickler investieren können. Wenn der Entwicklungsprozess skaliert wird, insbesondere für CI/CD-Systeme (Continuous Integration/Continuous Development), muss der Testprozess automatisiert werden, während Kosten und Wartungsaufwand minimiert werden.
Damit Sie nachvollziehen können, wie Ihre Apps auf den Geräten Ihrer Nutzer funktionieren, hostet Firebase Test Lab eine Reihe von physischen und virtuellen Mobilgeräten in unseren Rechenzentren. Wir stellen auch die Google Cloud CLI zur Verfügung, ein plattformunabhängiges Befehlszeilentool, mit dem Tests auf den Geräten in unseren Rechenzentren ausgeführt werden können. Mit der gcloud CLI lässt sich die cloudbasierte Testlösung von Test Lab ganz einfach in vorhandene CI/CD-Workflows einbinden.
Plattformübergreifende Unterstützung
Test Lab bietet Testlösungen für Android- und iOS-Apps sowie spezielle Unterstützung für mobile Spiele wie Unity. Die Testoptionen umfassen beliebte Test-Frameworks wie Android Espresso, UI Automator und iOS XCTest. Mit unserem automatisierten Crawler Robo können in Test Lab sogar Tests ohne Testcode ausgeführt werden.
Keine Hardwareanforderungen
In Test Lab werden physische Geräte in Google-Rechenzentren und virtuelle Geräte in Google Cloud gehostet. Sie müssen Ihre Tests nur an Test Lab senden und auf die Ergebnisse warten.
Schnell und zuverlässig
Wenn viele Testläufe gleichzeitig ausgeführt werden, kann das lange dauern und CI/CD-Prozesse blockieren. Mit Test Lab können Sie Tests ganz einfach aufteilen und parallel auf mehreren Geräten ausführen. Außerdem können Sie Flakiness erkennen, ein häufiges Problem beim Testen von Mobilgeräten.
Lerninhalte
- Testartefakte erstellen
- Mobilen Test mit der gcloud CLI ausführen
- Jenkins CI einrichten
- Mobile Tests mit Jenkins CI ausführen
- Tests für die Skalierung mit CI-Systemen konfigurieren
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 alles selbst erstellen möchten, benötigen Sie Android Studio, um einen Android-Test auszuführen, oder Xcode, um einen iOS-Test auszuführen. Oder Sie kommen einfach vorbei und wir stellen die Artefakte zur Verfügung.
2. Test mit der gcloud CLI ausführen
APK für Android-App und Test-APK erstellen
Wenn Sie einen Test mit Test Lab ausführen möchten, erstellen Sie zuerst ein Android-App-APK und ein Test-APK, das instrumentierte Tests enthält, die auf Hardwaregeräten oder Emulatoren ausgeführt werden sollen. 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 nicht auf Ihrem Computer 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 beispielsweise in der Datei ~/.bash_profile
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 die App-APK und die Test-APK an den folgenden Speicherorten:
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 zu erhalten:
- Wenn Sie APKs in Android Studio erstellen möchten, folgen Sie der Anleitung unter In Android Studio testen.
- Laden Sie die Notepad-Beispiel-App herunter. Verwenden Sie die Binärdatei
app-debug-unaligned.apk
und die Datei mit den 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 eine ZIP-Datei aus der App und den Tests erstellen.
Test mit Test Lab über die gcloud CLI ausführen
In diesem Abschnitt erstellen Sie ein Firebase-Projekt und konfigurieren Ihre lokale Google Cloud SDK-Umgebung. Weitere Informationen finden Sie unter Mit der gcloud CLI testen .
Die gcloud CLI einrichten
- Laden Sie das Google Cloud SDK herunter, das das gcloud-CLI-Tool enthält.
- 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.
PROJECT_ID
ist dabei Ihre Firebase-Projekt-ID. Sie finden die Projekt-ID in der Firebase Console-URL, die dieser Namenskonvention folgt: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 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-App-APK und Test-APK erstellen“ erstellt haben, mit dem folgenden Befehl einen Android-Instrumentationstest 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 haben die folgenden Möglichkeiten, die Testergebnisse zu analysieren:
gcloud
summary: Wenn Ihr Test abgeschlossen ist, 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 CLI 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. Wenn Sie die JUnit-XML-Datei mit den Testergebnissen aufrufen möchten, ö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 für das Ausführen großer Testsuiten und die Dokumentation für andere CI-Systeme wie Bitrise und Circle CI. Alternativ zur gcloud CLI können Sie Flank verwenden.
gcloud CLI 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 die Integration von Diensten vorgesehen sind. Diese Konten bieten eine detaillierte Steuerung für bestimmte Dienste und unterliegen keinen Spamprüfungen oder Captcha-Aufforderungen, die Ihre CI-Builds blockieren könnten.
So erstellen Sie ein Dienstkonto:
- Öffnen Sie die Seite Dienstkonten in der Google Cloud Console.
- 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 und laden Sie einen Authentifizierungsschlüssel herunter, mit dem sich Jenkins 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 von Ihnen erstellten Kontos.
- Wählen Sie Schlüssel aus, klicken Sie auf Schlüssel hinzufügen und dann auf 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, wenn Sie Jenkins konfigurieren.
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 den 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 in der Suchleiste oben in der Firebase Console den Namen jeder erforderlichen API ein ( Cloud Testing API und Cloud Tool Results API). Die Übersichtsseite für die angeforderte API wird angezeigt.
- Klicken Sie auf der Übersichtsseite jeder API auf API aktivieren.
Jenkins installieren und einrichten
Sie können Jenkins CI unter Linux, macOS, Windows und in 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ägstrichen (/) in Dateipfaden.
Wenn Sie Jenkins auf einem Computer mit Linux oder Windows herunterladen und installieren möchten, folgen Sie der Anleitung zur Installation von Jenkins. Nach der Installation von Jenkins folgen Sie derselben 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. Um die gcloud CLI optimal nutzen zu können, müssen Sie das GCloud SDK-Plug-in installieren.
- Klicken Sie im Jenkins-Dashboard auf Manage Jenkins (Jenkins verwalten) und dann auf Manage Plugins (Plug-ins verwalten).
- Suchen Sie nach den Git- und GCloud SDK-Plug-ins und installieren Sie sie, falls sie noch nicht installiert sind.
Speicherort Ihrer Android- und Google Cloud SDKs konfigurieren
Sie weisen Jenkins nun an, wo das Google Cloud SDK und das Android SDK zu finden sind.
So konfigurieren Sie die Google Cloud- und Android-SDKs für Jenkins:
- Klicken Sie im Jenkins-Dashboard auf Manage Jenkins (Jenkins verwalten) und dann auf Global Tool Configuration (Globale Tool-Konfiguration).
- Klicken Sie im Bereich Google Cloud SDK auf Google Cloud SDK hinzufügen.
- Geben Sie im Feld Name einen leicht zu merkenden Namen für die Google Cloud SDK-Instanz ein, z. B. GCloud-SDK.
- Geben Sie das Google Cloud SDK-Home-Verzeichnis ein, z. B.
/opt/google-cloud-sdk
. - Klicken Sie auf Speichern.
- Konfigurieren Sie Ihre systemweiten Eigenschaften für die Android- und Google Cloud-SDKs, indem Sie Dashboard > Manage Jenkins > Configure System öffnen.
- 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 das Kästchen Tool Locations (Tool-Standorte) an 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 Tool-Konfiguration hinzugefügt haben.
- Geben Sie im Feld Home den Speicherort Ihres Google Cloud SDK ein, z. B.
/opt/google-cloud-sdk
. - Klicken Sie auf Speichern.
Anmeldedaten für das Dienstkonto in Jenkins hinzufügen
Fügen Sie nun die Anmeldedaten Ihres gcloud CLI-Dienstkontos zu Jenkins hinzu, damit Jenkins sich authentifizieren und gcloud CLI-Befehle erfolgreich ausführen kann.
- Klicken Sie im Jenkins-Dashboard auf Manage Jenkins (Jenkins verwalten) und dann auf Manage Credentials (Anmeldedaten verwalten).
- Klicken Sie im Abschnitt Stores scoped to Jenkins (Auf Jenkins beschränkte Speicher) auf den Domainlink (global) und dann auf Add Credentials (Anmeldedaten hinzufügen).
- Wählen Sie im Drop-down-Menü Kind die Option Google Service Account from private key aus.
- Geben Sie im Feld Projektname den Namen Ihres Firebase-Projekts ein.
- Wählen Sie JSON-Schlüssel aus, klicken Sie auf Durchsuchen und suchen Sie den 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, wollen wir alles zusammenfügen und denselben Test mit Jenkins ausführen.
Sie können Jenkins so konfigurieren, dass automatisierte Builds und Tests ausgeführt werden, wenn 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 Continuous Integration-Tests Ihrer App mit Test Lab auszuführen.
Jenkins-Projekt erstellen
- Öffnen Sie das Jenkins-Dashboard, indem Sie http://localhost:8080 aufrufen.
- Klicken Sie im Jenkins-Dashboard auf New Item (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 nacheinander aus, um die Projektkonfigurationen abzuschließen.
Quellcodeverwaltung konfigurieren
- Wählen Sie auf dem Tab Source Code Management (Quellcodeverwaltung) Git aus.
- Geben Sie im Feld Repository URL (Repository-URL) https://github.com/android/testing-samples.git ein.
Build-Umgebung konfigurieren
Im Abschnitt „Build Environment“ (Build-Umgebung) können Sie die Build-Merkmale konfigurieren. So aktivieren Sie die Google Cloud-Authentifizierung:
- Wählen Sie auf dem Tab Build Environment (Build-Umgebung) das Kästchen GCloud SDK authentication (GCloud SDK-Authentifizierung) aus und wählen Sie den Installationsnamen aus, den Sie beim Hinzufügen Ihrer Google Cloud-Installationsinformationen angegeben haben.
- Wählen Sie im Drop-down-Menü Google Credentials (Google-Anmeldedaten) die von Ihnen konfigurierten Dienstkonto-Anmeldedaten aus.
Gradle-Build-Schritte zum Neuerstellen von APK-Paketen hinzufügen
- Scrollen Sie nach unten zum Bereich Build, klicken Sie auf Build-Schritt hinzufügen und wählen Sie dann Shell ausführen 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
gcloud CLI-Build-Schritt in Jenkins hinzufügen
Jetzt können Sie Jenkins einen Build-Schritt hinzufügen, um Test Lab über die gcloud CLI-Befehlszeile auszuführen.
Wenn Sie den gcloud CLI-Build-Schritt hinzufügen möchten, fügen Sie einen neuen Execute shell-Build-Schritt 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
Nachdem Sie die Projekteinrichtung abgeschlossen haben, scrollen Sie auf der Seite nach unten und speichern Sie die Konfiguration. Sie werden zur Startseite des neuen Projekts weitergeleitet.
Tests mit Jenkins ausführen
Jetzt können Sie das Jenkins-Projekt erstellen und einen Test wie den manuellen Test ausführen, den Sie mit der gcloud CLI ausgeführt haben.
So führen Sie Tests mit Jenkins aus:
- Klicken Sie auf Build Now, um den Build manuell auszulösen.
- Klicken Sie auf den neuen Build > Console Output, um den Fortschritt und die Ergebnisse zu sehen.
Wenn keine Fehler angezeigt werden, herzlichen Glückwunsch! Sie haben gerade ein Projekt eingerichtet und mit einem Klick einen Test auf einem Pixel 2-Gerät ausgeführt. Wenn Fehler auftreten, finden Sie weitere Informationen unter Fehlerbehebung.
5. Best Practices für das Ausführen großer Testsuites
Wenn Sie viele Tests gleichzeitig ausführen möchten, sollten Sie diese Best Practices befolgen, damit die Tests schnell und zuverlässig ausgeführt werden.
Abdeckung für mehrere Gerätekonfigurationen erhöhen
Sie können dem gcloud CLI-Build-Schritt ganz einfach mehrere Geräte hinzufügen. Sie können verfügbare Geräte, Versionen, Gebietsschemas und Ausrichtungen 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 mit englischer Sprache
- Ein physisches Samsung Galaxy S20 mit API-Level 29 im Querformat und mit der französischen Spracheinstellung
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 der gcloud CLI verwenden
Wenn Sie Ihre Argumente lieber an einem Ort oder mit Ihrem Versionsverwaltungssystem verwalten möchten, können Sie sie in einer Argumentdatei im YAML-Format angeben. Führen Sie gcloud topic arg-files
aus, um zu erfahren, wie Sie diese Funktion verwenden.
Tests für die parallele Ausführung in Shards aufteilen
Beim Test-Sharding wird eine Reihe von Tests in Untergruppen (Shards) unterteilt, die separat und isoliert ausgeführt werden. In Test Lab wird jeder Shard automatisch parallel auf mehreren Geräten ausgeführt. So kann Test Lab den gesamten Satz von Tests schneller abschließen. Weitere Informationen finden Sie unter Sharding aktivieren.
Wenn Sie Sharding aktivieren möchten, verwenden Sie den gcloud beta
-Channel und fügen Sie dem gcloud CLI-Build-Schritt 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
Flakiness-Erkennung aktivieren
Mobile Tests sind oft instabil. Manchmal bestehen Tests, manchmal schlagen sie fehl, obwohl die Einrichtung gleich ist. Mit dem gcloud CLI-Flag –num-flaky-test-attempts können Sie erkennen, ob ein fehlgeschlagener Test fehleranfällig war. Mit diesem Flag wird angegeben, wie oft ein Testlauf wiederholt werden soll, wenn einer oder mehrere Testläufe aus irgendeinem Grund fehlschlagen.
Wenn Sie beispielsweise fehlgeschlagene Testläufe nach dem ersten fehlgeschlagenen Lauf dreimal wiederholen 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 ausgeführt.
Sie haben App- und Test-APKs erstellt und mit der gcloud CLI einen Instrumentierungstest mit Test Lab ausgeführt. Außerdem richten Sie ein Jenkins-Projekt ein, um denselben Test zu automatisieren.
Jetzt kennen Sie die wichtigsten Schritte, um Test Lab in Ihr CI/CD-System einzubinden.
Nächste Schritte
Informationen zum Einrichten von CI mit der Firebase Emulator Suite