Moje ime je Dmitry, delam kot tester v podjetju
Pred tem sem že preizkusil Firebase Test Lab za Android in vse mi je bilo zelo všeč, zato sem se odločil, da preizkusno infrastrukturo projekta iOS poskusim postaviti na isto podlago. Veliko sem moral brskati po Googlu in prvič ni šlo vse, zato sem se odločil napisati članek z navodili za tiste, ki se še vedno borijo.
Torej, če imate teste uporabniškega vmesnika na projektu iOS, jih lahko že danes poskusite izvesti na resničnih napravah, ki jih prijazno zagotavlja Good Corporation. Kogar zanima, dobrodošli v kat.
V zgodbi sem se odločil graditi na nekaj začetnih podatkih – zasebnem repozitoriju na GitHubu in sistemu za gradnjo CircleCI. Ime aplikacije je AmazingApp, bundleID je com.company.amazingapp. Te podatke predstavljam takoj, da zmanjšam kasnejšo zmedo.
Če ste nekatere rešitve v svojem projektu implementirali drugače, delite svoje izkušnje v komentarjih.
1. Sami testi
Ustvarite novo vejo projekta za preizkuse uporabniškega vmesnika:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
Odprimo projekt v XCode in ustvarimo nov Target s testi uporabniškega vmesnika [XCode -> File -> New -> Target -> iOS Testing Bundle] in mu dajmo samoumevno ime AmazingAppUITests.
Pojdite na razdelek Build Phases ustvarjenega cilja in preverite prisotnost ciljnih odvisnosti - AmazingApp, v Compile Sources - AmazingAppUITests.swift.
Dobra praksa je, da različne možnosti gradnje ločite v ločene sheme. Ustvarimo shemo za naše preizkuse uporabniškega vmesnika [XCode -> Product -> Scheme -> New Scheme] in ji damo isto ime: AmazingAppUITests.
Zgradba ustvarjene sheme mora vključevati cilj glavne aplikacije - AmazingApp in preizkuse uporabniškega vmesnika Target - AmazingAppUITests - glejte posnetek zaslona
Nato ustvarimo novo konfiguracijo gradnje za preizkuse uporabniškega vmesnika. V XCode kliknite datoteko projekta in pojdite na razdelek Informacije. Kliknite »+« in ustvarite novo konfiguracijo, na primer XCtest. To bomo potrebovali v prihodnje, da se izognemo plesu s tamburino pri podpisovanju kod.
V vašem projektu so vsaj trije cilji: glavna aplikacija, testi enot (navsezadnje obstajajo, kajne?) in testi uporabniškega vmesnika Target, ki smo jih ustvarili.
Pojdite na Target AmazingApp, zavihek Build Settings, razdelek Code Signing Identity. Za konfiguracijo XCtest izberite iOS Developer. V razdelku Slog podpisovanja kode izberite Ročno. Profila za zagotavljanje še nismo ustvarili, vendar se bomo k njemu zagotovo vrnili malo kasneje.
Za Target AmazingAppUITests storimo enako, vendar v stolpec Product Bundle Identifier vnesemo com.company.amazingappuitests.
2. Nastavitev projekta v programu Apple Developer Program
Pojdite na stran Apple Developer Program, pojdite na razdelek Certificates, Identifiers & Profiles in nato na stolpec App ID-ji elementa Identifiers. Ustvarite nov ID aplikacije z imenom AmazingAppUITests in bundleID com.company.amazingappuitests.
Zdaj imamo možnost, da svoje teste podpišemo z ločenim potrdilom, toda ... Postopek sestavljanja gradnje za testiranje vključuje sestavljanje same aplikacije in sestavljanje izvajalca preizkusov. V skladu s tem se soočamo s težavo podpisovanja dveh ID-jev svežnja z enim profilom zagotavljanja. Na srečo obstaja preprosta in elegantna rešitev – Wildcard App ID. Ponovimo postopek za ustvarjanje novega ID-ja aplikacije, vendar namesto Eksplicitnega ID-ja aplikacije izberemo ID aplikacije z nadomestnim znakom kot na posnetku zaslona.
Na tej točki smo končali z delom z developer.apple.com, vendar okna brskalnika ne bomo minimizirali. Pojdimo na
Pozoren bralec je opazil, da bomo za uporabo tega pripomočka potrebovali zasebno skladišče in račun z dostopom do programa Apple Developer Program in Github. Ustvarimo (če nenadoma tega ni) račun obrazca [e-pošta zaščitena], si omislite močno geslo, ga registrirajte pri developer.apple.com in ga določite za skrbnika projekta. Nato omogočimo računu dostop do repozitorija github vašega podjetja in ustvarimo novo zasebno repozitorij z imenom, kot je AmazingAppMatch.
3. Nastavitev Fastlane in pripomočka za ujemanje
Odprite terminal, pojdite v mapo s projektom in inicializirajte fastlane, kot je navedeno v
$ fastlane init
Pozvani boste, da izberete razpoložljive konfiguracije uporabe. Izberite četrto možnost - ročna nastavitev projekta.
Projekt ima nov imenik fastlane, ki vsebuje dve datoteki - Appfile in Fastfile. Na kratko, storitvene podatke shranjujemo v Appfile in pišemo opravila v Fastfile, ki se v terminologiji Fastlane imenujejo pasovi. Priporočam branje uradne dokumentacije:
Odprite Appfile v svojem najljubšem urejevalniku besedil in ga prinesite na naslednji obrazec:
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
Vrnemo se na terminal in v skladu z uradnim priročnikom začnemo konfigurirati tekmo.
$ fastlane match init
$ fastlane match development
Nato vnesite zahtevane podatke - repozitorij, račun, geslo itd.
Pomembno: Ko prvič zaženete pripomoček za ujemanje, boste morali vnesti geslo za dešifriranje repozitorija. Zelo pomembno je, da shranite to geslo; potrebovali ga bomo pri nastavitvi strežnika CI!
V mapi Fastlane se je pojavila nova datoteka - Matchfile. Odprite ga v svojem najljubšem urejevalniku besedila in ga prikažite takole:
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
Točno tako ga izpolnimo, če želimo v prihodnosti uporabiti ujemanje za podpisovanje gradenj za prikaz v Crashlytics in/ali AppStore, torej za podpis ID-ja svežnja vaše aplikacije.
Toda, kot se spomnimo, smo ustvarili poseben nadomestni ID za podpis testne gradnje. Zato odprite Fastfile in vnesite nov pas:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
)
end
Shranite in vstopite v terminal
fastlane testing_build_for_firebase
in vidimo, kako je fastlane ustvaril novo potrdilo in ga dal v repozitorij. Super!
Odprite XCode. Zdaj imamo potreben profil zagotavljanja obrazca Match Development com.company.*, ki mora biti naveden v razdelku Profil zagotavljanja za cilje AmazingApp in AmazingAppUITests.
Ostaja še dodati pas za sestavljanje testov. Pojdimo na
Kopirajmo in prilepimo izvirni primer, tako da bo naš lane testing_build_for_firebase na koncu videti takole:
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
Za popolne informacije o nastavitvi fastlane v CircleCI priporočam branje uradne dokumentacije
Ne pozabite dodati nove naloge v naš 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. Kaj pa naša preskusna naprava? Nastavitev Firebase.
Pojdimo k temu, za kaj je bil članek napisan.
Morda vaša aplikacija uporablja Firebase v brezplačnem načrtu ali pa sploh ne. Absolutno ni nobene bistvene razlike, saj lahko za potrebe testiranja ustvarimo ločen projekt z letom brezplačne uporabe (kul, kajne?)
Prijavite se v svoj infrastrukturni račun (ali kateri koli drug, ni pomembno) in pojdite na
Pomembno: V prejšnjem koraku v datoteki Fastfile v pasu firebase_test_lab_ios_xctest se mora parameter gcp_project ujemati z imenom projekta.
Privzete nastavitve nam kar ustrezajo.
Ne zaprite zavihka, registrirajte se pod istim računom v
Google daje 300 dolarjev za leto dni, kar je v okviru izvajanja samodejnih testov enako letu brezplačne uporabe storitve. Vnesemo vaše podatke o plačilu, počakamo na poskusno bremenitev v višini 1 USD in prejmemo 300 USD na vaš račun. Po enem letu bo projekt samodejno prenesen na brezplačen tarifni načrt, tako da ni treba skrbeti za morebitno izgubo denarja.
Vrnimo se na zavihek s projektom Firebase in ga prenesemo v tarifni načrt Blaze - zdaj imamo nekaj plačati, če je limit presežen.
V vmesniku gcloud izberite naš projekt Firebase, izberite postavko glavnega menija »Imenik« in dodajte Cloud Testing API in Cloud Tools Result API.
Nato pojdite na točko menija »IAM in administracija« -> Računi storitev -> Ustvari račun storitve. Podeljujemo pravice za urejanje projekta.
Ustvarite ključ API v formatu JSON
Preneseni JSON bomo potrebovali nekoliko pozneje, vendar bomo za zdaj menili, da je nastavitev Test Lab dokončana.
5. Nastavitev CircleCI
Postavlja se razumno vprašanje - kaj storiti z gesli? Mehanizem okoljskih spremenljivk našega gradbenega stroja nam bo pomagal pri varnem shranjevanju naših gesel in drugih občutljivih podatkov. V nastavitvah projekta CircleCI izberite Spremenljivke okolja
In nastavite naslednje spremenljivke:
- ključ: GOOGLE_APPLICATION_CREDENTIALS
vrednost: vsebina datoteke json ključa računa storitve gcloud - ključ: MATCH_PASSWORD
vrednost: geslo za dešifriranje repozitorija github s certifikati - ključ: FASTLANE_PASSWORD
vrednost: geslo računa za infrastrukturo Apple Developer Portal
Spremembe shranimo, ustvarimo PR in ga pošljemo našemu vodji ekipe v pregled.
Rezultati
Kot rezultat teh preprostih manipulacij smo dobili dobro, stabilno delovno stojalo z možnostjo snemanja videa na zaslonu naprave v času testiranja. V testnem primeru sem navedel model naprave iPhone X, farma pa ponuja bogato izbiro iz kombinacije različnih modelov in različic iOS.
Drugi del bo posvečen nastavitvi Firebase Test Lab po korakih za projekt Android.
Vir: www.habr.com