Adım Dmitry, şirkette test uzmanı olarak çalışıyorum
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.
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
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.
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.
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.
Bu noktada, geliştirici.apple.com ile çalışmayı bitirdik ancak tarayıcı penceresini simge durumuna küçültmeyeceğiz. Hadi gidelim
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.
$ fastlane init
Mevcut kullanım yapılandırmalarını seçmeniz istenecektir. Dördüncü seçeneği seçin - manuel proje kurulumu.
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:
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.
Testlerin montajı için şerit eklemeye devam ediyor. Hadi gidelim
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
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
Önemli: Fastfile'ın firebase_test_lab_ios_xctest şeridindeki önceki adımında, gcp_project parametresi proje adıyla eşleşmelidir.
Varsayılan ayarlar bize oldukça uygun.
Sekmeyi kapatmayın, aynı hesap altında kayıt olun
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.
Ardından “IAM ve yönetim” -> Hizmet hesapları -> Hizmet hesabı oluştur menü öğesine gidin. Projeyi düzenleme haklarını veriyoruz.
JSON formatında bir API anahtarı oluşturun
İ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
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