Firebase Test Laboratuvarı'nda enstrümantal testler gerçekleştiriyoruz. Bölüm 1: iOS projesi

Firebase Test Laboratuvarı'nda enstrümantal testler gerçekleştiriyoruz. Bölüm 1: iOS projesi

Adım Dmitry, şirkette test uzmanı olarak çalışıyorum MEL Bilimi. Yakın zamanda nispeten yeni bir özellik ile uğraşmayı bitirdim. Firebase Test Laboratuvarı — yani, yerel test çerçevesi XCUITest kullanılarak iOS uygulamalarının araçsal testiyle.

Bundan önce Firebase Test Lab for Android'i zaten denemiştim ve her şeyi gerçekten beğenmiştim, bu yüzden projenin iOS test altyapısını da aynı temele oturtmaya karar verdim. Google'a çok sık başvurmak zorunda kaldım ve ilk seferinde her şey yolunda gitmedi, bu yüzden hâlâ zorluk çekenler için eğitici bir makale yazmaya karar verdim.

Dolayısıyla, bir iOS projesinde kullanıcı arayüzü testleriniz varsa, Good Corporation tarafından sağlanan bunları bugün gerçek cihazlarda çalıştırmayı deneyebilirsiniz. İlgilenenler için cat'e hoş geldiniz.

Hikayede, bazı başlangıç ​​verileri (GitHub ve CircleCI derleme sistemi üzerinde özel bir depo) üzerine inşa etmeye karar verdim. Uygulama adı AmazingApp, bundleID ise com.company.amazingapp'tır. Daha sonraki karışıklığı azaltmak için bu verileri hemen sunuyorum.

Projenizde belirli çözümleri farklı şekilde uyguladıysanız deneyiminizi yorumlarda paylaşın.

1. Testlerin kendisi

Kullanıcı arayüzü testleri için yeni bir proje dalı oluşturun:

$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”

Projeyi XCode'da açalım ve UI testleriyle [XCode -> Dosya -> Yeni -> Hedef -> iOS Test Paketi] yeni bir Hedef oluşturalım ve ona kendi kendini açıklayan AmazingAppUITests adını verelim.

Firebase Test Laboratuvarı'nda enstrümantal testler gerçekleştiriyoruz. Bölüm 1: iOS projesi

Oluşturulan Hedefin Oluşturma Aşamaları bölümüne gidin ve Derleme Kaynakları - AmazingAppUITests.swift'te Hedef Bağımlılıkları - AmazingApp'in varlığını kontrol edin.

Farklı yapı seçeneklerini ayrı Şemalara ayırmak iyi bir uygulamadır. UI testlerimiz için bir şema oluşturuyoruz [XCode -> Ürün -> Şema -> Yeni Şema] ve ona aynı adı veriyoruz: AmazingAppUITests.

Oluşturulan şemanın yapısı, ana uygulamanın Hedefini içermelidir - AmazingApp ve Target UI testleri - AmazingAppUITests - ekran görüntüsüne bakın

Firebase Test Laboratuvarı'nda enstrümantal testler gerçekleştiriyoruz. Bölüm 1: iOS projesi

Daha sonra, kullanıcı arayüzü testleri için yeni bir yapı yapılandırması oluşturuyoruz. XCode'da proje dosyasına tıklayın ve Bilgi bölümüne gidin. “+”ya tıklayın ve yeni bir konfigürasyon oluşturun, örneğin XCtest. Kod imzalama söz konusu olduğunda tefle dans etmekten kaçınmak için gelecekte buna ihtiyacımız olacak.

Firebase Test Laboratuvarı'nda enstrümantal testler gerçekleştiriyoruz. Bölüm 1: iOS projesi

Projenizde en az üç Hedef var: ana uygulama, birim testleri (sonuçta bunlar var, değil mi?) ve oluşturduğumuz Hedef Kullanıcı Arayüzü testleri.

Target AmazingApp, Yapı Ayarları sekmesi, Kod İmzalama Kimliği bölümüne gidin. XCtest yapılandırması için iOS Geliştirici'yi seçin. Kod İmzalama Stili bölümünde El İle'yi seçin. Henüz bir ön hazırlık profili oluşturmadık, ancak buna biraz sonra kesinlikle geri döneceğiz.

Target AmazingAppUITests için de aynısını yapıyoruz ancak Ürün Paketi Tanımlayıcı sütununa com.company.amazingappuitests giriyoruz.

2. Apple Geliştirici Programında proje oluşturma

Apple Geliştirici Programı sayfasına gidin, Sertifikalar, Tanımlayıcılar ve Profiller bölümüne ve ardından Tanımlayıcılar öğesinin Uygulama Kimlikleri sütununa gidin. AmazingAppUITests ve bundleID com.company.amazingappuitests adında yeni bir Uygulama Kimliği oluşturun.

Firebase Test Laboratuvarı'nda enstrümantal testler gerçekleştiriyoruz. Bölüm 1: iOS projesi

Artık testlerimizi ayrı bir sertifikayla imzalama fırsatımız var, ancak... Test için bir derleme oluşturma prosedürü, uygulamanın kendisini birleştirmeyi ve test çalıştırıcısını birleştirmeyi içerir. Buna göre, iki paket kimliğinin bir ön hazırlık profiliyle imzalanması sorunuyla karşı karşıyayız. Neyse ki basit ve zarif bir çözüm var: Wildcard Uygulama Kimliği. Yeni bir Uygulama Kimliği oluşturma prosedürünü tekrarlıyoruz ancak Açık Uygulama Kimliği yerine ekran görüntüsündeki gibi Wildcard Uygulama Kimliğini seçin.

Firebase Test Laboratuvarı'nda enstrümantal testler gerçekleştiriyoruz. Bölüm 1: iOS projesi

Bu noktada, geliştirici.apple.com ile çalışmayı bitirdik ancak tarayıcı penceresini simge durumuna küçültmeyeceğiz. Hadi gidelim Fastlane dokümantasyon sitesi ve Match yardımcı programı hakkında baştan sona bilgi edinin.

Dikkatli bir okuyucu, bu yardımcı programı kullanmak için özel bir depoya ve hem Apple Geliştirici Programına hem de Github'a erişimi olan bir hesaba ihtiyacımız olacağını fark etti. Formun bir hesabını yaratırız (eğer birdenbire böyle bir şey olmazsa) [e-posta korumalı], güçlü bir şifre bulun, geliştirici.apple.com'a kaydedin ve proje yöneticisi olarak atayın. Daha sonra, hesabınızın şirketinizin github deposuna erişmesine izin veriyoruz ve AmazingAppMatch gibi bir isimle yeni bir özel depo oluşturuyoruz.

3. Fastlane ve eşleştirme yardımcı programının kurulumu

Bir terminal açın, projenin bulunduğu klasöre gidin ve Fastlane'i şurada belirtildiği gibi başlatın. resmi kılavuz. Komutu girdikten sonra

$ fastlane init

Mevcut kullanım yapılandırmalarını seçmeniz istenecektir. Dördüncü seçeneği seçin - manuel proje kurulumu.

Firebase Test Laboratuvarı'nda enstrümantal testler gerçekleştiriyoruz. Bölüm 1: iOS projesi

Projede iki dosya içeren yeni bir fastlane dizini var: Appfile ve Fastfile. Özetle, hizmet verilerini Appfile'da saklıyoruz ve Fastlane terminolojisinde şerit adı verilen işleri Fastfile'a yazıyoruz. Resmi belgeleri okumanızı öneririm: zaman, iki.

Uygulama dosyasını favori metin düzenleyicinizde açın ve aşağıdaki forma getirin:

app_identifier "com.company.amazingapp"       # Bundle ID
apple_dev_portal_id "[email protected]"  # Созданный инфраструктурный аккаунт, имеющий право на редактирование iOS проекта в Apple Developer Program.
team_id "LSDY3IFJAY9" # Your Developer Portal Team ID

Terminale dönüyoruz ve resmi kılavuza göre eşleşmeyi yapılandırmaya başlıyoruz.

$ fastlane match init
$ fastlane match development

Ardından istenen verileri (depo, hesap, şifre vb.) girin.

Önemli: Eşleştirme yardımcı programını ilk başlattığınızda, deponun şifresini çözmek için bir şifre girmeniz istenecektir. Bu şifreyi kaydetmek çok önemlidir; CI sunucusunu kurarken buna ihtiyacımız olacak!

Fastlane klasöründe yeni bir dosya belirdi - Matchfile. Favori metin düzenleyicinizde açın ve şu şekilde görüntüleyin:

git_url("https://github.com/YourCompany/AmazingAppMatch") #Созданный приватный репозиторий для хранения сертификатов и профайлов.
type("development") # The default type, can be: appstore, adhoc, enterprise or development
app_identifier("com.company.amazingapp")
username("[email protected]") # Your Infrastructure account Apple Developer Portal username

Gelecekte Crashlytics ve/veya AppStore'da görüntülenmek üzere derlemeleri imzalamak, yani uygulamanızın paket kimliğini imzalamak için eşleşmeyi kullanmak istersek, bunu tam olarak bu şekilde doldururuz.

Ancak hatırladığımız gibi test yapısını imzalamak için özel bir Wildcard ID oluşturduk. Bu nedenle Fastfile'ı açın ve yeni bir şeride girin:

lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"  # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
    )

end

Kaydet ve terminale gir

fastlane testing_build_for_firebase

fastlane'in nasıl yeni bir sertifika oluşturduğunu ve onu depoya koyduğunu görüyoruz. Harika!

XCode'u açın. Artık, AmazingApp ve AmazingAppUITests hedefleri için Temel Hazırlık profili bölümünde belirtilmesi gereken Match Development com.company.* formunun gerekli temel hazırlık profiline sahibiz.

Firebase Test Laboratuvarı'nda enstrümantal testler gerçekleştiriyoruz. Bölüm 1: iOS projesi

Testlerin montajı için şerit eklemeye devam ediyor. Hadi gidelim havuz Fastlane için Firebase Test Lab'e aktarmayı ayarlamayı ve talimatları izlemeyi kolaylaştıran bir eklenti projesi.

Orijinal örnekten kopyalayıp yapıştıralım, böylece şerit test_build_for_firebase'imiz şu şekilde görünecektir:


 lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"
    )

    scan(
      scheme: 'AmazingAppUITests',      # UI Test scheme
      clean: true,                        # Recommended: This would ensure the build would not include unnecessary files
      skip_detect_devices: true,          # Required
      build_for_testing: true,            # Required
      sdk: 'iphoneos',                    # Required
      should_zip_build_products: true,     # Must be true to set the correct format for Firebase Test Lab
    )

    firebase_test_lab_ios_xctest(
      gcp_project: 'AmazingAppUITests', # Your Google Cloud project name (к этой строчке вернемся позже)
      devices: [                          # Device(s) to run tests on
        {
          ios_model_id: 'iphonex',        # Device model ID, see gcloud command above
          ios_version_id: '12.0',         # iOS version ID, see gcloud command above
          locale: 'en_US',                # Optional: default to en_US if not set
          orientation: 'portrait'         # Optional: default to portrait if not set
        }
      ]
    )

  end

CircleCI'de fastlane kurulumu hakkında tam bilgi için resmi belgeleri okumanızı öneririm zaman iki.

Config.yml dosyamıza yeni bir görev eklemeyi unutmayın:

build-for-firebase-test-lab:
   macos:
     xcode: "10.1.0"   
   working_directory: ~/project
   shell: /bin/bash --login -o pipefail
   steps:
     - checkout
     - attach_workspace:
         at: ~/project
     - run: sudo bundle install     # обновляем зависимости
     - run:
         name: install gcloud-sdk   # на mac машину необходимо установить gcloud
         command: |
           ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null ; brew install caskroom/cask/brew-cask 2> /dev/null
           brew cask install google-cloud-sdk
     - run:
         name: build app for testing
         command: fastlane testing_build_for_firebase  # запускаем lane сборки и отправки в firebase

4. Peki ya test tezgahımız? Firebase'i kurma.

Makalenin ne için yazıldığına geçelim.

Uygulamanız Firebase'i ücretsiz bir planda kullanıyor olabilir veya hiç kullanmıyor olabilir. Kesinlikle temel bir fark yok, çünkü test ihtiyaçları için bir yıllık ücretsiz kullanıma sahip ayrı bir proje oluşturabiliriz (harika, değil mi?)

Altyapı hesabımıza (veya başka bir hesaba, fark etmez) giriş yapıyoruz ve Firebase konsol sayfası. AmazingAppUITestsadlı yeni bir proje oluşturun.

Önemli: Fastfile'ın firebase_test_lab_ios_xctest şeridindeki önceki adımında, gcp_project parametresi proje adıyla eşleşmelidir.

Firebase Test Laboratuvarı'nda enstrümantal testler gerçekleştiriyoruz. Bölüm 1: iOS projesi

Varsayılan ayarlar bize oldukça uygun.

Sekmeyi kapatmayın, aynı hesap altında kayıt olun bulut - Firebase ile iletişim gcloud konsol arayüzü kullanılarak gerçekleştiğinden bu gerekli bir önlemdir.

Google bir yıl için 300 ABD Doları veriyor; bu, otomatik testlerin gerçekleştirilmesi bağlamında hizmetin bir yıllık ücretsiz kullanımına eşdeğerdir. Ödeme bilgilerinizi giriyoruz, 1$ tutarındaki test ödemesini bekliyoruz ve hesabınıza 300$ alıyoruz. Bir yıl sonra proje otomatik olarak ücretsiz tarife planına aktarılacağından olası para kaybı konusunda endişelenmenize gerek kalmayacak.

Firebase projesinin bulunduğu sekmeye dönelim ve bunu Blaze tarife planına aktaralım - artık limit aşılırsa ödeyeceğimiz bir şey var.

gcloud arayüzünde Firebase projemizi seçin, “Directory” ana menü öğesini seçin ve Cloud Testing API ve Cloud Tools Result API'yi ekleyin.

Firebase Test Laboratuvarı'nda enstrümantal testler gerçekleştiriyoruz. Bölüm 1: iOS projesi

Ardından “IAM ve yönetim” -> Hizmet hesapları -> Hizmet hesabı oluştur menü öğesine gidin. Projeyi düzenleme haklarını veriyoruz.

Firebase Test Laboratuvarı'nda enstrümantal testler gerçekleştiriyoruz. Bölüm 1: iOS projesi

JSON formatında bir API anahtarı oluşturun

Firebase Test Laboratuvarı'nda enstrümantal testler gerçekleştiriyoruz. Bölüm 1: iOS projesi

İndirilen JSON'a biraz sonra ihtiyacımız olacak, ancak şimdilik Test Lab kurulumunun tamamlanmış olduğunu kabul edeceğiz.

5. CircleCI'yi kurma

Makul bir soru ortaya çıkıyor - şifrelerle ne yapmalı? Yapı makinemizin ortam değişkeni mekanizması, şifrelerimizi ve diğer hassas verilerimizi güvenli bir şekilde saklamamıza yardımcı olacaktır. CircleCI proje ayarlarında Ortam Değişkenleri'ni seçin

Firebase Test Laboratuvarı'nda enstrümantal testler gerçekleştiriyoruz. Bölüm 1: iOS projesi
Ve aşağıdaki değişkenleri ayarlayın:

  • anahtar: GOOGLE_APPLICATION_CREDENTIALS
    değer: gcloud hizmet hesabı anahtarının json dosyasının içeriği
  • anahtar: MATCH_PASSWORD
    değer: github deposunun sertifikalarla şifresini çözmek için şifre
  • anahtar: FASTLANE_PASSWORD
    değer: Apple Geliştirici Portalı altyapı hesabı parolası

Değişiklikleri kaydediyoruz, bir PR oluşturuyoruz ve bunu incelenmek üzere ekip liderimize gönderiyoruz.

sonuçlar

Bu basit manipülasyonlar sonucunda, test sırasında cihaz ekranına video kaydetme özelliğine sahip, iyi ve sağlam bir çalışma standı elde ettik. Test örneğinde iPhone X cihaz modelini belirttim ancak grup, farklı modellerin ve iOS sürümlerinin birleşiminden zengin bir seçim sunuyor.

İkinci bölüm, bir Android projesi için Firebase Test Lab'ın adım adım kurulumuna ayrılacaktır.

Kaynak: habr.com

Yorum ekle