Јас се викам Дмитриј, работам како тестер во компанијата
Пред ова, веќе ја пробав Firebase Test Lab за Андроид и навистина ми се допадна сè, па решив да се обидам да ја ставам инфраструктурата за тестирање iOS на проектот на иста основа. Морав многу да гуглам и сè не излезе од прв пат, па решив да напишам статија за туторијал за оние кои сè уште се мачат.
Значи, ако имате тестови за интерфејс на проект за iOS, веќе може да се обидете да ги извршите на вистински уреди денес, љубезно обезбедени од Good Corporation. За заинтересираните, добредојдовте во мачка.
Во приказната, решив да изградам некои првични податоци - приватно складиште на GitHub и системот за градење CircleCI. Името на апликацијата е AmazingApp, bundleID е com.company.amazingapp. Ги презентирам овие податоци веднаш за да ја намалам последователната конфузија.
Доколку поинаку имплементиравте одредени решенија во вашиот проект, споделете го вашето искуство во коментарите.
1. Самите тестови
Создадете нова проектна гранка за тестови за кориснички интерфејс:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
Ајде да го отвориме проектот во XCode и да создадеме нова цел со тестови за интерфејс [XCode -> Датотека -> Ново -> Цел -> Пакет за тестирање на iOS], давајќи ѝ го самообјаснивото име AmazingAppUITests.
Одете во делот Изградба на фази на креираната цел и проверете дали има Target Dependencies - AmazingApp, во Compile Sources - AmazingAppUITests.swift.
Добра практика е да се одделат различни опции за изградба во посебни шеми. Ние создаваме шема за нашите тестови за интерфејс [XCode -> Product -> Scheme -> New Scheme] и му го даваме истото име: AmazingAppUITests.
Изградбата на креираната шема мора да ја вклучува Целта на главната апликација - тестови AmazingApp и Target UI - AmazingAppUITests - видете ја сликата од екранот
Следно, создаваме нова конфигурација за градба за тестови за интерфејс. Во XCode, кликнете на проектната датотека и одете во делот Инфо. Кликнете на „+“ и креирајте нова конфигурација, на пример XCtest. Ова ќе ни треба во иднина за да избегнеме танцување со тамбура кога станува збор за потпишување кодови.
Има најмалку три Цели во вашиот проект: главната апликација, единечни тестови (на крајот на краиштата, тие постојат, нели?) и тестовите на Target UI што ги создадовме.
Одете во Target AmazingApp, табот Build Settings, делот за идентитет за потпишување код. За конфигурацијата XCtest, изберете iOS Developer. Во делот Стил на потпишување код, изберете Рачно. Сè уште немаме генерирано профил за обезбедување, но дефинитивно ќе се вратиме на него малку подоцна.
За Target AmazingAppUITests го правиме истото, но во колоната Product Bundle Identifier внесуваме com.company.amazingappuitests.
2. Поставување проект во Програмата за програмери на Apple
Одете на страницата на Програмата за програмери на Apple, одете во делот Сертификати, идентификатори и профили, а потоа во колоната Идентификатори на апликации од ставката Идентификатори. Создадете нов ID на апликација наречен AmazingAppUITests и bundleID com.company.amazingappuitests.
Сега имаме можност да ги потпишеме нашите тестови со посебен сертификат, но... Постапката за составување на градба за тестирање вклучува склопување на самата апликација и склопување на тест тркачот. Соодветно на тоа, се соочуваме со проблемот на потпишување на две ИД на пакети со еден профил за обезбедување. За среќа, постои едноставно и елегантно решение - Wildcard App ID. Ја повторуваме постапката за креирање на нов ID на апликацијата, но наместо Експлицитен ID на апликацијата, изберете Wildcard App ID како на сликата од екранот.
Во овој момент, завршивме со работа со developer.apple.com, но нема да го минимизираме прозорецот на прелистувачот. Ајде да одиме на
Внимателен читател забележа дека за да ја користиме оваа алатка ќе ни треба приватно складиште и сметка со пристап и до Програмата за програмери на Apple и до Github. Ние создаваме (ако одеднаш нема такво нешто) сметка на формата [заштитена по е-пошта], излезе со силна лозинка, регистрирајте ја на developer.apple.com и назначете ја како администратор на проектот. Следно, на сметката и даваме пристап до складиштето github на вашата компанија и создаваме ново приватно складиште со име како AmazingAppMatch.
3. Поставување на Fastlane и алатката за натпревар
Отворете терминал, одете во папката со проектот и иницијализирајте го fastlane како што е наведено во
$ fastlane init
Ќе ви биде побарано да изберете достапни конфигурации за користење. Изберете ја четвртата опција - рачно поставување на проектот.
Проектот има нов директориум fastlane, кој содржи две датотеки - Appfile и Fastfile. Накратко, ние складираме податоци за услугите во Appfile и пишуваме работни места во Fastfile, наречени ленти во терминологијата Fastlane. Препорачувам да ја прочитате официјалната документација:
Отворете ја 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
Го пополнуваме токму на овој начин ако сакаме да користиме Match во иднина за да потпишуваме изданија за прикажување во Crashlytics и/или AppStore, односно да го потпишеме ID на пакетот на вашата апликација.
Но, како што се сеќаваме, создадовме специјален ID на Wildcard за потпишување на тест-изградбата. Затоа, отворете го 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.
Останува да се додаде лента за склопување тестови. Ајде да одиме на
Ајде да направиме copy-paste од оригиналниот пример, така што нашата лента 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
За целосни информации за поставување fastlane во CircleCI, препорачувам да ја прочитате официјалната документација
Не заборавајте да додадете нова задача на нашиот 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 на бесплатен план, или можеби воопшто не. Апсолутно нема фундаментална разлика, бидејќи за потребите за тестирање можеме да создадеме посебен проект со една година бесплатна употреба (кул, нели?)
Се најавуваме на нашата инфраструктурна сметка (или која било друга, не е важно) и одиме на
Важно: Во претходниот чекор во тестот Fastfile in lane firebase_test_lab_ios_xc, параметарот gcp_project треба да одговара на името на проектот.
Стандардните поставки доста добро ни одговараат.
Не го затворајте јазичето, регистрирајте се под истата сметка во
Google дава 300 долари за една година, што во контекст на вршење автотестови е еквивалентно на една година бесплатно користење на услугата. Ги внесуваме вашите информации за плаќање, чекаме тест за задолжување од $1 и добиваме $300 на вашата сметка. По една година, проектот автоматски ќе се префрли на бесплатен тарифен план, така што нема потреба да се грижите за можно губење на пари.
Да се вратиме на јазичето со проектот Firebase и да го префрлиме на тарифниот план Блаже - сега имаме што да платиме ако се надмине лимитот.
Во интерфејсот на gcloud, изберете го нашиот проект Firebase, изберете ја главната ставка од менито „Директориум“ и додајте ги API-то за тестирање на облакот и API-то на резултатите од алатките за облак.
Потоа одете во ставката од менито „IAM и администрација“ -> Сметки за услуги -> Креирај сметка за услуга. Даваме права за уредување на проектот.
Креирајте клуч API во JSON формат
Ќе ни треба преземениот JSON малку подоцна, но засега ќе сметаме дека поставувањето на тест лабораторија е завршено.
5. Поставување CircleCI
Се поставува разумно прашање - што да се прави со лозинките? Механизмот на променливата околина на нашата машина за градење ќе ни помогне безбедно да ги складираме нашите лозинки и другите чувствителни податоци. Во поставките на проектот CircleCI, изберете Environment Variables
И поставете ги следните променливи:
- клуч: GOOGLE_APPLICATION_CREDENTIALS
вредност: содржината на датотеката json на клучот за сметката на услугата gcloud - клуч: MATCH_PASSWORD
вредност: лозинка за дешифрирање на складиштето github со сертификати - клуч: FASTLANE_PASSWORD
вредност: лозинка за инфраструктурна сметка на порталот за програмери на Apple
Ги зачувуваме промените, создаваме ПР и го испраќаме до нашиот тим за преглед.
Резултатите од
Како резултат на овие едноставни манипулации, добивме добар, стабилен работен штанд со можност за снимање видео на екранот на уредот за време на тестирањето. Во примерот за тестирање, го наведов моделот на уредот iPhone X, но фармата обезбедува богат избор од комбинација на различни модели и верзии на iOS.
Вториот дел ќе биде посветен на чекор-по-чекор поставување на Firebase Test Lab за проект со Android.
Извор: www.habr.com