Mani sauc Dmitrijs, strādāju uzņēmumā par testeri
Pirms tam es jau biju izmēģinājis Firebase Test Lab for Android, un viss ļoti patika, tāpēc es nolēmu mēģināt nolikt vienādos pamatos projekta iOS testa infrastruktūru. Man nācās daudz googlēt, un ne viss izdevās pirmajā reizē, tāpēc nolēmu uzrakstīt pamācības rakstu tiem, kas joprojām cīnās.
Tātad, ja jums ir iOS projekta lietotāja saskarnes testi, jau šodien varat mēģināt tos palaist reālās ierīcēs, ko laipni nodrošina Good Corporation. Interesentus laipni lūdzam kat.
Stāstā es nolēmu balstīties uz dažiem sākotnējiem datiem - privātu repozitoriju GitHub un CircleCI veidošanas sistēmu. Lietojumprogrammas nosaukums ir AmazingApp, bundleID ir com.company.amazingapp. Es nekavējoties sniedzu šos datus, lai mazinātu turpmākās neskaidrības.
Ja kādus risinājumus savā projektā ieviesāt savādāk, dalieties pieredzē komentāros.
1. Paši testi
Izveidojiet jaunu projekta filiāli UI testiem:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
Atvērsim projektu programmā XCode un izveidosim jaunu Target ar UI testiem [XCode -> File -> New -> Target -> iOS Testing Bundle], piešķirot tam pašsaprotamu nosaukumu AmazingAppUITests.
Pārejiet uz izveidotā mērķa sadaļu Build Phases un pārbaudiet, vai nav mērķa atkarību — AmazingApp, sadaļā Compile Sources — AmazingAppUITests.swift.
Laba prakse ir sadalīt dažādas veidošanas iespējas atsevišķās shēmās. Mēs izveidojam shēmu mūsu UI testiem [XCode -> Product -> Scheme -> New Scheme] un piešķiram tai tādu pašu nosaukumu: AmazingAppUITests.
Izveidotās shēmas veidojumā jāiekļauj galvenās lietojumprogrammas mērķis - AmazingApp un Target UI testi - AmazingAppUITests - skatiet ekrānuzņēmumu
Tālāk mēs izveidojam jaunu būvējuma konfigurāciju lietotāja saskarnes testiem. Programmā XCode noklikšķiniet uz projekta faila un dodieties uz sadaļu Informācija. Noklikšķiniet uz “+” un izveidojiet jaunu konfigurāciju, piemēram, XCtest. Mums tas būs vajadzīgs nākotnē, lai izvairītos no dejošanas ar tamburīnu, kad runa ir par koda parakstīšanu.
Jūsu projektā ir vismaz trīs mērķi: galvenā lietojumprogramma, vienību testi (galu galā tie pastāv, vai ne?) un mūsu izveidotie Target UI testi.
Dodieties uz Target AmazingApp, cilni Build Settings, sadaļu Koda parakstīšanas identitāte. XCtest konfigurācijai atlasiet iOS izstrādātāju. Sadaļā Koda parakstīšanas stils atlasiet Manuāli. Mēs vēl neesam izveidojuši nodrošinājuma profilu, taču mēs noteikti atgriezīsimies pie tā nedaudz vēlāk.
Ar Target AmazingAppUITests mēs darām to pašu, bet slejā Product Bundle Identifier ievadām com.company.amazingappuitests.
2. Projekta iestatīšana Apple izstrādātāju programmā
Dodieties uz Apple izstrādātāju programmas lapu, dodieties uz sadaļu Sertifikāti, identifikatori un profili un pēc tam uz vienuma Identifiers sleju App ID. Izveidojiet jaunu lietotnes ID ar nosaukumu AmazingAppUITests un bundleID com.company.amazingappuitests.
Tagad mums ir iespēja parakstīt savus testus ar atsevišķu sertifikātu, bet... Būvējuma salikšanas procedūra testēšanai ietver pašas lietojumprogrammas montāžu un testa skrējēja montāžu. Attiecīgi mēs saskaramies ar divu komplekta ID parakstīšanas problēmu ar vienu nodrošināšanas profilu. Par laimi, ir vienkāršs un elegants risinājums - Wildcard App ID. Mēs atkārtojam jauna lietotnes ID izveides procedūru, taču nepārprotama lietotnes ID vietā atlasiet aizstājējzīmi App ID, kā parādīts ekrānuzņēmumā.
Šobrīd mēs esam pabeiguši darbu ar developer.apple.com, taču mēs nesamazināsim pārlūkprogrammas logu. Ejam uz
Kāds uzmanīgs lasītājs pamanīja, ka, lai izmantotu šo utilītu, mums būs nepieciešama privāta repozitorija un konts ar piekļuvi gan Apple izstrādātāju programmai, gan Github. Mēs izveidojam (ja pēkšņi tāda nav) veidlapas kontu [e-pasts aizsargāts], izstrādājiet spēcīgu paroli, reģistrējiet to vietnē developer.apple.com un ieceliet to par projekta administratoru. Pēc tam mēs piešķiram kontam piekļuvi jūsu uzņēmuma github repozitorijam un izveidojam jaunu privātu repozitoriju ar tādu nosaukumu kā AmazingAppMatch.
3. Fastlane un spēles utilīta iestatīšana
Atveriet termināli, dodieties uz mapi ar projektu un inicializējiet fastlane, kā norādīts
$ fastlane init
Jums tiks piedāvāts izvēlēties pieejamās lietošanas konfigurācijas. Izvēlieties ceturto opciju - manuāla projekta iestatīšana.
Projektam ir jauns direktorijs fastlane, kurā ir divi faili – Appfile un Fastfile. Īsumā mēs glabājam pakalpojumu datus pakalpojumā Appfile un ierakstām darbus Fastfile, ko Fastlane terminoloģijā sauc par joslām. Iesaku izlasīt oficiālo dokumentāciju:
Atveriet Appfile savā iecienītākajā teksta redaktorā un atveriet to šādā formā:
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
Mēs atgriežamies terminālī un saskaņā ar oficiālo rokasgrāmatu sākam konfigurēt atbilstību.
$ fastlane match init
$ fastlane match development
Tālāk ievadiet pieprasītos datus - repozitoriju, kontu, paroli utt.
Svarīgi: Pirmoreiz palaižot atbilstības utilītu, jums tiks lūgts ievadīt paroli, lai atšifrētu repozitoriju. Ir ļoti svarīgi saglabāt šo paroli, tā mums būs nepieciešama, uzstādot CI serveri!
Fastlane mapē ir parādījies jauns fails - Matchfile. Atveriet to savā iecienītākajā teksta redaktorā un parādiet to šādi:
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
Mēs to aizpildām tieši šādā veidā, ja turpmāk vēlamies izmantot match, lai parakstītu būvējumus parādīšanai pakalpojumā Crashlytics un/vai AppStore, tas ir, lai parakstītu jūsu lietojumprogrammas komplekta ID.
Bet, kā mēs atceramies, mēs izveidojām īpašu aizstājējzīmes ID, lai parakstītu testa būvējumu. Tāpēc atveriet Fastfile un ievadiet jaunu joslu:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
)
end
Saglabājiet un ievadiet terminālī
fastlane testing_build_for_firebase
un mēs redzam, kā fastlane izveidoja jaunu sertifikātu un ievietoja to repozitorijā. Lieliski!
Atveriet XCode. Tagad mums ir nepieciešamais veidlapas Match Development com.company.* nodrošināšanas profils, kas ir jānorāda AmazingApp un AmazingAppUITests mērķu sadaļā Nodrošināšanas profils.
Atliek pievienot joslu montāžas testiem. Ejam uz
Kopēsim un ielīmēsim no sākotnējā piemēra, lai mūsu joslu testing_build_for_firebase izskatītos šādi:
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
Lai iegūtu pilnīgu informāciju par fastlane iestatīšanu pakalpojumā CircleCI, iesaku izlasīt oficiālo dokumentāciju
Neaizmirstiet pievienot jaunu uzdevumu mūsu 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. Kā ir ar mūsu testēšanas stendu? Firebase iestatīšana.
Pievērsīsimies tam, kam raksts tika rakstīts.
Iespējams, jūsu lietotnē Firebase tiek izmantots bezmaksas plānā vai arī netiek izmantots vispār. Absolūti nekādas principiālas atšķirības nav, jo testēšanas vajadzībām varam izveidot atsevišķu projektu ar bezmaksas lietošanas gadu (forši, vai ne?)
Mēs piesakāmies savā infrastruktūras kontā (vai jebkurā citā, tas nav svarīgi) un dodamies uz
Svarīgi: Iepriekšējā darbībā Fastfile joslā firebase_test_lab_ios_xctest parametram gcp_project ir jāatbilst projekta nosaukumam.
Noklusējuma iestatījumi mums ir diezgan piemēroti.
Neaizveriet cilni, reģistrējieties tajā pašā kontā
Google piešķir 300 USD par gadu, kas autotestu veikšanas kontekstā ir līdzvērtīgs gada bezmaksas pakalpojuma izmantošanai. Mēs ievadām jūsu maksājuma informāciju, sagaidām pārbaudes debetu 1 ASV dolāra apmērā un saņemam 300 ASV dolārus jūsu kontā. Pēc gada projekts automātiski tiks pārcelts uz bezmaksas tarifu plānu, tāpēc nav jāuztraucas par iespējamu naudas zaudējumu.
Atgriezīsimies pie cilnes ar Firebase projektu un pārliksim to uz Blaze tarifu plānu – tagad mums ir par ko maksāt, ja limits tiek pārsniegts.
Gcloud interfeisā atlasiet mūsu Firebase projektu, atlasiet galvenās izvēlnes vienumu “Directory” un pievienojiet Cloud Testing API un Cloud Tools Result API.
Pēc tam dodieties uz izvēlnes vienumu “IAM un administrēšana” -> Pakalpojumu konti -> Izveidot pakalpojuma kontu. Mēs piešķiram tiesības rediģēt projektu.
Izveidojiet API atslēgu JSON formātā
Lejupielādētais JSON mums būs nepieciešams nedaudz vēlāk, taču pagaidām mēs uzskatīsim, ka Test Lab iestatīšana ir pabeigta.
5. CircleCI iestatīšana
Rodas pamatots jautājums – ko darīt ar parolēm? Mūsu veidošanas mašīnas vides mainīgais mehānisms palīdzēs mums droši glabāt mūsu paroles un citus sensitīvus datus. CircleCI projekta iestatījumos atlasiet Vides mainīgie
Un iestatiet šādus mainīgos:
- atslēga: GOOGLE_APPLICATION_CREDENTIALS
vērtība: gcloud pakalpojuma konta atslēgas json faila saturs - atslēga: MATCH_PASSWORD
vērtība: parole github repozitorija atšifrēšanai ar sertifikātiem - atslēga: FASTLANE_PASSWORD
vērtība: Apple Developer Portal infrastruktūras konta parole
Mēs saglabājam izmaiņas, izveidojam PR un nosūtām to mūsu komandas vadītājam pārskatīšanai.
Rezultāti
Šo vienkāršo manipulāciju rezultātā mēs saņēmām labu, stabilu darba stendu ar iespēju testēšanas brīdī ierakstīt video ierīces ekrānā. Testa piemērā es norādīju iPhone X ierīces modeli, bet ferma nodrošina bagātīgu izvēli no dažādu modeļu un iOS versiju kombinācijas.
Otrā daļa būs veltīta Firebase testa laboratorijas pakāpeniskai iestatīšanai Android projektam.
Avots: www.habr.com