Менің атым Дмитрий, мен компанияда сынақшы болып жұмыс істеймін
Бұған дейін мен 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 тестілеу жинағы], оған AmazingAppUITests өзін-өзі түсіндіретін атау береді.
Жасалған Мақсаттың Құру кезеңдері бөліміне өтіп, Мақсатты тәуелділіктердің бар-жоғын тексеріңіз - AmazingApp, Compile Sources - AmazingAppUITests.swift.
Жақсы тәжірибе әртүрлі құрастыру опцияларын бөлек схемаларға бөлу болып табылады. Біз UI сынақтары үшін схеманы жасаймыз [XCode -> Өнім -> Схема -> Жаңа схема] және оған бірдей атау береміз: AmazingAppUITests.
Жасалған схеманың құрылымы негізгі қолданбаның Мақсатын қамтуы керек - AmazingApp және Target UI сынақтары - AmazingAppUITests - скриншотты қараңыз
Содан кейін біз UI сынақтары үшін жаңа құрастыру конфигурациясын жасаймыз. XCode бағдарламасында жоба файлын басып, Ақпарат бөліміне өтіңіз. «+» түймесін басып, жаңа конфигурация жасаңыз, мысалы, XCtest. Бұл бізге болашақта кодқа қол қою кезінде домбырамен билемеу үшін қажет болады.
Жобаңызда кемінде үш Мақсат бар: негізгі қолданба, бірлік сынақтары (олар бар, солай емес пе?) және біз жасаған Target UI сынақтары.
Target AmazingApp, Құрастыру параметрлері қойындысы, Кодқа қол қою идентификациясы бөліміне өтіңіз. XCtest конфигурациясы үшін iOS әзірлеушісін таңдаңыз. Кодқа қол қою стилі бөлімінде Қолмен опциясын таңдаңыз. Біз провизия профилін әлі жасаған жоқпыз, бірақ оған сәл кейінірек ораламыз.
Target AmazingAppUITests үшін біз де солай істейміз, бірақ Өнім жинағының идентификаторы бағанында com.company.amazingappuitests енгіземіз.
2. Apple Developer бағдарламасында жобаны орнату
Apple әзірлеуші бағдарламасы бетіне өтіңіз, Сертификаттар, идентификаторлар және профильдер бөліміне, содан кейін Идентификаторлар элементінің Қолданба идентификаторлары бағанына өтіңіз. AmazingAppUITests және bundleID com.company.amazingappuitests деп аталатын жаңа қолданба идентификаторын жасаңыз.
Енді бізде сынақтарымызға жеке сертификатпен қол қоюға мүмкіндігіміз бар, бірақ... Тестілеу үшін құрастыруды құрастыру процедурасы қосымшаның өзін құрастыруды және сынақ жүгірткіні құрастыруды қамтиды. Тиісінше, біз бір провизия профилі бар екі бума идентификаторына қол қою мәселесіне тап болдық. Бақытымызға орай, қарапайым және талғампаз шешім бар - Wildcard App ID. Жаңа қолданба идентификаторын жасау процедурасын қайталаймыз, бірақ айқын қолданба идентификаторының орнына скриншоттағыдай Wildcard қолданба идентификаторын таңдаңыз.
Осы сәтте біз developer.apple.com сайтымен жұмыс істеп жатырмыз, бірақ браузер терезесін кішірейтпейміз. барайық
Мұқият оқырман бұл қызметтік бағдарламаны пайдалану үшін бізге жеке репозиторий және Apple әзірлеуші бағдарламасына және Github-қа кіру мүмкіндігі бар тіркелгі қажет болатынын байқады. Біз пішіннің тіркелгісін жасаймыз (егер кенеттен мұндай нәрсе болмаса). [электрондық пошта қорғалған], күшті құпия сөз ойлап тауып, оны developer.apple.com сайтында тіркеңіз және оны жоба әкімшісі ретінде тағайындаңыз. Әрі қарай, есептік жазбаға компанияңыздың github репозиторийіне рұқсат береміз және AmazingAppMatch сияқты атауы бар жаңа жеке репозиторий жасаймыз.
3. Fastlane және сәйкестік утилитасын орнату
Терминалды ашыңыз, жоба бар қалтаға өтіңіз және көрсетілгендей fastlane инициализациялаңыз
$ fastlane init
Қол жетімді пайдалану конфигурацияларын таңдау сұралады. Төртінші опцияны таңдаңыз - жобаны қолмен орнату.
Жобада екі файлдан тұратын жаңа жылдам каталог бар - 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 жоба параметрлерінде Ортаның айнымалы мәндерін таңдаңыз
Және келесі айнымалыларды орнатыңыз:
- кілт: GOOGLE_APPLICATION_CREDENTIALS
мән: gcloud қызмет тіркелгі кілтінің json файлының мазмұны - кілт: MATCH_PASSWORD
мән: сертификаттармен github репозиторийінің шифрын шешуге арналған құпия сөз - кілт: FASTLANE_PASSWORD
мән: Apple әзірлеуші порталының инфрақұрылым тіркелгісінің құпия сөзі
Біз өзгертулерді сақтаймыз, PR жасаймыз және оны топ басшысына тексеруге жібереміз.
Нәтижелері
Осы қарапайым манипуляциялардың нәтижесінде біз тестілеу кезінде құрылғы экранында бейне жазу мүмкіндігі бар жақсы, тұрақты жұмыс стенді алдық. Сынақ мысалында мен iPhone X құрылғысының үлгісін көрсеттім, бірақ ферма әртүрлі үлгілер мен iOS нұсқаларының тіркесімінен бай таңдауды қамтамасыз етеді.
Екінші бөлім Android жобасы үшін Firebase сынақ зертханасын кезең-кезеңімен орнатуға арналады.
Ақпарат көзі: www.habr.com