Jisimni Dmitry, naħdem bħala tester fil-kumpanija
Qabel dan, kont diġà ppruvajt Firebase Test Lab għal Android u għoġobni kollox, għalhekk iddeċidejt li nipprova npoġġi l-infrastruttura tat-test tal-iOS tal-proġett fuq l-istess livell. Kelli Google ħafna u mhux kollox ħadem l-ewwel darba, għalhekk iddeċidejt li nikteb artiklu tutorja għal dawk li għadhom qed jitħabtu.
Allura, jekk għandek testijiet tal-UI fuq proġett tal-iOS, diġà tista 'tipprova tmexxihom fuq apparat reali llum, ġentilment ipprovdut minn Good Corporation. Għal dawk interessati, merħba lil cat.
Fl-istorja, iddeċidejt li nibni fuq xi data inizjali - repożitorju privat fuq GitHub u s-sistema tal-bini CircleCI. L-isem tal-applikazzjoni huwa AmazingApp, bundleID huwa com.company.amazingapp. Nippreżenta din id-dejta immedjatament biex inaqqas il-konfużjoni sussegwenti.
Jekk implimentajt ċerti soluzzjonijiet fil-proġett tiegħek b'mod differenti, aqsam l-esperjenza tiegħek fil-kummenti.
1. It-testijiet infushom
Oħloq fergħa ġdida tal-proġett għat-testijiet tal-UI:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
Ejja niftħu l-proġett f'XCode u noħolqu Target ġdid b'testijiet UI [XCode -> File -> New -> Target -> iOS Testing Bundle], billi tagħtiha l-isem li jispjega lilu nnifsu AmazingAppUITests.
Mur fit-taqsima tal-Fażi tal-Ibni tal-Mira maħluqa u ċċekkja l-preżenza ta' Dipendenzi fil-Mira - AmazingApp, f'Kompila Sorsi - AmazingAppUITests.swift.
Prattika tajba hija li tissepara għażliet ta' bini differenti fi Skemi separati. Noħolqu skema għat-testijiet UI tagħna [XCode -> Prodott -> Skema -> Skema Ġdida] u nagħtuha l-istess isem: AmazingAppUITests.
Il-bini tal-iskema maħluqa għandu jinkludi l-Mira tal-applikazzjoni prinċipali - testijiet AmazingApp u Target UI - AmazingAppUITests - ara screenshot
Sussegwentement, noħolqu konfigurazzjoni tal-bini ġdid għat-testijiet tal-UI. F'XCode, ikklikkja fuq il-fajl tal-proġett u mur fit-taqsima tal-Informazzjoni. Ikklikkja fuq "+" u oħloq konfigurazzjoni ġdida, pereżempju XCtest. Dan ikollna bżonn fil-futur sabiex nevitaw li niżfin bit-tambourine fejn jidħol l-iffirmar tal-kodiċi.
Hemm mill-inqas tliet Miri fil-proġett tiegħek: l-applikazzjoni prinċipali, testijiet tal-unità (wara kollox, jeżistu, hux?) u t-testijiet tal-UI Target li ħloqna.
Mur fil-Target AmazingApp, tab Settings tal-Ibni, sezzjoni tal-Identità tal-Firmar tal-Kodiċi. Għall-konfigurazzjoni XCtest, agħżel iOS Developer. Fit-taqsima tal-Istil tal-Firmar tal-Kodiċi, agħżel Manwal. Għadna ma ġġenerajnax profil ta' proviżjonament, iżda żgur li se nerġgħu lura għalih ftit aktar tard.
Għal Target AmazingAppUITests nagħmlu l-istess, iżda fil-kolonna Product Bundle Identifier nidħlu com.company.amazingappuitests.
2. Twaqqif ta 'proġett fil-Programm ta' Żviluppatur Apple
Mur fil-paġna tal-Programm tal-Apple Developer, mur fit-taqsima Ċertifikati, Identifikaturi u Profili u mbagħad fil-kolonna App IDs tal-oġġett Identifikaturi. Oħloq App ID ġdid imsejjaħ AmazingAppUITests u bundleID com.company.amazingappuitests.
Issa għandna l-opportunità li niffirmaw it-testijiet tagħna b'ċertifikat separat, iżda... Il-proċedura għall-assemblaġġ ta 'build għall-ittestjar tinvolvi l-assemblaġġ tal-applikazzjoni nnifisha u l-assemblaġġ tat-test runner. Għaldaqstant, qed niffaċċjaw il-problema li niffirmaw żewġ IDs tal-pakketti bi profil ta' forniment wieħed. Fortunatament, hemm soluzzjoni sempliċi u eleganti - Wildcard App ID. Nirrepetu l-proċedura għall-ħolqien ta 'App ID ġdida, iżda minflok l-App ID Espliċita, agħżel Wildcard App ID bħal fil-screenshot.
F'dan il-punt, lestejna naħdmu ma' developer.apple.com, iżda mhux se nnaqqsu t-tieqa tal-browser. Ejja mmorru
Qarrej attent innota li biex nużaw din l-utilità se jkollna bżonn repożitorju privat u kont b'aċċess kemm għall-Programm tal-Iżviluppaturi ta 'Apple kif ukoll għal Github. Noħolqu (jekk f'daqqa waħda ma jkunx hemm tali ħaġa) kont tal-formola [protett bl-email], toħroġ b'password b'saħħitha, irreġistraha ma' developer.apple.com, u aħtarha bħala amministratur tal-proġett. Sussegwentement, aħna nagħtu aċċess għall-kont għar-repożitorju github tal-kumpanija tiegħek u noħolqu repożitorju privat ġdid b'isem bħal AmazingAppMatch.
3. Twaqqif ta 'Fastlane u l-utilità tal-logħba
Iftaħ terminal, mur fil-folder bil-proġett u initialize fastlane kif indikat fi
$ fastlane init
Inti se tintalab tagħżel il-konfigurazzjonijiet tal-użu disponibbli. Agħżel ir-raba 'għażla - setup manwali tal-proġett.
Il-proġett għandu direttorju ġdid fastlane, li fih żewġ fajls - Appfile u Fastfile. Fi ftit kliem, aħna naħżnu d-dejta tas-servizz f’Appfile, u niktbu l-impjiegi f’Fastfile, imsejħa korsiji fit-terminoloġija ta’ Fastlane. Nirrakkomanda li taqra d-dokumentazzjoni uffiċjali:
Iftaħ l-Appfile fl-editur tat-test favorit tiegħek u ġibu fil-forma li ġejja:
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
Nirritornaw lejn it-terminal u skont il-manwal uffiċjali nibdew nikkonfiguraw il-logħba.
$ fastlane match init
$ fastlane match development
Sussegwentement, daħħal id-dejta mitluba - repożitorju, kont, password, eċċ.
Importanti: Meta tniedi għall-ewwel darba l-utilità tat-tlaqqigħ, inti tintalab iddaħħal password biex tiddikripta r-repożitorju. Huwa importanti ħafna li tissejvja din il-password; ikollna bżonnha meta nwaqqfu s-server CI!
Fajl ġdid deher fil-folder tal-fastlane - Matchfile. Iftaħ fl-editur tat-test favorit tiegħek u urih hekk:
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
Aħna nimlewh eżattament b'dan il-mod jekk irridu nużaw match fil-futur biex niffirmaw builds għall-wiri fi Crashlytics u/jew AppStore, jiġifieri, biex niffirmaw l-ID tal-pakkett tal-applikazzjoni tiegħek.
Iżda, kif niftakru, ħloqna ID Wildcard speċjali biex niffirmaw il-bini tat-test. Għalhekk, iftaħ Fastfile u daħħal korsija ġdida:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
)
end
Issejvja u daħħal fit-terminal
fastlane testing_build_for_firebase
u naraw kif fastlane ħoloq ċertifikat ġdid u poġġih fir-repożitorju. Kbir!
Iftaħ XCode. Issa għandna l-profil ta’ forniment meħtieġ tal-formola Match Development com.company.*, li għandu jiġi speċifikat fit-taqsima tal-Profil ta’ Provisioning għall-miri AmazingApp u AmazingAppUITests.
Fadal li żżid korsija għat-testijiet tal-assemblaġġ. Ejja mmorru
Ejja nikkopja-pejstja mill-eżempju oriġinali sabiex il-korsija tagħna testing_build_for_firebase tispiċċa tidher bħal din:
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
Għal informazzjoni kompleta dwar it-twaqqif ta' fastlane f'CircleCI, nirrakkomanda li taqra d-dokumentazzjoni uffiċjali
Tinsiex iżżid kompitu ġdid fil-config.yml tagħna:
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. Xi ngħidu dwar il-bank tat-test tagħna? Twaqqif ta' Firebase.
Ejja ninżlu għal xiex inkiteb l-artiklu.
Forsi l-app tiegħek tuża Firebase fuq pjan b'xejn, jew forsi xejn. M'hemm assolutament l-ebda differenza fundamentali, għaliex għall-ħtiġijiet ta 'ttestjar nistgħu noħolqu proġett separat b'sena ta' użu b'xejn (jibred, hux?)
Aħna nilloggjaw fil-kont tal-infrastruttura tagħna (jew kwalunkwe ieħor, ma jimpurtax), u mmorru
Importanti: Fil-pass preċedenti fil-Fastfile fil-korsija firebase_test_lab_ios_xctest il-parametru gcp_project għandu jaqbel mal-isem tal-proġett.
Is-settings default jixirquna pjuttost tajjeb.
Tagħlaqx it-tab, irreġistra taħt l-istess kont fi
Google qed tagħti $300 għal sena, li fil-kuntest tat-twettiq ta 'awtotests hija ekwivalenti għal sena ta' użu b'xejn tas-servizz. Aħna ndaħħlu l-informazzjoni tal-ħlas tiegħek, nistennew id-debitu tat-test ta' $1 u nirċievu $300 fil-kont tiegħek. Wara sena, il-proġett jiġi ttrasferit awtomatikament għal pjan ta 'tariffi b'xejn, u għalhekk m'hemmx għalfejn tinkwieta dwar telf possibbli ta' flus.
Ejja nerġgħu lura għat-tab bil-proġett Firebase u tittrasferih għall-pjan tat-tariffi Blaze - issa għandna xi ħaġa x'nħallsu jekk jinqabeż il-limitu.
Fl-interface tal-gcloud, agħżel il-proġett Firebase tagħna, agħżel l-oġġett tal-menu prinċipali "Direttorju" u żid il-Cloud Testing API u Cloud Tools Result API.
Imbagħad mur fil-punt tal-menu "IAM u amministrazzjoni" -> Kontijiet tas-servizz -> Oħloq kont tas-servizz. Aħna nagħtu drittijiet biex jeditjaw il-proġett.
Oħloq ċavetta API fil-format JSON
Ikollna bżonn il-JSON imniżżel ftit aktar tard, iżda għalissa se nikkunsidraw is-setup tal-Lab tat-Test komplut.
5. Twaqqif ta' CircleCI
Tqum mistoqsija raġonevoli - x'għandek tagħmel bil-passwords? Il-mekkaniżmu varjabbli ambjentali tal-magna tal-bini tagħna se jgħinna naħżnu b'mod sigur il-passwords tagħna u data sensittiva oħra. Fis-settings tal-proġett CircleCI, agħżel Varjabbli Ambjentali
U waqqaf il-varjabbli li ġejjin:
- ċavetta: GOOGLE_APPLICATION_CREDENTIALS
valur: kontenut tal-fajl json taċ-ċavetta tal-kont tas-servizz gcloud - ċavetta: MATCH_PASSWORD
valur: password għad-deċifrar tar-repożitorju tal-github b'ċertifikati - ċavetta: FASTLANE_PASSWORD
valur: Il-password tal-kont tal-infrastruttura tal-Apple Developer Portal
Aħna nissejvjaw il-bidliet, noħolqu PR u nibagħtu lill-mexxej tat-tim tagħna għal reviżjoni.
Riżultati ta '
Bħala riżultat ta 'dawn il-manipulazzjonijiet sempliċi, irċevejna stand tax-xogħol tajjeb u stabbli bil-kapaċità li nirreġistra vidjo fuq l-iskrin tal-apparat fil-ħin tal-ittestjar. Fl-eżempju tat-test, speċifikajt il-mudell tal-apparat iPhone X, iżda r-razzett jipprovdi għażla rikka minn taħlita ta 'mudelli differenti u verżjonijiet tal-iOS.
It-tieni parti se tkun iddedikata għat-twaqqif pass pass ta' Firebase Test Lab għal proġett Android.
Sors: www.habr.com