Mening ismim Dmitriy, men kompaniyada sinovchi bo'lib ishlayman
Bundan oldin, men allaqachon Android uchun Firebase Test Laboratoriyasini sinab ko'rdim va hamma narsa juda yoqdi, shuning uchun men loyihaning iOS test infratuzilmasini bir xil asosda qo'yishga qaror qildim. Men Google'ga juda ko'p bo'lishim kerak edi va hamma narsa birinchi marta ishlamadi, shuning uchun men hali ham kurashayotganlar uchun o'quv maqolasini yozishga qaror qildim.
Shunday qilib, agar sizda iOS loyihasida UI testlari bo'lsa, ularni bugungi kunda Good Corporation tomonidan taqdim etilgan haqiqiy qurilmalarda ishga tushirishga urinib ko'rishingiz mumkin. Qiziqqanlar uchun mushukka xush kelibsiz.
Hikoyada men ba'zi bir dastlabki ma'lumotlarga - GitHub va CircleCI qurish tizimidagi shaxsiy omborga asoslanishga qaror qildim. Ilova nomi AmazingApp, bundleID com.company.amazingapp. Keyingi chalkashliklarni kamaytirish uchun men ushbu ma'lumotlarni darhol taqdim etaman.
Agar siz loyihangizda muayyan echimlarni boshqacha tarzda amalga oshirgan bo'lsangiz, sharhlarda tajribangizni o'rtoqlashing.
1. Sinovlarning o'zi
UI testlari uchun yangi loyiha filialini yarating:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
Keling, loyihani XCode-da ochamiz va UI testlari bilan yangi Target yaratamiz [XCode -> File -> New -> Target -> iOS Testing Bundle] va unga AmazingAppUITests o'z-o'zidan tushunarli nomini beramiz.
Yaratilgan Nishonning Qurilish bosqichlari bo'limiga o'ting va Maqsadga bog'liqlik mavjudligini tekshiring - AmazingApp, Kompilyatsiya manbalarida - AmazingAppUITests.swift.
Yaxshi amaliyot turli xil qurish variantlarini alohida sxemalarga ajratishdir. Biz UI testlarimiz uchun sxemani yaratamiz [XCode -> Product -> Scheme -> New Scheme] va unga bir xil nom beramiz: AmazingAppUITests.
Yaratilgan sxemaning tuzilishi asosiy ilovaning Targetini o'z ichiga olishi kerak - AmazingApp va Target UI testlari - AmazingAppUITests - skrinshotga qarang
Keyinchalik, biz UI testlari uchun yangi konfiguratsiyani yaratamiz. XCode-da loyiha faylini bosing va Ma'lumot bo'limiga o'ting. “+” tugmasini bosing va yangi konfiguratsiya yarating, masalan, XCtest. Bu kodni imzolashda daf bilan raqsga tushmaslik uchun kelajakda bizga kerak bo'ladi.
Loyihangizda kamida uchta Maqsad mavjud: asosiy dastur, birlik testlari (axir, ular mavjud, shunday emasmi?) va biz yaratgan Target UI testlari.
Target AmazingApp, Build Settings yorlig'i, Code Signing Identity bo'limiga o'ting. XCtest konfiguratsiyasi uchun iOS Developer-ni tanlang. Kodni imzolash uslubi bo'limida Manual-ni tanlang. Biz hozircha provayder profilini yaratmadik, lekin birozdan keyin albatta qaytamiz.
Target AmazingAppUITests uchun biz xuddi shunday qilamiz, lekin Mahsulotlar to'plami identifikatori ustuniga com.company.amazingappuitests kiritamiz.
2. Apple Developer dasturida loyihani sozlash
Apple Developer dasturi sahifasiga o'ting, Sertifikatlar, identifikatorlar va profillar bo'limiga, so'ngra Identifikatorlar elementining Ilova identifikatorlari ustuniga o'ting. AmazingAppUITests va bundleID com.company.amazingappuitests deb nomlangan yangi ilova identifikatorini yarating.
Endi bizda testlarimizni alohida sertifikat bilan imzolash imkoniyati bor, lekin... Sinov uchun konstruksiyani yig‘ish tartibi ilovaning o‘zini yig‘ish va test yuguruvchisini yig‘ishni o‘z ichiga oladi. Shunga ko'ra, biz ikkita to'plam identifikatorini bitta provayder profili bilan imzolash muammosiga duch kelamiz. Yaxshiyamki, oddiy va oqlangan yechim bor - Wildcard App ID. Biz yangi ilova identifikatorini yaratish tartibini takrorlaymiz, lekin aniq ilova identifikatori o'rniga skrinshotdagi kabi Wildcard ilova identifikatorini tanlang.
Ayni paytda biz developer.apple.com bilan ishlashni tugatdik, lekin brauzer oynasini minimallashtirmaymiz. Keling, boraylik
Diqqatli o'quvchi ushbu yordam dasturidan foydalanish uchun bizga shaxsiy ombor va Apple Developer dasturi va Github-ga kirish huquqiga ega hisob qaydnomasi kerakligini payqadi. Biz shaklning hisobini yaratamiz (agar birdaniga bunday narsa bo'lmasa). [elektron pochta bilan himoyalangan], kuchli parolni o'ylab toping, uni developer.apple.com saytida ro'yxatdan o'tkazing va uni loyiha administratori sifatida tayinlang. Keyinchalik, hisob qaydnomangizga kompaniyangizning github omboriga kirish huquqini beramiz va AmazingAppMatch kabi nomli yangi shaxsiy omborni yaratamiz.
3. Fastlane va match yordam dasturini sozlash
Terminalni oching, loyiha bilan jildga o'ting va yuqorida ko'rsatilgandek fastlane-ni ishga tushiring
$ fastlane init
Sizdan mavjud foydalanish konfiguratsiyalarini tanlashingiz so'raladi. To'rtinchi variantni tanlang - loyihani qo'lda sozlash.
Loyihada ikkita faylni o'z ichiga olgan yangi fastlane katalogi mavjud - Appfile va Fastfile. Xulosa qilib aytganda, biz Appfile-da xizmat ma'lumotlarini saqlaymiz va Fastlane terminologiyasida chiziqlar deb ataladigan Fastfile-da ishlarni yozamiz. Men rasmiy hujjatlarni o'qishni tavsiya qilaman:
Sevimli matn muharririda Appfile-ni oching va uni quyidagi shaklga keltiring:
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
Biz terminalga qaytamiz va rasmiy qo'llanmaga muvofiq biz moslikni sozlashni boshlaymiz.
$ fastlane match init
$ fastlane match development
Keyin so'ralgan ma'lumotlarni kiriting - ombor, hisob, parol va boshqalar.
Bu uchun muhim ahamiyatga ega: Match yordam dasturini birinchi marta ishga tushirganingizda, sizdan ombor shifrini ochish uchun parolni kiritishingiz so'raladi. Ushbu parolni saqlash juda muhim, bu bizga CI serverini o'rnatishda kerak bo'ladi!
Fastlane papkasida yangi fayl paydo bo'ldi - Matchfile. Uni sevimli matn muharririda oching va uni quyidagicha ko'rsating:
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
Kelajakda Crashlytics va/yoki AppStore’da ko‘rsatish uchun tuzilmalarni imzolash, ya’ni ilovangiz to‘plami identifikatoriga imzo chekish uchun matchdan foydalanmoqchi bo‘lsak, uni aynan shu tarzda to‘ldiramiz.
Ammo, biz eslaganimizdek, biz sinov tuzilishini imzolash uchun maxsus Wildcard ID yaratdik. Shuning uchun, Fastfile-ni oching va yangi qatorga kiring:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
)
end
Saqlash va terminalga kiring
fastlane testing_build_for_firebase
va biz fastlane qanday qilib yangi sertifikat yaratganini va uni omborga qo'yganini ko'ramiz. Ajoyib!
XCode-ni oching. Endi bizda AmazingApp va AmazingAppUITests maqsadlari uchun Ta'minlash profili bo'limida ko'rsatilishi kerak bo'lgan Match Development com.company.* shaklining kerakli ta'minot profili mavjud.
Sinovlarni yig'ish uchun qator qo'shish qoladi. Keling, boraylik
Keling, asl misoldan nusxa ko'chiring va bizning lane testing_build_for_firebase quyidagi ko'rinishga ega bo'ladi:
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-da fastlane-ni o'rnatish haqida to'liq ma'lumot olish uchun men rasmiy hujjatlarni o'qishni maslahat beraman
Bizning config.yml ga yangi vazifa qo'shishni unutmang:
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. Bizning test stendimiz haqida nima deyish mumkin? Firebase sozlanmoqda.
Keling, maqola nima uchun yozilganiga to'xtalamiz.
Ehtimol, sizning ilovangiz Firebase-dan bepul rejada foydalanadi yoki umuman yo'q. Mutlaqo hech qanday asosiy farq yo'q, chunki sinov ehtiyojlari uchun biz bir yillik bepul foydalanish bilan alohida loyiha yaratishimiz mumkin (ajoyib, to'g'rimi?)
Biz infratuzilma hisobimizga kiramiz (yoki boshqasi, bu muhim emas) va o'tamiz
Bu uchun muhim ahamiyatga ega: Firebase_test_lab_ios_xctest qatoridagi Fastfile-ning oldingi bosqichida gcp_project parametri loyiha nomiga mos kelishi kerak.
Standart sozlamalar bizga juda mos keladi.
Yorliqni yopmang, xuddi shu hisob ostida ro'yxatdan o'ting
Google bir yil uchun 300 dollar beradi, bu avtotestlarni o'tkazish kontekstida xizmatdan bir yillik bepul foydalanishga teng. Biz sizning toʻlov maʼlumotlaringizni kiritamiz, $1 test debetini kutamiz va hisobingizga $300 olamiz. Bir yil o'tgach, loyiha avtomatik ravishda bepul tarif rejasiga o'tkaziladi, shuning uchun pul yo'qotishi mumkinligi haqida tashvishlanishning hojati yo'q.
Keling, Firebase loyihasi bilan yorlig'iga qaytaylik va uni Blaze tarif rejasiga o'tkazamiz - endi chegara oshib ketgan bo'lsa, to'lashimiz kerak.
Gcloud interfeysida Firebase loyihamizni tanlang, “Katalog” asosiy menyu bandini tanlang va Cloud Testing API va Cloud Tools Result API qo‘shing.
Keyin menyu bandiga o'ting "IAM va ma'muriyat" -> Xizmat hisoblari -> Xizmat qayd yozuvini yaratish. Biz loyihani tahrirlash huquqini beramiz.
JSON formatida API kalitini yarating
Yuklab olingan JSON bizga birozdan keyin kerak bo'ladi, ammo hozircha Test Laboratoriyasini sozlash tugallangan deb hisoblaymiz.
5. CircleCI ni sozlash
O'rtacha savol tug'iladi - parollar bilan nima qilish kerak? Qurilish mashinamizning atrof-muhit o'zgaruvchan mexanizmi bizga parollarimiz va boshqa nozik ma'lumotlarni xavfsiz saqlashga yordam beradi. CircleCI loyihasi sozlamalarida Atrof-muhit o'zgaruvchilari-ni tanlang
Va quyidagi o'zgaruvchilarni o'rnating:
- kalit: GOOGLE_APPLICATION_CREDENTIALS
qiymat: gcloud xizmat hisobi kalitining json faylining mazmuni - kalit: MATCH_PASSWORD
qiymat: sertifikatlar bilan github omborini shifrlash uchun parol - kalit: FASTLANE_PASSWORD
qiymat: Apple Developer Portal infratuzilma hisobi paroli
Biz o'zgarishlarni saqlaymiz, PR yaratamiz va uni ko'rib chiqish uchun jamoamiz rahbariga yuboramiz.
natijalar
Ushbu oddiy manipulyatsiyalar natijasida biz sinov vaqtida qurilma ekranida video yozib olish imkoniyatiga ega yaxshi, barqaror ishlaydigan stend oldik. Sinov misolida men iPhone X qurilma modelini ko'rsatdim, ammo ferma turli modellar va iOS versiyalarining kombinatsiyasidan boy tanlovni taqdim etadi.
Ikkinchi qism Android loyihasi uchun Firebase test laboratoriyasini bosqichma-bosqich sozlashga bag'ishlanadi.
Manba: www.habr.com