Test Lab in Ihr CI/CD-System einbinden

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 Instrumentierungstests app-debug-test-unaligned.apk, die sich in NotePad/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

  1. Laden Sie das Google Cloud SDK herunter, in dem das gcloud CLI-Tool enthalten ist.
  2. Prüfen Sie, ob Ihre Installation auf dem neuesten Stand ist:
gcloud components update
  1. Melden Sie sich mit Ihrem Google-Konto in der gcloud CLI an:
gcloud auth login
  1. 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:

  1. Öffnen Sie in der Google Cloud Console die Seite Dienstkonten.
  2. Klicken Sie auf Dienstkonto erstellen, fügen Sie einen Namen und eine Beschreibung hinzu und klicken Sie dann auf Erstellen und fortfahren.
  3. Wählen Sie im Drop-down-Menü Rolle auswählen die Option Basic und dann Bearbeiter aus.
  4. 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:

  1. Klicken Sie in der Google Cloud Console auf der Seite Dienstkonten auf die E-Mail-Adresse des erstellten Kontos.
  2. Wählen Sie Schlüssel aus und klicken Sie dann auf Schlüssel hinzufügen und Neuen Schlüssel erstellen.
  3. Wählen Sie JSON aus und klicken Sie auf Erstellen.
  4. 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.

  1. Öffnen Sie die API-Bibliothek der Google Developers Console.
  2. 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.
  3. 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.

  1. Klicken Sie im Jenkins-Dashboard auf Jenkins verwalten und dann auf Plug-ins verwalten.
  2. 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:

  1. Klicken Sie im Jenkins-Dashboard auf Manage Jenkins (Jenkins verwalten) und dann auf Global Tool Configuration (Global Tool-Konfiguration).
  2. Klicken Sie im Bereich Google Cloud SDK auf Google Cloud SDK hinzufügen.
  3. 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“.
  4. Geben Sie Ihr Google Cloud SDK-Basisverzeichnis ein, z. B. /opt/google-cloud-sdk.
  5. Klicken Sie auf Speichern.
  6. Konfigurieren Sie die systemweiten Eigenschaften für die Android- und Google Cloud SDKs unter Dashboard > Jenkins verwalten > System konfigurieren.
  7. Klicken Sie das Kästchen Umgebungsvariablen an und klicken Sie auf Hinzufügen.
  8. 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.
  9. 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.
  10. Geben Sie im Feld Start den Speicherort Ihres Google Cloud SDK ein, z. B. /opt/google-cloud-sdk.
  11. 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.

  1. Klicken Sie im Jenkins-Dashboard auf Jenkins verwalten und dann auf Anmeldedaten verwalten.
  2. 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).
  3. Wählen Sie im Drop-down-Menü Kind die Option Google-Dienstkonto von privatem Schlüssel aus.
  4. Geben Sie im Feld Projektname den Namen Ihres Firebase-Projekts ein.
  5. Wählen Sie JSON-Schlüssel aus, klicken Sie auf Durchsuchen und gehen Sie zum Speicherort, an dem Sie Ihren Dienstkontoschlüssel gespeichert haben.
  6. 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

  1. Öffnen Sie das Jenkins-Dashboard, indem Sie http://localhost:8080 aufrufen.
  2. Klicken Sie im Jenkins-Dashboard auf Neues Element.
  3. 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.
  4. Klicken Sie auf OK. Führen Sie die verbleibenden Abschnitte der Projektkonfiguration nacheinander aus.

Quellcodeverwaltung konfigurieren

  1. Wählen Sie auf dem Tab Source Code Management (Quellcodeverwaltung) die Option Git aus.
  2. 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:

  1. 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.
  2. 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

  1. Scrollen Sie nach unten zum Abschnitt Build, klicken Sie auf Add build step (Build-Schritt hinzufügen) und wählen Sie Execute shell aus.
  2. 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:

  1. Wenn Sie den Build manuell auslösen möchten, klicken Sie auf Jetzt erstellen.
  2. 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

Referenzdokumente