iOS Otomasyon Testi ile Xcode Kullanıcı Arayüzü Çerçevesi

⚡ Akıllı Özet

iOS otomasyon testleri ile Xcode Test edilen bir uygulama üzerindeki kullanıcı arayüzü eylemlerini, tasarım, test, uygulama ve tekrar test etme döngüsünü izleyerek, her durum başarılı olana kadar kaydeder ve yeniden oynatır.

  • 🔘 TDD döngüsü: iOS uygulama testinde uygulanan dört aşama şunlardır: tasarım, test, uygulama ve tekrar test.
  • ☑️ Önkoşul: OS X işletim sistemiyle çalışan bir Mac Xcode IDE, bir otomasyon çerçevesi ve iOS SDK yüklendi.
  • ✅ Enstrüman güzergahı: Otomasyon aracı bir komut dosyasını kaydeder, komut dosyası günlüğünde gösterir ve isteğe bağlı olarak tekrar oynatır.
  • 🧪 OCUnit rotası: Objective-C dilinde yazılmış bir birim test paketi hedefi, aktif bir şema, bir test grubu ve bir test sınıfı.
  • ⚠️ Kullanımdan kaldırılma: UIAutomation aracı kullanımdan kaldırıldı. Xcode 8 numaralı sürüm kaldırıldı; desteklenen halefi XCUITest'tir.
  • ️ Modern karşılığı: Kaydedilen Instruments komut dosyasının yerini, bir UI Test Paketi hedefi ve XCUIApplication sorguları alır.

iOS otomasyon testleri ile Xcode Uygulama üzerinde kaydedilmiş bir komut dosyasını çalıştıran kullanıcı arayüzü otomasyon çerçevesi.

iOS Otomasyon Testi kullanarak Xcode

iOS uygulamanızın kalitesini garanti altına almak için, aşağıdaki şekilde gösterilen test odaklı geliştirme sürecini izlemelisiniz.

iOS otomasyon testleri için tasarım, test, uygulama ve yeniden test aşamalarını gösteren test odaklı geliştirme döngüsü.

Test Odaklı Geliştirme (TDD) bir test yapmak iOS uygulama testlerinde kullanılan ve daha geniş kapsamlı uygulamaların içinde yer alan bir modeldir. mobil testBu modelde, bir test uzmanının aşağıdaki 4 aşamayı takip etmesi gerekmektedir:

  • Tasarım: Neyi test etmek istediğinizi belirleyin ve test senaryolarınızı tasarlayın.
  • Testi: Tüm testleri çalıştırın ve herhangi bir test senaryosunun başarısız olup olmadığını kontrol edin.
  • Uygulanışı: RevKodunuzu kullanın ve testin başarısız olmasına neden olan hataları düzeltin.
  • Tekrar test edin: Bir test başarısız olursa, tasarıma geri dönün. Tüm test durumları başarılı olursa, kod test edilen tüm gereksinimleri karşılar.

Kurma Xcode Kullanıcı Arayüzü Testi Projesi

Bir iOS test programı oluşturmak için bir Mac'e ihtiyacınız var. Mac'inizde aşağıdakilerin zaten yüklü olması gerekir:

  • OS X — Mac için işletim sistemi.
  • Xcode IDE — iOS için geliştirme aracı.
  • Otomatik test çerçevesi — Kullanıcı Arayüzü Otomasyonu, OCUnit ve benzeri.
  • iOS SDK 4 veya daha yüksek.

⚠️ Sürüm notu: Yukarıdaki ön koşullar, aşağıdaki iki kılavuzun yazıldığı dönemin araç zincirini açıklamaktadır. Güncel bir Mac'te, Xcode XCTest ve XCUITest çerçeveleri kutu içerisinde gönderilir ve ayrı UI Otomasyon aracı artık kurulumun bir parçası değildir. Orijinal adımlar, çerçevenin nasıl çalıştığını belgelediği için aşağıda korunmuştur ve modern karşılığı daha aşağıda açıklanmıştır.

UI Otomasyon Çerçevesini Kullanarak iOS Otomasyonu Nasıl Oluşturulur

Aşağıdaki sekiz adımda, Otomasyon aracıyla bir komut dosyası kaydedilir ve test edilen uygulamaya karşı tekrar oynatılır.

Adım 1) Aletleri Başlatın

X'i açCode -> Geliştirici Araçlarını Aç -> Enstrüman

Enstrümanların Açılışı Xcode Geliştirici Araçları menüsünü açın

Adım 2) Otomasyon Aracını Ekleyin

Enstrümanlar penceresinde Otomasyon enstrümanını seçin.

Enstrüman şablonu seçicisinde Otomasyon enstrümanını seçin.

Test senaryosu oluşturmak için ya bir kayıt yaparsınız ya da başka bir yöntemle test senaryosu oluşturursunuz. test senaryosu Ya da manuel olarak programlarsınız.

Adım 3) Kırmızı düğmeye basın

Bir enstrüman çalmaya başlıyor — kaydı hemen durdurun. Kaydı başlatmak istiyorsanız kırmızı düğmeye basın.

Instruments araç çubuğundaki kırmızı kayıt düğmesi, kaydı başlatmak ve durdurmak için kullanılır. trace

Adım 4) Yeni bir komut dosyası oluşturun

Komut Dosyaları penceresinde, yeni bir komut dosyası oluşturmak için Ekle > Oluştur'a tıklayın.

Yeni bir otomasyon komut dosyası için Instruments Komut Dosyaları penceresindeki Ekle ve Oluştur menüsünü kullanın.

Adım 5) Hedefi seçin

Şimdi içindesin Trace penceresi. Seç'i kullanın. Target Uygulamanızın hata ayıklama sürümüne gitmek için aşağı kaydırın.

Klinik Target Araçlar bölümündeki açılır menü Trachata ayıklama derlemesine işaret eden e penceresi

Bu durumda, Apple'ın örneği BasitDrillDown Test edilecek uygulama olarak bu uygulama kullanılmaktadır. Uygulamanın arayüzü aşağıda gösterilmiştir.

Test edilen uygulama olarak SimpleDrillDown örnek uygulama arayüzü kullanılmıştır.

Adım 6) Komut dosyanızı kaydetmeye başlayın

Aracın üst veya alt kısmındaki kayıt düğmesine basarak komut dosyanızı kaydedin.

Instruments penceresinin kenarındaki Kayıt düğmesi, komut dosyası kaydını başlatır.

Artık test ettiğiniz uygulamada bazı kullanıcı arayüzü işlemleri gerçekleştirebilirsiniz ve komut dosyanız kaydedilir.

Adım 7) Senaryonuzu görün

Komut dosyanızı görmek için Trace Günlük / Düzenleyici Günlüğü açılır menüsünden komut dosyası günlüğü görünümüne geçin.

TracKomut dosyası günlüğü görünümüne geçmek için kullanılan e Günlük ve Düzenleyici Günlüğü açılır menüsü

Kaydedilmiş komut dosyanızı göreceksiniz.

Kaydedilen kullanıcı arayüzü otomasyon komut dosyası, Instruments komut dosyası günlük görünümünde görüntülenir.

Adım 8) Senaryonuzu oynatın

Oynat düğmesine basın. Komut dosyası çalışacak ve günlükler göründükten sonra durdurabilirsiniz.

Kaydedilen otomasyon komut dosyasının oynatılması ve günlük çıktısının Instruments penceresinde görüntülenmesi.

⚠️ Tarihsel not: Bu sekiz adımda kullanılan Otomasyon aracı kullanımdan kaldırılmıştır. Xcode 8. sürümde kaldırıldı, bu nedenle şu anda mevcut değil. Xcode Kurulumlar. Çerçevenin nasıl çalıştığının kaydı olarak adımlar burada saklanmaktadır; yeni çalışmalar için bu sayfanın aşağısındaki XCUITest kılavuzunu kullanın.

OCUnit çerçevesini kullanarak iOS Otomasyonu Nasıl Oluşturulur

İkinci yöntem ise testleri içeriye yerleştiriyor. Xcode Projenin kendisi, Instruments'ın içinde değil.

Adım 1) Başlayın Xcode IDE, Birim Test Paketi hedefi ekle

Mevcut bir yapıya birim test paketi hedefi ekleme Xcode proje

Adım 2) Yeni Birim Test Paketinin adını yazın. Yukarıdaki şekilde gösterildiği gibi, ardından Bitir'e tıklayın.

Adım 3) Birim Testini aktif hedef haline getirin.

Birim test paketini etkin hedef olarak seçme işlemi Xcode

Adım 4) Test dersleri için bir grup ekleyin

iOS birim test sınıflarını barındıracak bir proje grubu oluşturma

Adım 5) Birim test sınıfı ekleyin

Test grubu içine yeni bir birim test sınıfı dosyası ekleme Xcode

Adım 6) Şimdi uygulamaya başlayın.

Boş birim test sınıfı Xcode Editör test uygulaması için hazır.

OCUnit, test programını oluşturmak için Objective-C dilini kullanır, bu nedenle geliştiricinin bu dili bilmesi gerekir. Modern Xcode versiyonlar gönderiliyor birim testi Bunun yerine hem Objective-C'yi hem de XCTest'i destekleyen bir araç kullanılabilir. SwiftAncak bu altı adımda gösterilen hedef ve sınıf yapısı değişmeden kalır.

UIAutomation ve XCUITest Arasındaki Farklar: Neler Değişti?

Yukarıda kullanılan her iki çerçeve de Apple araç zincirinin daha önceki bir nesline ait olduğundan, bunların yerine neyin geçtiği ve neden geçtiği konusunda net olmakta fayda var.

Görünüş Kullanıcı Arayüzü Otomasyonu (Araçlar) XCUITest
Durum Kullanımdan kaldırıldı Xcode 8 ve sonraki sürümlerden kaldırıldı. Apple'ın desteklediği kullanıcı arayüzü test çerçevesi
Testlerin bulunduğu yer Instruments içindeki komut dosyaları trace-belge Kullanıcı Arayüzü Test Paketi hedefi, Xcode proje
Dil JavaSenaryo Swift veya Objective-C
Test çalıştırıcısı Otomasyon cihazı XCTest, birim testleriyle aynı çalıştırıcıdır.
Sürekli entegrasyon Garip — Enstrümanlar aracılığıyla yönlendirilen Birim testleriyle birlikte komut satırından çalıştırılır.
Kayıt Araçlar araç çubuğundaki Kayıt düğmesi Kayıt düğmesi Xcode editör, yaydığı Swift

Pratik sonuç olarak, XCUITest paketi sıradan bir proje kaynak kodudur. Kod tabanının geri kalanı gibi incelenir, sürümlendirilir ve çalıştırılır; bu da kaydedilen sonuçların ana nedenidir.trace modeli kayboldu.

XCUITest ile iOS Kullanıcı Arayüzü Testi Nasıl Yazılır?

Sekiz Instruments adımının modern karşılığı kısadır. Aşağıdaki yapı, aynı kayıt-sonra-oynatma fikrini yansıtır, ancak çıktı bir kaynak dosyasıdır, bir dosya değil. trace.

  1. Hedefi ekleyin. In Xcode Dosya > Yeni > seçeneğini seçin. Target ve UI Test Paketi şablonunu seçin veya yeni bir proje oluştururken testleri dahil etme seçeneğini işaretleyin.
  2. Oluşturulan test sınıfını açın. Xcode Boş kurulum ve test yöntemlerine sahip bir XCTestCase alt sınıfı oluşturur.
  3. Test edilecek uygulamayı başlatın. Bir XCUIApplication örneği oluşturun ve üzerinde launch yöntemini çağırın; bu, uygulamayı ayrı bir işlemde başlatır.
  4. Sorgula ve harekete geç. Öğe sorguları aracılığıyla öğelere (düğmeler, tablolar, statik metinler) ulaşın ve bunlar üzerinde dokunma, metin yazma veya kaydırma işlemlerini çağırın.
  5. İddia. İşlemden sonra beklenen öğenin mevcut olup olmadığını doğrulamak için XCTAssert kullanın.
  6. Koşmak. Testi şuradan çalıştırın: Xcode Test gezgini üzerinden veya komut satırından çalıştırılarak aynı test paketi sürekli entegrasyonda çalıştırılabilir.

Bu şekli izleyen minimal bir test şöyledir:

import XCTest

final class AppUITests: XCTestCase {

    func testTappingFirstRowShowsDetail() {
        let app = XCUIApplication()
        app.launch()

        // act on the first row of the list
        app.tables.cells.element(boundBy: 0).tap()

        // verify that the next screen appeared
        XCTAssertTrue(app.staticTexts.firstMatch.waitForExistence(timeout: 5))
    }
}

Kaydedici hala mevcut: İmleci bir test metodunun içine yerleştirip düzenleyicide kayıt düğmesine basmak, yukarıdaki 6. adımın doğrudan devamı niteliğinde olan bu sorguları otomatik olarak oluşturur. Daha geniş prensipler ise şunlardır: otomasyon testi Değişiklik yapılmadan uygulanır.

Kullanıcı Arayüzü Otomasyonu Örneği Code

Bu makale bazı kaynak kod örnekleri içermektedir. Bu örnekler, öğreticiyi daha net ve hızlı bir şekilde anlamanıza yardımcı olacaktır.

Kullanıcı Arayüzü Otomasyonu Örneği — Kullanıcı Arayüzü Otomasyonu demosuna ait test betiği.

SSS

Hayır. Xcode ve iOS simülatörleri yalnızca şu cihazlarda çalışır: macOSDolayısıyla, yerel olarak veya barındırılan bir derleme makinesi olarak bir Mac'e ihtiyaç duyulmaktadır. Bulut cihaz çiftlikleri ve barındırılan CI sağlayıcıları, Mac donanımına sahip olmayan ekiplerin yine de bu paketi çalıştırabilmesi için tam olarak mevcuttur.

Makine öğrenimi modelleri, ekran değiştiğinde değiştirme öğesi sorguları önerir, kararsız hataları temel nedenine göre kümelendirir ve başarısız olan çalıştırmaların hangilerinin gerçek gerileme olduğunu sıralar. Bu, küçük düzen değişikliklerinin aksi takdirde birçok seçiciyi aynı anda bozduğu kullanıcı arayüzü paketleri için önemlidir.

Tekrarlayan kısımları iyi hallediyor — test sınıfı iskeleti, başlatma argümanları, sayfa nesnesi sarmalayıcıları ve doğrulama şablonu. Ancak öğe tanımlayıcılarının gerçek uygulamayla eşleşmesi gerekiyor, bu nedenle oluşturulan her sorgunun güvenilir kabul edilmeden önce çalışan derlemeye karşı doğrulanması şart.

Appium iOS'u, eski UIAutomation sürücüsünün yerini alan XCUITest sürücüsü aracılığıyla çalıştırır. Avantajı, iOS ve iOS için tek bir platformlar arası test dili olmasıdır. Android; bunun karşılığında test ile Apple'ın kendi test aracı arasına fazladan bir katman ekleniyor.

Birim testi, uygulama işlemi içinde çalışır ve kodunuzu doğrudan çağırır. Kullanıcı arayüzü testi ise uygulamayı ayrı bir işlem olarak başlatır ve yalnızca arayüz üzerinden etkileşim kurar; bu nedenle daha yavaştır ancak kullanıcının gerçekte ne deneyimlediğini doğrular.

Simülatörler, bir işlem hattındaki çoğu işlevsel akış için daha hızlı ve uygundur. Kamera, biyometri, anlık bildirimler, performans ve donanım sensörleriyle ilgili her şey için gerçek cihazlara ihtiyaç duyulur; bu nedenle çoğu ekip, döngünün farklı noktalarında her ikisini de kullanır.

Her test, uygulamayı yeniden başlatır ve animasyonların tamamlanmasını bekler. Etiketlerle eşleştirmek yerine erişilebilirlik tanımlayıcıları belirlediğinizde ve bekleme moduna geçmek yerine öğenin varlığını beklediğinizde kararlılık artar.pingTestler arasında durumu sıfırlayın ve her bir vakayı tek bir yolculuğa odaklı tutun.

Doğrudan değil, çünkü diller ve öğe modelleri farklı. Olağan yol, eski komut dosyalarını amaçlanan kapsamın dokümantasyonu olarak saklamak, ardından her senaryoyu, üretimde en sık başarısız olan yolculuklardan başlayarak bir XCUITest durumu olarak yeniden yazmaktır.

Bu yazıyı şu şekilde özetleyin: