Менин атым Дмитрий, мен компанияда тестиер болуп иштейм
Буга чейин мен Android үчүн Firebase Test Lab программасын сынап көргөм жана бардыгы абдан жакты, ошондуктан долбоордун iOS тесттик инфраструктурасын ошол эле негизде коюуну чечтим. Мен Google'ду көп издешим керек болчу жана биринчи жолу баары жакшы болгон жок, ошондуктан мен дагы деле кыйналып жаткандар үчүн окуу куралын жазууну чечтим.
Ошентип, эгер сизде iOS долбоорунда UI тесттери болсо, аларды Good Corporation тарабынан берилген чыныгы түзмөктөрдө иштетүүгө аракет кылсаңыз болот. Кызыккандар үчүн кош келиңиз.
Окуяда мен кээ бир баштапкы маалыматтарга - GitHubдагы жеке репозиторийге жана CircleCI куруу системасына курууну чечтим. Колдонмонун аты AmazingApp, bundleID - com.company.amazingapp. Мен кийинки башаламандыкты азайтуу үчүн бул маалыматтарды дароо сунуштайм.
Долбооруңузда айрым чечимдерди башкача ишке ашырган болсоңуз, тажрыйбаңызды комментарийлерде бөлүшүңүз.
1. Тесттердин өзү
UI тесттери үчүн жаңы долбоордун бутагын түзүңүз:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
Келгиле, долбоорду XCodeде ачып, UI тесттери менен жаңы Максатты түзөлү [XCode -> Файл -> Жаңы -> Максат -> iOS Testing Bundle], ага AmazingAppUITests өзүн-өзү түшүндүрүүчү аталышты берели.
Түзүлгөн Максаттын Build Phases бөлүмүнө өтүңүз жана Compile Sources - AmazingAppUITests.swift ичинде Максаттуу көз карандылыктардын бар-жоктугун текшериңиз - AmazingApp.
Ар кандай куруу варианттарын өзүнчө схемаларга бөлүү жакшы практика болуп саналат. Биз UI сыноолорубуз үчүн схеманы түзөбүз [XCode -> Продукт -> Схема -> Жаңы схема] жана ага ошол эле атты беребиз: AmazingAppUITests.
Түзүлгөн схеманын түзүлүшү негизги колдонмонун Максатын камтышы керек - AmazingApp жана Target UI тесттери - AmazingAppUITests - скриншотту караңыз
Андан кийин, UI сыноолору үчүн жаңы конфигурацияны түзөбүз. XCodeде долбоордун файлын чыкылдатып, маалымат бөлүмүнө өтүңүз. "+" баскычын чыкылдатып, жаңы конфигурацияны түзүңүз, мисалы XCtest. Кодго кол коюуга келгенде дап менен бийлебеш үчүн бул бизге келечекте керек болот.
Долбооруңузда жок дегенде үч Максат бар: негизги тиркеме, бирдик тесттери (анткени, алар бар, туурабы?) жана биз түзгөн Target UI тесттери.
Target AmazingApp, Build Орнотуулар өтмөгүнө, Code Signing Identity бөлүмүнө өтүңүз. XCtest конфигурациясы үчүн iOS Иштеп чыгуучусун тандаңыз. Кодго кол коюу стили бөлүмүндө Кол менен тандаңыз. Биз азырынча провизия профилин түзө элекпиз, бирок ага бир аздан кийин сөзсүз кайрылабыз.
Target AmazingAppUITests үчүн биз да ушундай кылабыз, бирок Продукт пакетинин идентификатор тилкесинде com.company.amazingappuitests киребиз.
2. Apple Developer программасында долбоорду орнотуу
Apple Иштеп чыгуучу программасынын барагына өтүп, Сертификаттар, Идентификаторлор жана Профильдер бөлүмүнө, андан кийин Идентификаторлор пунктунун Колдонмо ID'лери тилкесине өтүңүз. AmazingAppUITests жана bundleID com.company.amazingappuitests деп аталган жаңы Колдонмо ID түзүңүз.
Эми биз тесттерибизге өзүнчө сертификат менен кол коюуга мүмкүнчүлүгүбүз бар, бирок... Сыноо үчүн конструкцияны чогултуу процедурасы тиркеменин өзүн чогултууну жана тесттик жөө күлүктү чогултууну камтыйт. Демек, биз бир камсыздоо профили менен эки таңгак идентификаторуна кол коюу көйгөйүнө туш болуп жатабыз. Бактыга жараша, жөнөкөй жана жарашыктуу чечим бар - Wildcard App ID. Жаңы Колдонмо ID түзүү процедурасын кайталайбыз, бирок Ачык Колдонмонун ID ордуна скриншоттогудай Wildcard Колдонмо ID тандаңыз.
Бул учурда, биз developer.apple.com менен иштеп бүттүк, бирок биз браузердин терезесин кичирейтпейбиз. баралы
Кунт коюп окурман бул утилитаны колдонуу үчүн бизге жеке репозиторий жана Apple Developer программасына жана Githubга кирүү мүмкүнчүлүгү бар каттоо эсеби керек болорун байкады. Биз форманын эсебин түзөбүз (эгерде күтүлбөгөн жерден андай нерсе жок болсо). [электрондук почта корголгон], күчтүү сырсөз таап, аны developer.apple.com сайтында каттаңыз жана аны долбоордун администратору катары дайындаңыз. Андан кийин, каттоо эсебиңизге компанияңыздын github репозиторийине кирүү мүмкүнчүлүгүн беребиз жана AmazingAppMatch сыяктуу ат менен жаңы жеке репозиторийди түзөбүз.
3. Fastlane жана матч утилитасын орнотуу
Терминалды ачып, долбоор менен папкага өтүңүз жана көрсөтүлгөндөй fastlane инициализациялаңыз
$ fastlane init
Сизден жеткиликтүү колдонуу конфигурацияларын тандоо сунушталат. Төртүнчү жолду тандаңыз - долбоорду кол менен орнотуу.
Долбоордо эки файлды камтыган жаңы каталогдун fastlane бар - Appfile жана Fastfile. Кыскача айтканда, биз кызмат маалыматтарын Appfileде сактайбыз жана Fastlane терминологиясында тилкелер деп аталган Fastfileде тапшырмаларды жазабыз. Мен расмий документтерди окууну сунуштайм:
Сүйүктүү текст редакторуңузда Appfileди ачып, аны төмөнкү формага келтириңиз:
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
Биз терминалга кайтып келип, расмий нускамага ылайык дал келүүнү конфигурациялай баштайбыз.
$ fastlane match init
$ fastlane match development
Андан кийин, суралган маалыматтарды киргизиңиз - репозиторий, эсеп, сырсөз ж.б.
Ал үчүн абдан маанилүү болуп саналат: Дал келүү программасын биринчи жолу ишке киргизгениңизде, сизден репозиторийдин шифрин чечмелөө үчүн сырсөздү киргизүү суралат. Бул сырсөздү сактоо абдан маанилүү, ал бизге CI серверин орнотууда керек болот!
Fastlane папкасында жаңы файл пайда болду - Matchfile. Аны сүйүктүү текст редакторуңузда ачып, төмөнкүдөй көрсөтүңүз:
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
Келечекте Crashlytics жана/же AppStoreде көрсөтүү үчүн түзмөлөргө кол коюу үчүн дал келүүнү колдонууну кааласак, аны дал ушул жол менен толтурабыз, башкача айтканда, колдонмоңуздун таңгак идентификаторуна кол коюу үчүн.
Бирок, эсибизде болгондой, биз сыноо түзүүгө кол коюу үчүн атайын Wildcard ID түздүк. Ошондуктан, Fastfile ачып, жаңы тилкеге кириңиз:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
)
end
Сактоо жана терминалга кириңиз
fastlane testing_build_for_firebase
жана биз fastlane кантип жаңы сертификат түзүп, аны репозиторийге койгонун көрүп жатабыз. Абдан жакшы!
XCode ачыңыз. Эми бизде Match Development com.company.* формасынын керектүү камсыздоо профили бар, ал AmazingApp жана AmazingAppUITests максаттары үчүн Провизия профили бөлүмүндө көрсөтүлүшү керек.
Сыноолорду чогултуу үчүн тилке кошуу калды. баралы
Түпнуска мисалдан көчүрүп чаптайлы, биздин lane testing_build_for_firebase төмөнкүдөй болуп бүтүшү үчүн:
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де fastlane орнотуу жөнүндө толук маалымат алуу үчүн мен расмий документтерди окууну сунуштайм
Биздин config.yml'ге жаңы тапшырма кошууну унутпаңыз:
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. Биздин сыноо стенди жөнүндө эмне айтууга болот? Firebase орнотулууда.
Келгиле, макала эмне үчүн жазылганына токтололу.
Балким, сиздин колдонмоңуз Firebaseти акысыз планда колдонот же такыр колдонбойт. Эч кандай принципиалдуу айырма жок, анткени тестирлөө муктаждыктары үчүн биз бир жылдык акысыз колдонуу менен өзүнчө долбоор түзө алабыз (салкын, туурабы?)
Биз инфраструктуралык аккаунтубузга киребиз (же башка, бул маанилүү эмес) жана барабыз
Ал үчүн абдан маанилүү болуп саналат: Firebase_test_lab_ios_xctest тилкесинде Fastfile ичиндеги мурунку кадамда gcp_project параметри долбоордун атына дал келиши керек.
Демейки орнотуулар бизге абдан ылайыктуу.
Өтмөктү жаппаңыз, ошол эле аккаунтка катталыңыз
Google бир жылга 300 доллар берип жатат, бул автотесттерди өткөрүү контекстинде кызматты бир жылдык бекер колдонууга барабар. Биз сиздин төлөм маалыматыңызды киргизип, $1 тесттик дебетин күтөбүз жана эсебиңизге $300 алабыз. Бир жылдан кийин долбоор автоматтык түрдө бекер тарифтик планга которулат, андыктан акчаны жоготуу мүмкүн деп кооптонуунун кереги жок.
Келгиле, Firebase долбоору менен кошумча таблицага кайрылып, аны Blaze тарифтик планына которолу – эми бизде лимиттен ашып кетсе төлөй турган нерсе бар.
gcloud интерфейсинде Firebase долбоорубузду тандап, "Каталог" негизги менюсун тандап, Cloud Testing API жана Cloud Tools Result API кошуңуз.
Андан кийин меню пунктуна өтүңүз "IAM жана администрация" -> Кызмат эсептери -> Кызмат эсебин түзүү. Биз долбоорду түзөтүү укугун беребиз.
JSON форматында API ачкычын түзүңүз
Жүктөлүп алынган JSON бизге бир аздан кийин керек болот, бирок азыр биз Сыноо лабораториясынын орнотулганын карап чыгабыз.
5. CircleCI орнотуу
Акылга сыярлык суроо туулат - сырсөздөр менен эмне кылуу керек? Куруучу машинабыздын айлана-чөйрөнүн өзгөрмө механизми сырсөздөрүбүздү жана башка купуя маалыматтарыбызды коопсуз сактоого жардам берет. CircleCI долбоорунун жөндөөлөрүнөн Environment Variables тандаңыз
Жана төмөнкү өзгөрмөлөрдү орнотуңуз:
- ачкыч: GOOGLE_APPLICATION_CREDENTIALS
маани: gcloud кызмат эсеп ачкычынын json файлынын мазмуну - ачкыч: MATCH_PASSWORD
маани: сертификаттар менен github репозиторийин чечмелөө үчүн сырсөз - ачкыч: FASTLANE_PASSWORD
маани: Apple Developer Portal инфраструктуралык эсептин сырсөзү
Биз өзгөрүүлөрдү сактап, PR түзүп, аны биздин команданын жетекчисине карап чыгууга жөнөтөбүз.
натыйжалары
Бул жөнөкөй манипуляциялардын натыйжасында биз тестирлөө учурунда аппараттын экранында видео жазуу мүмкүнчүлүгү бар жакшы, туруктуу жумушчу стенд алдык. Сыноо мисалында мен iPhone X аппаратынын моделин көрсөттүм, бирок чарба ар кандай моделдердин жана iOS версияларынын айкалышынан бай тандоону камсыз кылат.
Экинчи бөлүк Android долбоору үчүн Firebase Test Lab программасын этап-этабы менен орнотууга арналат.
Source: www.habr.com