Mi chjamu Dmitry, aghju travagliatu cum'è tester in una cumpagnia
Prima di quessa, aghju digià pruvatu Firebase Test Lab per Android è mi piaceva assai tuttu, cusì aghju decisu di pruvà à mette l'infrastruttura di prova iOS di u prughjettu nantu à i stessi rails. Aviu avutu à google assai è micca tuttu hà travagliatu a prima volta, cusì aghju decisu di scrive un articulu tutoriale per quelli chì anu da fà.
Allora, sè vo avete teste UI nantu à un prughjettu iOS, pudete digià pruvà à eseguisce oghje nantu à i dispositi veri, furnitu da a Good Corporation. Interessatu - benvenutu sottu cat.
In a storia, aghju decisu di custruisce nantu à qualchi dati fonte - un repository privatu in GitHub è u sistema di creazione CircleCI. U nome di l'applicazione hè AmazingApp, bundleID hè com.company.amazingapp. Citu questi dati immediatamente, per riduce a cunfusione sussegwente.
Sè avete implementatu certe suluzione in u vostru prughjettu di manera diversa, sparte a vostra sperienza in i cumenti.
1. I testi stessi
Crea un novu ramu di prughjettu per i testi UI:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
Apertemu u prugettu in XCode è creanu un novu Target cù teste UI [XCode -> File -> New -> Target -> iOS Testing Bundle], dà u nome dicendu AmazingAppUITests.
Andà à a sezione di Fasi di Custruzzione di u Target creatu è verificate per Target Dependencies - AmazingApp, in Compile Sources - AmazingAppUITests.swift.
Hè una bona pratica per separà e diverse opzioni di creazione in Schemi separati. Creemu un schema per i nostri testi UI [XCode -> Product -> Scheme -> New Scheme] è dà u listessu nome: AmazingAppUITests.
A creazione di u schema creatu deve include u Target di l'applicazione principale - AmazingApp è Test Target UI - AmazingAppUITests - vede screenshot
In seguitu, creemu una nova cunfigurazione di custruzzione per i testi UI. In Xcode, cliccate nantu à u schedariu di prughjettu, andate à a sezione Info. Cliccate nant'à u "+" è crea una nova cunfigurazione, per esempiu XCtest. Avemu bisognu di questu in u futuru per evità di ballà cù un tamburinu quandu si tratta di a firma di codice.
Ci hè almenu trè Targets in u vostru prughjettu: l'applicazione principale, i testi di unità (ci sò alcuni, nò?) è l'UI Target di teste chì avemu creatu.
Andà à Target AmazingApp, Build Settings tab, Code Signing Identity sezione. Per a cunfigurazione XCtest, selezziunate Sviluppatore iOS. In a sezione Style Signing Code, selezziunate Manuale. Ùn avemu micca ancu generatu un prufilu di pruvisione, ma ci torneremu di sicuru un pocu dopu.
Per Target AmazingAppUITests, facemu u listessu, ma entre com.company.amazingappuitests in a colonna Product Bundle Identifier.
2. Stallà un prughjettu in u prugramma Apple Developer
Andemu à a pagina di u prugramma Apple Developer, andemu à a sezione Certificati, Identificatori è Profili è dopu à a colonna App ID di l'elementu Identificatori. Crea un novu ID App chjamatu AmazingAppUITests è bundleID com.company.amazingappuitests.
Avà avemu l'uppurtunità di firmà e nostre teste cù un certificatu separatu, ma ... A prucedura di custruzzione per a prova implica a custruzzione di l'applicazione stessa è a custruzzione di u test runner. In cunsiquenza, avemu affruntatu u prublema di firmà dui ID di bundle cù un prufilu di pruvisione. Fortunatamente, ci hè una suluzione simplice è elegante - Wildcard App ID. Ripitemu a prucedura per creà una nova App ID, ma invece di l'App ID esplicitu, selezziunate l'ID App Wildcard cum'è in a screenshot.
À questu puntu, avemu finitu cù developer.apple.com, ma ùn minimizeremu micca a finestra di u navigatore. Andemu à
Un lettore attentu hà nutatu chì per utilizà sta utilità, avemu bisognu di un repository privatu è un contu chì hà accessu à u prugramma Apple Developer è à Github. Creemu (se di colpu ùn ci hè micca cusì) un contu di a forma [email prutettu], vene cun una password forte, arregistrallu in developer.apple.com, è numinallu cum'è amministratore di prughjettu. In seguitu, dà u vostru contu accessu à u repositoriu github di a vostra cumpagnia è crea un novu repositoriu privatu cù un nome cum'è AmazingAppMatch.
3. Stabbilimentu di Fastlane è l'utilità match
Aprite u terminal, andate à u cartulare cù u prugettu è inizializza Fastlane cum'è indicatu in
$ fastlane init
vi sarà dumandatu à selezziunà i cunfigurazioni usu disponibile. Selezziunà u quartu articulu - cunfigurazione manuale di u prugettu.
Un novu cartulare fastlane hè apparsu in u prughjettu, in quale ci sò dui schedari - Appfile è Fastfile. In poche parole - in Appfile guardemu dati di serviziu, è in Fastfile scrivimu i travaglii, in a terminologia di Fastlane chjamata lanes. Vi cunsigliu di leghje a documentazione ufficiale:
Apertura l'Appfile in u vostru editore di testu preferitu è purtate à a forma seguente:
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
Riturnemu à u terminal è, secondu u manuale ufficiale, cuminciamu à stallà partita.
$ fastlane match init
$ fastlane match development
Dopu, entre in i dati dumandati - repository, account, password, etc.
Hè impurtante di: a prima volta chì eseguite l'utilità di partita, vi dumandarà di inserisce una password per decrypt u repository. Hè assai impurtante per salvà sta password, avemu bisognu à u stadiu di a stallazione di u servitore CI!
Un novu schedariu hè apparsu in u cartulare fastlane - Matchfile. Apri lu in u vostru editore di testu preferitu è porta à a forma:
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
Cumpigliemu in questu modu se vulemu aduprà match in u futuru per firmà e custruzzioni per a carica in Crashlytics è / o AppStore, vale à dì per firmà l'ID di bundle di a vostra applicazione.
Ma, cum'è ricurdamu, avemu creatu un ID Wildcard speciale per firmà a prova di custruzzione. Dunque, apre Fastfile è entre in una nova corsia:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
)
end
Salvà, entre in u terminal
fastlane testing_build_for_firebase
è vede cumu fastlane hà creatu un novu certificatu è mette in u repository. Perfettu!
Aprite XCode. Avà avemu u prufilu di pruvisione necessariu di u tipu Match Development com.company.*, chì deve esse specificatu in a sezione di prufilu di Provisioning per i miri AmazingApp è AmazingAppUITests.
Resta à aghjunghje una corsia per custruisce e teste. Andemu à
Copia-incolla da l'esempiu originale in modu chì a nostra lane testing_build_for_firebase finisce cusì cusì:
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
Per infurmazione cumpleta nantu à a creazione di fastlane in CircleCI, vi cunsigliu di leghje a documentazione ufficiale
Ùn vi scurdate di aghjunghje un novu compitu à u nostru 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. Chì ci hè u nostru bancu di prova ? Configurazione di Firebase.
Andemu, in fattu, per ciò chì l'articulu hè statu scrittu.
A vostra app pò esse aduprendu Firebase in un pianu gratuitu, o ùn pò esse micca aduprà Firebase in tuttu. Ùn ci hè assolutamente nisuna differenza fundamentale, perchè per i bisogni di teste pudemu creà un prughjettu separatu cù un annu di usu liberu (cool, huh?)
Entramu in u nostru contu infrastruttura (o qualsiasi altru, ùn importa micca), è andemu à
Hè impurtante di: In u passu precedente, in u Fastfile in lane firebase_test_lab_ios_xctest, u paràmetru gcp_project deve currisponde à u nome di u prugettu.
I paràmetri predeterminati ci cunvene bè.
Ùn chjudemu micca a tabulazione, avemu registratu sottu u stessu contu in
Google dà $ 300 per un annu, chì in u cuntestu di eseguisce autotests equivale à un annu di usu gratuitu di u serviziu. Insememu i dati di pagamentu, aspittemu a scrittura di prova di $ 1 è uttene $ 300 à u contu. Dopu à un annu, u prugettu serà automaticamente trasferitu à un pianu di tariffu gratuitu, perchè ùn deve micca preoccupatu di a pussibuli pèrdita di soldi.
Riturnemu à a tabulazione cù u prughjettu Firebase è trasfiriu à u pianu di tariffu Blaze - avà avemu qualcosa da pagà se u limitu hè superatu.
In l'interfaccia gcloud, selezziunate u nostru prughjettu Firebase, selezziunate l'elementu di menu principale "Catalogue" è aghjunghje l'API Cloud Testing è Cloud Tools Result API.
Allora andate à l'elementu di menu "IAM è amministrazione" -> Conti di serviziu -> Crea un contu di serviziu. Concede permessu per edità u prugettu.
Crea una chjave API in formatu JSON
Avemu bisognu di u JSON scaricatu un pocu più tardi, ma per avà cunsideremu a stallazione di Test Lab cumpleta.
5. Setting CircleCI
Una quistione raghjone hè in preparazione - chì fà cù e password? Per mantene e nostre password è altre dati sensittivi in modu sicuru, u mecanismu di variabili ambientali di a nostra macchina di custruzzione ci aiuterà. In i paràmetri di u prughjettu CircleCI, selezziunate Variabili d'ambiente
È stabilisce e seguenti variabili:
- chjave: GOOGLE_APPLICATION_CREDENTIALS
valore: cuntenutu di u schedariu json di chjave di u contu di serviziu di gcloud - chjave: MATCH_PASSWORD
valore: password per decrypt u repository github cù certificati - chjave: FASTLANE_PASSWORD
valore: password di u contu di l'infrastruttura Apple Developer Portal
Salvemu i cambiamenti, creemu un PR è u mandemu à u nostru capu di squadra per rivisione.
Risultati
In u risultatu di queste manipulazioni simplici, avemu avutu un bonu stand di travagliu stabile cù a capacità di registrà video nantu à u screnu di u dispusitivu à u mumentu di a prova. In u casu di teste, aghju specificatu u mudellu di u dispositivu iPhone X, ma a splutazioni furnisce una scelta ricca da una cumminazione di mudelli diffirenti è versioni iOS.
A seconda parte serà dedicata à a creazione di Firebase Test Lab per un prughjettu Android passu à passu.
Source: www.habr.com