Mənim adım Dmitri, mən şirkətdə tester kimi işləyirəm
Bundan əvvəl mən artıq Android üçün Firebase Test Laboratoriyasını sınamışdım və hər şeyi çox bəyəndim, ona görə də layihənin iOS test infrastrukturunu eyni əsasda qoymağa cəhd etmək qərarına gəldim. Google-da çox işləməli oldum və hər şey ilk dəfə alınmadı, buna görə də hələ də mübarizə aparanlar üçün dərslik məqaləsi yazmağa qərar verdim.
Beləliklə, əgər iOS layihəsində UI testləriniz varsa, onları Good Corporation tərəfindən təqdim olunan real cihazlarda işə salmağa cəhd edə bilərsiniz. Maraqlananlar üçün pişiyə xoş gəlmisiniz.
Hekayədə mən bəzi ilkin məlumatlara - GitHub və CircleCI qurma sistemində özəl depoya əsaslanmaq qərarına gəldim. Tətbiqin adı AmazingApp, bundleID com.company.amazingapp-dır. Sonrakı çaşqınlığı azaltmaq üçün bu məlumatları dərhal təqdim edirəm.
Layihənizdə müəyyən həlləri fərqli şəkildə tətbiq etmisinizsə, təcrübənizi şərhlərdə paylaşın.
1. Testlərin özləri
UI testləri üçün yeni layihə filialı yaradın:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
Gəlin layihəni XCode-da açaq və UI testləri ilə yeni Hədəf yaradaq [XCode -> Fayl -> Yeni -> Hədəf -> iOS Test Paketi] və ona AmazingAppUITests özünü izah edən adını verərək.
Yaradılmış Hədəfin Quraşdırma Mərhələləri bölməsinə keçin və Compile Sources - AmazingAppUITests.swift-də Hədəf Asılılıqlarının - AmazingApp-ın mövcudluğunu yoxlayın.
Yaxşı təcrübə müxtəlif qurma variantlarını ayrı-ayrı Sxemlərə ayırmaqdır. Biz UI testlərimiz üçün sxem yaradırıq [XCode -> Product -> Scheme -> New Scheme] və ona eyni adı veririk: AmazingAppUITests.
Yaradılmış sxemin qurulmasına əsas tətbiqin Hədəfi daxil edilməlidir - AmazingApp və Target UI testləri - AmazingAppUITests - ekran görüntüsünə baxın
Sonra, UI testləri üçün yeni quruluş konfiqurasiyası yaradırıq. XCode-da layihə faylına klikləyin və Məlumat bölməsinə keçin. “+” üzərinə klikləyin və yeni konfiqurasiya yaradın, məsələn, XCtest. Kodun imzalanmasına gəldikdə, qavalla rəqs etməmək üçün gələcəkdə buna ehtiyacımız olacaq.
Layihənizdə ən azı üç Hədəf var: əsas proqram, vahid testləri (hər şeydən sonra onlar mövcuddur, elə deyilmi?) və yaratdığımız Hədəf UI testləri.
Hədəf AmazingApp, Quraşdırma Parametrləri sekmesine, Kod İmzalama Şəxsiyyəti bölməsinə keçin. XCtest konfiqurasiyası üçün iOS Developer seçin. Code Signing Style bölməsində Manual seçin. Təminat profilini hələ yaratmamışıq, lakin bir az sonra mütləq ona qayıdacağıq.
Hədəf AmazingAppUITests üçün biz eyni şeyi edirik, lakin Məhsul Paketi İdentifikatoru sütununda biz com.company.amazingappuitests daxil oluruq.
2. Apple Developer Proqramında layihənin qurulması
Apple Developer Proqramı səhifəsinə keçin, Sertifikatlar, İdentifikatorlar və Profillər bölməsinə və sonra İdentifikatorlar elementinin Tətbiq İdentifikatorları sütununa keçin. AmazingAppUITests və bundleID com.company.amazingappuitests adlı yeni Tətbiq ID-si yaradın.
İndi testlərimizi ayrıca sertifikatla imzalamaq imkanımız var, lakin... Sınaq üçün konstruksiyanın yığılması proseduru proqramın özünün yığılmasını və test aparatının yığılmasını nəzərdə tutur. Müvafiq olaraq, bir təminat profili ilə iki paket identifikatorunun imzalanması problemi ilə qarşılaşırıq. Xoşbəxtlikdən, sadə və zərif bir həll var - Wildcard App ID. Yeni Tətbiq İdentifikatorunun yaradılması prosedurunu təkrar edirik, lakin Açıq Tətbiq İD-si əvəzinə ekran görüntüsündə olduğu kimi Wildcard Tətbiq İD-ni seçin.
Bu nöqtədə biz developer.apple.com ilə işi bitirdik, lakin biz brauzer pəncərəsini minimuma endirməyəcəyik. Gəlin gedək
Diqqətli oxucu qeyd etdi ki, bu yardım proqramından istifadə etmək üçün bizə özəl depo və həm Apple Developer Proqramına, həm də Github-a çıxışı olan hesab lazımdır. Formanın hesabını (birdən belə bir şey yoxdursa) yaradırıq [e-poçt qorunur], güclü parol tapın, onu developer.apple.com saytında qeydiyyatdan keçirin və onu layihə administratoru kimi təyin edin. Sonra, hesaba şirkətinizin github repozitoriyasına giriş veririk və AmazingAppMatch kimi adla yeni şəxsi repozitoriya yaradırıq.
3. Fastlane və uyğunluq yardım proqramının qurulması
Terminal açın, layihə ilə qovluğa gedin və göstərildiyi kimi fastlane-i işə salın
$ fastlane init
Sizdən mövcud istifadə konfiqurasiyalarını seçmək istəniləcək. Dördüncü seçimi seçin - layihənin əl ilə qurulması.
Layihədə iki fayl - Appfile və Fastfile olan yeni qovluq fastlane var. Bir sözlə, biz xidmət məlumatlarını Appfile-də saxlayırıq və Fastlane terminologiyasında zolaqlar adlanan Fastfile-də işləri yazırıq. Rəsmi sənədləri oxumağı məsləhət görürəm:
Sevimli mətn redaktorunuzda Appfile-i açın və onu aşağıdakı formaya gətirin:
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
Terminala qayıdırıq və rəsmi təlimata uyğun olaraq uyğunluğu konfiqurasiya etməyə başlayırıq.
$ fastlane match init
$ fastlane match development
Sonra, tələb olunan məlumatları daxil edin - depo, hesab, parol və s.
Mühüm: Uyğunluq proqramını ilk dəfə işə saldığınız zaman sizdən deponun şifrəsini açmaq üçün parol daxil etməyiniz xahiş olunacaq. Bu parolu saxlamaq çox vacibdir, CI serverini qurarkən bizə lazım olacaq!
Fastlane qovluğunda yeni fayl meydana çıxdı - Matchfile. Onu sevimli mətn redaktorunuzda açın və bu şəkildə göstərin:
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
Gələcəkdə Crashlytics və/və ya AppStore-da yerləşdirmə üçün konstruksiyaları imzalamaq, yəni tətbiqinizin paket identifikatorunu imzalamaq üçün uyğunluqdan istifadə etmək istəsək, onu məhz bu şəkildə doldururuq.
Ancaq xatırladığımız kimi, test quruluşunu imzalamaq üçün xüsusi Wildcard ID yaratdıq. Buna görə də, Fastfile açın və yeni zolağa daxil olun:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
)
end
Yadda saxlayın və terminala daxil olun
fastlane testing_build_for_firebase
və biz fastlane-nin necə yeni sertifikat yaratdığını və onu depoya qoyduğunu görürük. Əla!
XCode-u açın. İndi bizdə Match Development com.company.* formasının lazımi təminat profili var ki, bu da AmazingApp və AmazingAppUITests hədəfləri üçün Təminat profili bölməsində göstərilməlidir.
Testləri yığmaq üçün zolaq əlavə etmək qalır. Gəlin gedək
Gəlin orijinal nümunədən kopyalayıb yapışdıraq ki, bizim zolaq testing_build_for_firebase belə görünsün:
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-də fastlane qurmaq haqqında tam məlumat üçün rəsmi sənədləri oxumağı məsləhət görürəm
config.yml-ə yeni tapşırıq əlavə etməyi 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. Bəs bizim sınaq stendimiz? Firebase quraşdırılır.
Gəlin məqalənin nə üçün yazıldığına keçək.
Ola bilsin ki, tətbiqiniz Firebase-dən pulsuz planda istifadə edir və ya bəlkə də heç istifadə etmir. Heç bir prinsipial fərq yoxdur, çünki sınaq ehtiyacları üçün bir il pulsuz istifadə ilə ayrıca bir layihə yarada bilərik (sərin, elə deyilmi?)
İnfrastruktur hesabımıza daxil oluruq (və ya hər hansı başqa, fərq etməz) və gedirik
Mühüm: Firebase_test_lab_ios_xctest zolağında Fastfile-də əvvəlki addımda gcp_project parametri layihə adına uyğun olmalıdır.
Standart parametrlər bizə çox uyğun gəlir.
Nişanı bağlamayın, eyni hesabda qeydiyyatdan keçin
Google bir il üçün 300 dollar verir ki, bu da avtotestlərin aparılması kontekstində xidmətdən bir illik pulsuz istifadəyə bərabərdir. Ödəniş məlumatlarınızı daxil edirik, 1 ABŞ dolları məbləğində test debetini gözləyirik və hesabınıza 300 dollar alırıq. Bir ildən sonra layihə avtomatik olaraq pulsuz tarif planına keçəcək, buna görə də mümkün pul itkisindən narahat olmaq lazım deyil.
Firebase layihəsi ilə nişana qayıdaq və onu Blaze tarif planına köçürək - indi limit aşıldığında ödəməli olduğumuz bir şey var.
gcloud interfeysində Firebase layihəmizi seçin, "Kataloq" əsas menyu elementini seçin və Bulud Testi API və Bulud Alətləri Nəticə API-ni əlavə edin.
Sonra "IAM və administrasiya" menyusuna keçin -> Xidmət hesabları -> Xidmət hesabı yaradın. Biz layihəni redaktə etmək hüququnu veririk.
JSON formatında API açarı yaradın
Yüklənmiş JSON-a bir az sonra ehtiyacımız olacaq, lakin hələlik Test Laboratoriyasının quraşdırılmasını tamamlanmış hesab edəcəyik.
5. CircleCI-nin qurulması
Ağlabatan bir sual yaranır - parollarla nə etmək lazımdır? Quraşdırma maşınımızın mühit dəyişən mexanizmi bizə parollarımızı və digər həssas məlumatları təhlükəsiz saxlamağa kömək edəcək. CircleCI layihə parametrlərində Mühit Dəyişənləri seçin
Və aşağıdakı dəyişənləri qurun:
- açar: GOOGLE_APPLICATION_CREDENTIALS
dəyər: gcloud xidmət hesabı açarının json faylının məzmunu - açar: MATCH_PASSWORD
dəyər: sertifikatlarla github deposunun şifrəsini açmaq üçün parol - açar: FASTLANE_PASSWORD
dəyər: Apple Developer Portal infrastruktur hesab parolu
Dəyişiklikləri saxlayırıq, PR yaradırıq və onu nəzərdən keçirmək üçün komanda rəhbərimizə göndəririk.
Nəticələri
Bu sadə manipulyasiyalar nəticəsində biz sınaq zamanı cihazın ekranında video yazmaq imkanı olan yaxşı, sabit işləyən stend əldə etdik. Test nümunəsində mən iPhone X cihaz modelini göstərdim, lakin ferma müxtəlif modellərin və iOS versiyalarının birləşməsindən zəngin seçim təqdim edir.
İkinci hissə Android layihəsi üçün Firebase Test Laboratoriyasının addım-addım qurulmasına həsr olunacaq.
Mənbə: www.habr.com