
Mein Name ist Dmitry, ich arbeite als Tester bei
MEL Science . Zuletzt beschäftigte ich mich mit einer relativ neuen Funktion aus dem
Firebase- Testlabor - nämlich dem instrumentellen Testen von iOS-Anwendungen mit dem nativen XCUITest-Testframework.
Zuvor hatte ich bereits das Firebase Test Lab für Android ausprobiert und mir hat wirklich alles gefallen. Deshalb habe ich beschlossen, die Testinfrastruktur des iOS-Projekts auf die gleiche Spur zu bringen. Ich musste viel googeln und nicht alles hat beim ersten Mal richtig funktioniert, also habe ich beschlossen, einen Tutorial-Artikel für diejenigen zu schreiben, die es noch müssen.
Wenn Sie also UI-Tests für ein iOS-Projekt haben, können Sie versuchen, diese heute auf realen Geräten zu starten, die freundlicherweise von Good Corporation bereitgestellt werden. Interessiert - willkommen bei Katze.
In der Geschichte habe ich beschlossen, auf einigen Quelldaten aufzubauen - einem privaten Repository auf GitHub und dem CircleCI-Build-System. Der Name der Anwendung lautet AmazingApp, bundleID lautet com.company.amazingapp. Ich zitiere diese Daten sofort, um die nachfolgende Verwirrung zu verringern.
Wenn Sie unterschiedliche Lösungen in Ihrem Projekt unterschiedlich implementiert haben, teilen Sie Ihre Erfahrungen in den Kommentaren mit.
1. Die Tests selbst
Erstellen Sie einen neuen Projektzweig für UI-Tests:
$ git checkout develop $ git pull $ git checkout -b “feature/add-ui-tests”
Öffnen Sie das Projekt in Xcode und erstellen Sie ein neues Ziel mit den UI-Tests [XCode -> Datei -> Neu -> Ziel -> iOS-Testpaket]. Geben Sie ihm den sprechenden Namen AmazingAppUITests.

Gehen Sie zum Abschnitt "Erstellungsphasen" des erstellten Ziels und überprüfen Sie, ob Zielabhängigkeiten - AmazingApp - in "Quellen kompilieren - AmazingAppUITests.swift" vorhanden sind.
Es wird empfohlen, die verschiedenen Montageoptionen in separate Schemata zu isolieren. Wir erstellen ein Schema für unsere UI-Tests [XCode -> Produkt -> Schema -> Neues Schema] und geben ihm den gleichen Namen: AmazingAppUITests.
Das erstellte Schema sollte das Ziel der Hauptanwendung enthalten - AmazingApp- und Target-UI-Tests - AmazingAppUITests - siehe Screenshot

Erstellen Sie als Nächstes eine neue Build-Konfiguration für UI-Tests. Klicken Sie in Xcode auf die Projektdatei und gehen Sie zum Abschnitt Info. Klicken Sie auf "+" und erstellen Sie eine neue Konfiguration, zum Beispiel XCtest. Wir werden dies in Zukunft brauchen, um zu vermeiden, dass beim Signieren von Codes mit einem Tamburin getanzt wird.

Ihr Projekt hat mindestens drei Ziele: die Hauptanwendung, Komponententests (weil sie es sind, richtig?) Und die von uns erstellten Ziel-UI-Tests.
Gehen Sie zu Target AmazingApp, Registerkarte Build Settings, Code Signing Identity. Um XCtest zu konfigurieren, wählen Sie iOS Developer. Wählen Sie im Abschnitt Code Signing Style die Option Manual aus. Wir haben das Provisioning-Profil noch nicht erstellt, werden aber etwas später definitiv darauf zurückkommen.
Für Target AmazingAppUITests machen wir dasselbe, aber in der Spalte Product Bundle Identifier geben wir com.company.amazingappuitests ein.
2. Einrichten eines Projekts im Apple Developer Program
Wir gehen zur Seite "Apple Developer Program", gehen zum Abschnitt "Zertifikate, Kennungen und Profile" und dann zur Spalte "App-IDs" des Elements "Kennungen". Erstellen Sie eine neue App-ID mit dem Namen AmazingAppUITests und bundleID com.company.amazingappuitests.

Jetzt haben wir die Möglichkeit, unsere Tests mit einem separaten Zertifikat zu signieren, aber ... Das Erstellungsverfahren zum Testen umfasst das Erstellen der Anwendung selbst und das Erstellen des Testläufers. Dementsprechend stehen wir vor dem Problem, zwei Bundle-IDs mit einem Bereitstellungsprofil zu signieren. Glücklicherweise gibt es eine einfache und elegante Lösung - Wildcard App ID. Wir wiederholen den Vorgang zum Erstellen einer neuen App-ID, wählen jedoch anstelle der expliziten App-ID die Platzhalter-App-ID wie im Screenshot aus.

Wir haben zu diesem Zeitpunkt die Arbeit mit developer.apple.com beendet, aber das Browserfenster wird nicht minimiert. Wir besuchen die
Website mit der Dokumentation zu Fastlane und lesen das Match-Dienstprogramm von Anfang bis Ende.
Ein aufmerksamer Leser bemerkte, dass wir zur Verwendung dieses Dienstprogramms ein privates Repository und ein Konto benötigen, das Zugriff auf das Apple Developer Program und Github hat. Wir erstellen (falls dies plötzlich nicht mehr der Fall ist) ein Konto in der Form InfrastructureAccount@your.company.domain, erstellen ein leistungsstarkes Kennwort, registrieren es in developer.apple.com und ernennen es zum Projektadministrator. Geben Sie Ihrem Konto als Nächstes Zugriff auf das Github-Repository Ihres Unternehmens und erstellen Sie ein neues privates Repository mit einem Namen wie AmazingAppMatch.
3. Konfigurieren von Fastlane und des Match-Dienstprogramms
Öffnen Sie das Terminal, gehen Sie zum Projektordner und initialisieren Sie die Fastlane wie im
offiziellen Handbuch angegeben . Nach Eingabe des Befehls
$ fastlane init
Sie werden aufgefordert, verfügbare Nutzungskonfigurationen auszuwählen. Wir wählen den vierten Punkt - manuelle Projekteinrichtung.

Im Projekt wurde ein neues Fastlane-Verzeichnis angezeigt, in dem sich zwei Dateien befinden - Appfile und Fastfile. Kurz gesagt: In der App-Datei speichern wir Servicedaten und in Fastfile schreiben wir Jobs in der Fastlane-Terminologie, die als Lanes bezeichnet wird. Ich empfehle die offizielle Dokumentation
zu lesen:
eins ,
zwei .
Öffnen Sie die App-Datei in Ihrem bevorzugten Texteditor und bringen Sie sie in das folgende Formular:
app_identifier "com.company.amazingapp"
Wir kehren zum Terminal zurück und beginnen gemäß dem offiziellen Handbuch, die Übereinstimmung zu konfigurieren.
$ fastlane match init $ fastlane match development
Geben Sie als Nächstes die angeforderten Daten ein - Repository, Konto, Passwort usw.
Wichtig: Wenn Sie das Match-Dienstprogramm
zum ersten Mal starten, werden Sie aufgefordert, ein Kennwort einzugeben, um das Repository zu entschlüsseln. Es ist sehr wichtig, dieses Passwort beizubehalten. Bei der Einrichtung des CI-Servers ist es für uns hilfreich!
Eine neue Datei wurde im Fastlane-Ordner - Matchfile - angezeigt. Öffnen Sie in Ihrem bevorzugten Texteditor und bringen Sie zum Formular:
git_url("https://github.com/YourCompany/AmazingAppMatch")
Wir füllen es auf diese Weise aus, wenn wir Match verwenden möchten, um Builds für die Veröffentlichung in Crashlytics und / oder AppStore zu signieren, d. H. Um die Bundle-ID Ihrer Anwendung zu signieren.
Wie wir uns erinnern, haben wir zum Erstellen eines Testbuilds eine spezielle Wildcard-ID erstellt. Öffnen Sie daher Fastfile und geben Sie eine neue Spur ein:
lane :testing_build_for_firebase do match( type: "development", readonly: true, app_identifier: "com.company.*", git_branch: "uitests"
Speichern, in das Terminal eingeben
fastlane testing_build_for_firebase
und sehen Sie, wie fastlane ein neues Zertifikat erstellt und in das Repository gestellt hat. Großartig!
Öffnen Sie Xcode. Jetzt haben wir das erforderliche Bereitstellungsprofil des Unternehmens Match Development com.company. *, Das im Abschnitt Bereitstellungsprofil für die Ziele AmazingApp und AmazingAppUITests angegeben werden muss.

Es bleibt noch eine Spur hinzuzufügen, um die Tests zu erstellen. Wir gehen zum
Repository des Plugin-Projekts für Fastlane, das die Konfiguration des Exports in das Firebase-Testlabor erleichtert und den Anweisungen folgt.
Kopieren Sie aus dem Originalbeispiel, damit unsere Lane testing_build_for_firebase schließlich so aussieht:
lane :testing_build_for_firebase do match( type: "development", readonly: true, app_identifier: "com.company.*", git_branch: "uitests" ) scan( scheme: 'AmazingAppUITests',
Um vollständige Informationen zum Konfigurieren von Fastlane in CircleCI zu erhalten, empfehle ich, die offizielle Dokumentation
eins, zwei zu lesen.
Vergessen Sie nicht, unsere config.yml mit einer neuen Aufgabe hinzuzufügen:
build-for-firebase-test-lab: macos: xcode: "10.1.0" working_directory: ~/project shell: /bin/bash --login -o pipefail steps: - checkout - attach_workspace: at: ~/project - run: sudo bundle install
4. Aber was ist mit unserem Prüfstand? Konfigurieren Sie Firebase.
Wir gehen tatsächlich zu dem über, wofür der Artikel geschrieben wurde.
Möglicherweise verwendet Ihre Anwendung Firebase für einen kostenlosen Tarifplan, möglicherweise wird sie überhaupt nicht verwendet. Es gibt absolut keinen grundsätzlichen Unterschied, denn für Testzwecke können wir ein separates Projekt mit einem Jahr kostenloser Nutzung erstellen (cool, oder?)
Melden Sie sich bei unserem Infrastrukturkonto an (oder einem anderen, kein Unterschied) und
rufen Sie die Firebase-Konsolenseite auf . Erstellen Sie ein neues Projekt namens AmazingAppUITests.
Wichtig: Im vorherigen Schritt im Fastfile in der Spur firebase_test_lab_ios_xctest muss der Parameter gcp_project mit dem Namen des Projekts übereinstimmen.

Die Standardeinstellungen sind bei uns ganz in Ordnung.
Wir schließen die Registerkarte nicht unter demselben Konto, das wir in
Gcloud registrieren. Dies ist eine
notwendige Maßnahme, da die Kommunikation mit Firebase über die gcloud-Konsolenschnittstelle erfolgt.
Google gibt 300 US-Dollar pro Jahr aus, was im Zusammenhang mit der Durchführung von Autotests einem Jahr der kostenlosen Nutzung des Dienstes entspricht. Wir geben die Zahlungsdaten ein, warten auf die Testgebühr von 1 USD und erhalten 300 USD auf das Konto. Nach einem Jahr wird das Projekt automatisch in einen kostenlosen Tarifplan übertragen, sodass Sie sich keine Sorgen über einen möglichen Geldverlust machen sollten.
Kehren wir mit dem Firebase-Projekt zur Registerkarte zurück und übertragen Sie sie in den Blaze-Tarifplan. Jetzt müssen wir etwas bezahlen, falls das Limit überschritten wird.
Wählen Sie in der gcloud-Oberfläche unser Firebase-Projekt aus, wählen Sie den Hauptmenüpunkt "Katalog" und fügen Sie die Cloud-Test-API und die Cloud-Tools-Ergebnis-API hinzu.

Gehen Sie dann zum Menüpunkt "IAM und Administration" -> Dienstkonten -> Dienstkonto erstellen. Wir geben das Recht, das Projekt zu bearbeiten.

Erstellen Sie einen API-Schlüssel im JSON-Format

Wir werden den heruntergeladenen JSON etwas später benötigen, aber vorerst werden wir das Test Lab-Setup als abgeschlossen betrachten.
5. Konfigurieren Sie CircleCI
Eine vernünftige Frage ist das Brauen - was tun mit Passwörtern? Das zuverlässige Speichern unserer Passwörter und anderer vertraulicher Daten hilft uns beim Mechanismus der Umgebungsvariablen unserer Build-Maschine. Wählen Sie in den Einstellungen des CircleCI-Projekts Umgebungsvariablen aus

Und starten Sie die folgenden Variablen:
- Schlüssel: GOOGLE_APPLICATION_CREDENTIALS
Wert: Schlüsseldatei des gcloud-Dienstkontos json - Schlüssel: MATCH_PASSWORD
value: Passwort zum Entschlüsseln des Github-Repositorys mit Zertifikaten - Schlüssel: FASTLANE_PASSWORD
Wert: Kennwort für das Apple Developer Portal-Infrastrukturkonto
Wir speichern die Änderungen, erstellen eine PR und senden sie zur Überprüfung für unseren Teamleiter.
Zusammenfassung
Als Ergebnis dieser einfachen Manipulationen haben wir einen guten, stabilen Arbeitsstand mit der Fähigkeit erhalten, zum Zeitpunkt des Tests Videos auf dem Bildschirm des Geräts aufzuzeichnen. In einem Testfall habe ich ein iPhone X-Gerätemodell angegeben, aber die Farm bietet eine große Auswahl an Kombinationen verschiedener Modelle und Versionen von iOS.
Der zweite Teil ist der schrittweisen Konfiguration des Firebase-Testlabors für ein Android-Projekt gewidmet.