Hallo Habr! Ich präsentiere Ihnen die Übersetzung des Artikels
„WWDC19: Erste Schritte mit dem Testplan für XCTest“ von Shashikant Jagtap.

Auf der letzten
WWDC- Konferenz zeigte Apple Entwicklern coole neue Funktionen. Xcode 11 bietet auch einige fantastische Funktionen. Sie können darüber in den
Versionshinweisen lesen. Eines der wichtigsten in diesem Jahr angekündigten Tools ist der Testplan für XCTest- und Xcode UI-Tests. In diesem Artikel werden wir detailliert untersuchen, wie die Funktionalität von Test Plan mit XCTest funktioniert. Wenn Sie weitere Informationen wünschen, sehen Sie sich das Sitzungsvideo
„Testen auf Xcode“ an.Xcode-Testplan
Vor Xcode 11 war die Testkonfiguration Teil der Xcode-Schemas. Wenn die Entwickler unterschiedliche Testsuiten für unterschiedliche Bedingungen konfigurieren wollten, haben sie entweder eine neue Schaltung erstellt oder eine vorhandene für bestimmte Testanforderungen bearbeitet. Die Testkonfiguration war eng mit Xcode-Schemata verbunden, daher musste ich während des Testens viele Schemata für verschiedene Aufgaben erstellen.
Dank der neuen Funktionalität in Xcode 11 können Entwickler und QS-Ingenieure Tests an ihre Anforderungen anpassen. Mit dem Testplan können Sie Folgendes bestimmen:
- Welche Tests sollen in der Baugruppe ausgeführt werden?
- wie man diese Tests durchführt (zum Beispiel in zufälliger oder alphabetischer Reihenfolge);
- Verwalten von Testartefakten (z. B. Anhänge und Screenshots);
- Verwendung von Laufzeit-Tools als Teil des Testens.
Mit Xcode Test Plan können Sie Testsuiten unabhängig von Xcode-Schemas konfigurieren. Dies ist eine signifikante Verbesserung der Testtechnologie, die Ihre Tests auf die nächste Stufe bringen kann. Schauen wir uns nun den Xcode-Testplan in Aktion an.
Das Skript
Angenommen, wir erstellen einen Testplan für Funktionstests mit den folgenden Anforderungen:
- Funktionstests sollten Kits für Rauch- und Regressionstests enthalten.
- Rauchtests sollten in London (UK) und Regressionstests in San Francisco (USA) durchgeführt werden.
- Rauchtests sollten in alphabetischer Reihenfolge durchgeführt werden, und Regressionstests sollten in zufälliger Reihenfolge durchgeführt werden, um Probleme zwischen den Tests zu erkennen.
Wir werden diesen Testplan für Xcode für verschiedene Apple-Plattformen erstellen.
Erstellen eines Testplans in Xcode
Mit Xcode 11 können wir diese Anforderungen im Testplan definieren. Mit Xcode können Sie einen Testplan aus der aktuellen Schemakonfiguration erstellen. Wenn Sie die Schaltung bearbeiten und mit den aktuellen Testschritten fortfahren, zeigt Xcode eine Option zum Erstellen eines Testplans an. Sie können einen Testplan mit den folgenden Einstellungen erstellen:
- Leerer Testplan: Erstellt eine leere Vorlage und ermöglicht es Ihnen, Ihren eigenen Plan zu erstellen.
- Testplan aus Schema : Nimmt eine Schaltungskonfiguration vor und erstellt einen Testplan.
- Testplan auswählen: Wenn Sie bereits einen Testplan erstellt haben, können Sie diesen auswählen und zum Diagramm hinzufügen.
Um sich vertraut zu machen, erstellen Sie einen Testplan aus der Schaltungskonfiguration.

Sie müssen den Testplan benennen und das richtige Testziel angeben. Wenn ein Testplan erstellt wird, wird er an die Schaltung angeschlossen. Das Schema kann jedoch jeden Testplan überschreiben, der nach Verwendung des Flags beim Aufrufen des Befehls Xcodebuild erstellt wurde. Nachdem Sie einen Testplan erstellt haben, können Sie ihn an ein bestimmtes Ziel anhängen. Fügen wir dem Ziel den aktuellen Plan mit UI-Tests hinzu und geben Sie ihm einen Namen.

Sie finden eine neue Datei mit der Erweiterung function.xctestplan. Dies ist Ihr Testplan. Es kann bei Bedarf bearbeitet werden. Abhängig von den Anforderungen der Tests können Sie einen zusammengesetzten Testplan im selben Ziel erstellen. Zu diesem Zeitpunkt haben wir einen verfügbaren Testplan für unser Ziel mit UI-Tests.
Testplandatei
Die Testplandatei ist eine einfache json-ähnliche Konfigurationsdatei, die Informationen zum Konfigurieren Ihrer Tests für die Ausführung unabhängig von einer Schaltung enthält. Hier sind die verschiedenen Testkonfigurationseinstellungen aufgeführt, die im Testplan verfügbar sind. Der grundlegende Testplan enthält drei Schlüsselelemente:
- Konfigurationen
- Testziele
- Einstellungen
Jede Konfiguration im Testplan enthält eine Reihe von Tests, die mit unterschiedlichen Einstellungen verknüpft sind. Entsprechend den Anforderungen für unseren Testplan benötigen wir zwei Konfigurationen: eine für Rauchtests und eine für Regressionstests.
Öffnen Sie nun die Datei function.xctestplan in Xcode und benennen Sie configuration1 in rauch-uk um. Klicken Sie dann oben im Plan auf die Schaltfläche „+“ und fügen Sie eine weitere Konfiguration für Regression-USA hinzu.
Jetzt haben wir zwei Konfigurationen im Testplan und Testplan ist bereits mit UI-Tests an ein Ziel gebunden. Fügen Sie jeder Konfiguration einige Einstellungen hinzu. Wenn die Konfiguration für Rauch-UK ausgewählt ist, können wir den Standort in London ändern und andere Änderungen an den Einstellungen vornehmen. Ändern Sie in ähnlicher Weise die Konfiguration von Regression-USA. So sieht der Testplan aus, um eine Regression auszulösen:

Im Testplan verfügbare Einstellungen:
- Argumente - Ermöglicht das Überschreiben der Startargumente und der Startumgebung für Tests.
- Lokalisierung - Ermöglicht die Konfiguration von Tests für verschiedene Geolokalisierungen, Gebietsschemas und Sprachen. Dies ist eine sehr coole Einstellung zum Testen der Internationalisierung und Lokalisierung.
- UI-Test / Anhang / Testausführung / Codeabdeckung - spezifische Optionen für UI-Tests und Testartefakte. Sie können entscheiden, ob Sie Artefakte hinterlassen oder sie so schnell wie möglich löschen möchten. Sie können auch die Reihenfolge auswählen, in der die Tests ausgeführt werden, und die Berechnung der Codeabdeckung.
- Xcode-Code-Diagnosetools - Für die Suche nach Laufzeitfehlern stehen verschiedene Xcode-Tools zur Diagnose von Code zur Verfügung, z. B. Address Sanitizer oder Thread Sanitizer. Sie können auch andere Optionen verwenden, mit denen Sie nach Speicherlecks usw. suchen können.
Erstellen eines Testplans von Grund auf neu
Wenn Sie keinen Testplan mit dem Xcode-Schema erstellen möchten, können Sie jederzeit einen neuen Testplan über Xcode -> Produkt -> Testplan erstellen.

Nachdem Sie den Testplan auf diese Weise erstellt haben, fügen wir ihn einem Testziel hinzu, indem wir ihm Tests hinzufügen. Im folgenden Beispiel haben wir einen neuen Testplan erstellt und Tests hinzugefügt.

Erstellen eines Testplans aus der Quelle
Wie bereits erwähnt, ist Xcode Test Plan nur eine Konfigurationsdatei, in der wir alle von uns definierten Konfigurationen installiert haben. In unserem Szenario haben wir function.xctestplan erstellt, und der Quellcode dafür sieht ungefähr so aus:
{ "configurations" : [ { "name" : "smoke-uk", "options" : { "language" : "en-GB", "locationScenario" : { "identifier" : "London, England", "referenceType" : "built-in" }, "region" : "GB", "testExecutionOrdering" : "lexical" } }, { "name" : "Regression-usa", "options" : { "addressSanitizer" : { "enabled" : true }, "language" : "en", "locationScenario" : { "identifier" : "San Francisco, CA, USA", "referenceType" : "built-in" }, "region" : "US", "testExecutionOrdering" : "random" } } ], "defaultOptions" : { "codeCoverage" : false }, "testTargets" : [ { "target" : { "containerPath" : "container:XCTestPlan.xcodeproj", "identifier" : "9B0E393A22A6EB5400F666A1", "name" : "XCTestPlanUITests" } } ], "version" : 1 }
Sie können die Konfiguration auf diese Weise erstellen und in einer Datei mit der Erweiterung .xctestplan in Xcode 11 speichern.
Starten Sie den Testplan
Jetzt verstehen wir den Prozess des Erstellens einer Testplandatei in Xcode. Mal sehen, wie man Testplan ausführt und Berichte in Xcode erhält. Sie können Tests über Xcode -> Produkt -> Test wie gewohnt ausführen, indem Sie die angehängten Testpläne für das Schema ausführen. In unserem Fall werden dadurch beide Testkonfigurationen gestartet - Rauch und Regression.
In Xcodebuild gibt es mehrere Befehlszeilenoptionen zum Anzeigen und Ausführen von Testplänen. Sie können den folgenden Befehl ausführen:
$ Xcodebuild -showTestPlans -scheme YOUR_SCEME
Es werden alle Testpläne für den aktuellen Stromkreis angezeigt. Sie können auch einen separaten Test ausführen:
$ Xcodebuild -project XCTestPlan.Xcodeproj/ -scheme XCTestPlan -destination 'platform=iOS Simulator,OS=13.0,name=iPhone XR' test -testPlan functional
Dieses Skript führt den Test mithilfe der Testplankonfiguration aus.
Testplanberichte
Nachdem Sie die Tests für einen bestimmten Testplan ausgeführt haben, können Sie die in Xcode generierten guten Berichte anzeigen. Berichte werden für jede Konfiguration separat generiert.

In Xcode können Sie im Abschnitt Testnavigator Berichte nach Testplänen filtern. Xcode-Testplanberichte können auf dem Xcode-Server konfiguriert werden.
Demo-Quellcode auf Github verfügbar: XCTestPlanXcode-Testplan: Anwendung
Kurz darüber, wo der Xcode-Testplan verwendet werden kann und wie er sich je nach Konfiguration der Schaltung ändert. Hier einige Beispiele für die Verwendung des Xcode-Testplans:
- Verschiedene Arten von Tests, wie in der Demo gezeigt: Rauch, Regression usw.;
- Testen der Internationalisierung und Lokalisierung der Anwendung Wenn Sie Ihre Anwendung beispielsweise für mehrere Sprachen testen möchten, können Sie verschiedene Konfigurationen erstellen.
- Führen Sie schwere Tests wie Leistungs- und Stresstests durch und trennen Sie sie von Funktionstests. Sie können Tests für die Arbeit zusammen mit Codediagnosetools oder anderen nicht funktionierenden Tests konfigurieren.
Viele andere Szenarien sind ebenfalls möglich, in denen Xcode-Testpläne zur Erweiterung des Testprozesses beitragen können.
Fazit
Mit dem Xcode-Testplan kann XCTest auf die nächste Ebene gebracht werden, indem Sie Ihre Konfiguration verwalten und Ihre Tests ausführen können. Mit Xcode Test Plans haben Sie eine bessere Kontrolle über die Apple-basierte Testplattform.