E2E-Tests von Swift-Apps: Von XCUITest bis zu realen Anwendungsfällen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Warum E2E-Tests der „Gott-Modus“ für iOS-Entwickler sind?

\n\n

Stellen Sie sich vor: Sie haben perfekten Swift-Code geschrieben, alles kompiliert, die Unit-Tests sind grün. Sie veröffentlichen einen Release – und eine Stunde später hagelt es Bugs: Der „Kaufen“-Button funktioniert nicht auf dem iPhone 14 Pro, und auf dem iPad Mini sieht der Anmeldebildschirm aus wie abstrakte Kunst. Kommt Ihnen bekannt vor? Genau hier kommt E2E-Testing von Swift ins Spiel – der einzige Weg, um sicherzustellen, dass Ihre App in den Händen eines echten Benutzers wie am Schnürchen läuft.

\n\n

End-to-End (E2E)-Tests simulieren ein vollständiges Benutzerszenario: vom Start der App bis zur Ausführung der Zielaktion (Kauf, Registrierung, Formularabsendung). In diesem Artikel zeigen wir Ihnen, wie Sie XCUITest Swift so einrichten, dass Ihre Tests nicht aus nichtigen Gründen fehlschlagen und Ihre CI/CD-Pipeline nicht zur Hölle wird.

\n\n

Was Sie lernen werden:

\n
    \n
  • Wie man stabile UI-Tests mit XCUITest schreibt
  • \n
  • Page Object Model für Swift – ein praktisches Beispiel
  • \n
  • Umgang mit asynchronen Operationen und Wartezeiten
  • \n
  • Integration von E2E-Tests in CI/CD (GitHub Actions + Fastlane)
  • \n
  • Die Top-3 Anfängerfehler und wie man sie vermeidet
  • \n
\n\n

Werkzeuge: Was wir brauchen

\n\n

Für die Testautomatisierung von Swift verwenden wir drei Säulen:

\n
    \n
  1. XCUITest – ein Framework von Apple, integriert in XCTest. Ermöglicht die Emulation von Gesten und die Überprüfung von UI-Element-Zuständen.
  2. \n
  3. Xcode Test Plan – zur Konfiguration von Testschemata (verschiedene Sprachen, Ausrichtungen, Daten).
  4. \n
  5. Fastlane + GitHub Actions – zum Ausführen von Tests in CI.
  6. \n
\n\n

Die grundlegende Syntax von XCUITest ist einfach: Sie erhalten Zugriff auf die App über XCUIApplication(), suchen Elemente über buttons["Login"] oder textFields["email"] und simulieren Aktionen.

\n\n

Den ersten E2E-Test schreiben: Ein Login-Szenario

\n\n

Angenommen, wir haben einen Anmeldebildschirm mit den Feldern E-Mail, Passwort und einem „Anmelden“-Button. Ziel: Überprüfen, ob der Benutzer bei Eingabe korrekter Daten zum Hauptbildschirm weitergeleitet wird.

\n\n
import XCTest\n\nclass LoginE2ETests: XCTestCase {\n    \n    let app = XCUIApplication()\n    \n    override func setUpWithError() throws {\n        continueAfterFailure = false\n        app.launch()\n    }\n    \n    func testSuccessfulLogin() throws {\n        // 1. Elemente finden\n        let emailField = app.textFields["emailTextField"]\n        let passwordField = app.secureTextFields["passwordTextField"]\n        let loginButton = app.buttons["signInButton"]\n        \n        // 2. Benutzeraktionen\n        emailField.tap()\n        emailField.typeText("user@example.com")\n        \n        passwordField.tap()\n        passwordField.typeText("ValidPassword123")\n        \n        loginButton.tap()\n        \n        // 3. Ergebnis überprüfen\n        let dashboard = app.staticTexts["dashboardTitle"]\n        XCTAssertTrue(dashboard.waitForExistence(timeout: 5))\n    }\n}
\n\n

Wichtiger Punkt: Verwenden Sie waitForExistence(timeout:) – ohne dies kann der Test fehlschlagen, wenn eine Animation oder eine Netzwerkanfrage Verzögerungen verursacht. Das ist die Grundlage des E2E-Testings von Swift.

\n\n

Warum könnte dieser Code fehlschlagen?

\n
    \n
  • Das Eingabefeld ist möglicherweise nicht der erste Responder – fügen Sie .tap() vor typeText hinzu.
  • \n
  • Der Button könnte von der Tastatur verdeckt sein – verwenden Sie app.keyboards.buttons["Return"].tap().
  • \n
  • Textbezeichnungen können je nach Lokalisierung variieren – verwenden Sie immer Accessibility Identifier.
  • \n
\n\n

Page Object Model (POM) für Swift: Tests sauber halten

\n\n

Wenn die App wächst, werden Tests schnell unübersichtlich. Die Lösung ist das Page Object Model. Wir erstellen separate Klassen für jeden Bildschirm, die die Logik zum Auffinden von Elementen und Aktionen kapseln.

\n\n

Beispiel für den Anmeldebildschirm:

\n\n
// Lo                

Blogs

Buchempfehlungen