iOS-Testing-Automation-Framework
Robots, locators auto-réparants, diffs de captures d'écran, audits d'accessibilité et rapports CI pour XCUITest.
Licence: MIT
Un package Swift sans dépendance pour les tests UI et les tests unitaires des apps iOS et macOS. Dans XCUITest, il ajoute des robots, des recherches qui survivent au renommage d'un accessibility identifier, un audit d'accessibilité, une comparaison de captures d'écran avec une image de différence, et des rapports JUnit et Markdown pour la CI. Dans n'importe quelle target de test, Swift Testing ou XCTest, il ajoute des snapshots SwiftUI, des attentes par polling, des retries, des spies et des données de test seedées. Les règles derrière ces helpers sont du Swift simple et couvertes par des tests unitaires ; la couche XCUITest est exercée par les tests UI d'une app d'exemple sur un simulateur iPhone.
Fonctionnalités
- Robots : une classe par écran dont les actions attendent que l'élément soit hittable, apparaissent comme des étapes nommées dans le rapport de test d'Xcode et signalent les échecs à la ligne du test
- Recherches auto-réparantes : Locator et LocatorHealer se replient sur le label, le placeholder ou l'identifiant le plus similaire, journalisent la correction dans HealingLog et refusent de deviner entre des correspondances également bonnes
- Audit d'accessibilité avec cinq règles (labels manquants, images sans label, cibles tactiles sous 44 × 44 pt, labels qui répètent le type d'élément, identifiants dupliqués), optionnellement combiné avec performAccessibilityAudit() d'Apple
- Comparaison de captures d'écran et de snapshots SwiftUI avec des PNG de référence (baseline), avec une tolérance, des régions ignorées et une image de différence ; une baseline manquante est enregistrée et le test échoue
- junit.xml et un résumé de job Markdown réécrits après chaque test, avec les secrets enregistrés et les motifs d'identifiants masqués, plus FlakinessAnalyzer pour les résultats de plusieurs runs de CI
- typeSecret colle les mots de passe au lieu de les taper, afin que les titres d'activité propres à XCTest ne les contiennent jamais ; la CI recherche les mots de passe de test dans le result bundle
- Helpers de tests unitaires : Wait.until, RetryPolicy, Spy et ThrowingSpy, Fixtures seedées et Benchmark
- Aucune dépendance et aucun import de Swift Testing, afin que le package se linke dans les bundles de tests UI ; 118 tests Swift Testing, 9 tests UI dans l'app d'exemple AutomationShowcase, et un catalogue DocC avec quatre articles
Démarrage rapide
1import XCTest2import iOSTestingAutomationFramework3 4final class CounterRobot: Robot {5 var label: XCUIElement { app.staticTexts["counter.label"] }6 var button: XCUIElement { app.buttons["counter.button"] }7}8 9final class CounterUITests: XCTestCase {10 @MainActor11 func testTappingCounts() {12 let app = XCUIApplication()13 app.launch()14 15 let counter = app.on(CounterRobot.self)16 counter17 .tap(counter.button)18 .tap(counter.button)19 .assertLabel(of: counter.label, equals: "Tapped 2 times")20 }21}Installation
Xcode (File › Add Package Dependencies…)
1https://github.com/muhittincamdali/iOS-Testing-Automation-Framework.gitSwift Package Manager
1dependencies: [2 .package(url: "https://github.com/muhittincamdali/iOS-Testing-Automation-Framework.git", from: "2.0.0")3],4targets: [5 .testTarget(name: "YourAppTests", dependencies: [6 .product(name: "iOSTestingAutomationFramework", package: "iOS-Testing-Automation-Framework")7 ])8]Captures d'écran


Chronologie
Dépôt ouvert en tant que framework d'automatisation de tests ; la majeure partie de la semaine suivante a été consacrée à la documentation
v1.0.0 publiée avec une liste de fonctionnalités pilotée par le README, après un travail sur le README, les issue templates et la CI/CD débuté le 28 janvier ; les changements du README et de la doc se sont poursuivis jusqu'au 5 février
Sources remplacées par du code espace réservé : un moteur de régression visuelle qui ne comparait rien, un auditeur d'accessibilité qui se contentait d'imprimer, et une target de test qui ne compilait plus
v2.0.0 : reconstruit sur Swift 6 avec des règles testées derrière chaque helper UI, une app d'exemple avec des tests UI en CI, DocC, et les parties utiles d'iOSTestingTools fusionnées