iOS-Testing-Automation-Framework
XCUITest için robotlar, kendini onaran locator'lar, screenshot farkları, erişilebilirlik denetimi ve CI raporları.
Lisans: MIT
iOS ve macOS uygulamalarının UI ve unit testleri için bağımlılıksız bir Swift paketi. XCUITest'te robotlar, accessibility identifier'ı değişse de elementi bulan aramalar, bir erişilebilirlik denetimi, fark görselli screenshot karşılaştırması ve CI için JUnit ve Markdown raporları ekler. Swift Testing ya da XCTest fark etmeksizin her test target'ında SwiftUI snapshot'ları, polling ile bekleme, retry, spy'lar ve seed'li test verisi sunar. Bu yardımcıların arkasındaki kurallar saf Swift'tir ve unit testlerle kapsanır; XCUITest katmanı bir örnek uygulamanın UI testleriyle iPhone simülatöründe sınanır.
Özellikler
- Robotlar: ekran başına bir sınıf; action'ları element dokunulabilir olana kadar bekler, Xcode'un test raporunda isimli adım olarak görünür ve hatayı testin satırına yazar
- Kendini onaran aramalar: Locator ve LocatorHealer; label'a, placeholder'a ya da en benzer identifier'a geri düşer, düzeltmeyi HealingLog'a yazar ve eşit iyi iki aday arasında tahmin yürütmez
- Beş kurallı erişilebilirlik denetimi (eksik label, etiketsiz görsel, 44 × 44 pt altındaki dokunma alanı, element türünü tekrarlayan label, tekrar eden identifier); istenirse Apple'ın performAccessibilityAudit()'i ile birlikte
- Screenshot ve SwiftUI snapshot'larını baseline PNG'lerle karşılaştırma; tolerans, yok sayılan bölgeler ve fark görseliyle. Eksik baseline kaydedilir ve test başarısız olur
- Her testten sonra yeniden yazılan junit.xml ve Markdown job özeti; kayıtlı secret'lar ve credential kalıpları maskelenir. Birden çok CI koşusunun sonuçları için FlakinessAnalyzer
- typeSecret, parolaları yazmak yerine yapıştırır; böylece XCTest'in kendi activity başlıklarında görünmezler. CI, result bundle'da test parolalarını arar
- Unit test yardımcıları: Wait.until, RetryPolicy, Spy ve ThrowingSpy, seed'li Fixtures ve Benchmark
- Bağımlılık yok ve Swift Testing import edilmez, bu yüzden paket UI test bundle'larında link edilebilir; 118 Swift Testing testi, AutomationShowcase örnek uygulamasında 9 UI testi ve dört makaleli bir DocC kataloğu
Hızlı Başlangıç
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}Kurulum
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]Ekran Görüntüleri


Zaman Çizelgesi
Repo bir test otomasyon framework'ü olarak açıldı; sonraki haftanın büyük kısmı dokümantasyona gitti
v1.0.0, README'ye dayalı bir özellik listesiyle yayınlandı; öncesinde 28 Ocak'ta başlayan README, issue şablonu ve CI/CD hazırlığı vardı, README ve doküman değişiklikleri 5 Şubat'a kadar sürdü
Kaynaklar yer tutucu kodla değiştirildi: hiçbir şey karşılaştırmayan bir görsel regresyon motoru, yalnız ekrana yazan bir erişilebilirlik denetçisi ve artık derlenmeyen bir test target'ı
v2.0.0: Swift 6 üzerinde yeniden kuruldu; her UI yardımcısının arkasında test edilmiş kurallar, CI'da UI testleri koşan bir örnek uygulama, DocC ve iOSTestingTools'un işe yarayan kısımları