Mano vardas Dmitrijus, įmonėje dirbu testuotoju
Prieš tai jau buvau išbandęs „Firebase Test Lab for Android“ ir viskas labai patiko, todėl nusprendžiau pabandyti sutalpinti projekto „iOS“ testavimo infrastruktūrą. Teko daug ieškoti Google ir ne viskas pavyko iš pirmo karto, todėl nusprendžiau parašyti mokomąjį straipsnį tiems, kam vis dar sunku.
Taigi, jei turite „iOS“ projekto vartotojo sąsajos testus, jau šiandien galite pabandyti juos paleisti tikruose įrenginiuose, kuriuos maloniai teikia „Good Corporation“. Besidomintiems, kviečiame į katę.
Pasakojime nusprendžiau remtis kai kuriais pradiniais duomenimis – privačia „GitHub“ saugykla ir „CircleCI“ kūrimo sistema. Programos pavadinimas yra AmazingApp, bundleID yra com.company.amazingapp. Šiuos duomenis pateikiu nedelsiant, kad sumažinčiau vėlesnę painiavą.
Jei tam tikrus sprendimus savo projekte įgyvendinote kitaip, pasidalykite patirtimi komentaruose.
1. Patys testai
Sukurkite naują projekto šaką vartotojo sąsajos testams:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
Atidarykime projektą „XCode“ ir sukurkime naują taikinį su vartotojo sąsajos testais [XCode -> File -> New -> Target -> iOS Testing Bundle], suteikdami jam savaime suprantamą pavadinimą AmazingAppUITests.
Eikite į sukurto tikslo skyrių „Kūrimo etapai“ ir patikrinkite, ar nėra tikslinių priklausomybių – „AmazingApp“, kompiliavimo šaltiniuose – AmazingAppUITests.swift.
Gera praktika yra atskirti skirtingas kūrimo parinktis į atskiras schemas. Sukuriame savo vartotojo sąsajos testų schemą [XCode -> Product -> Scheme -> New Scheme] ir suteikiame jai tą patį pavadinimą: AmazingAppUITests.
Sukurtos schemos kūrimas turi apimti pagrindinės programos tikslą – AmazingApp ir Target UI testus – AmazingAppUITests – žr. ekrano kopiją
Tada sukuriame naują vartotojo sąsajos testų kūrimo konfigūraciją. „XCode“ spustelėkite projekto failą ir eikite į informacijos skyrių. Spustelėkite „+“ ir sukurkite naują konfigūraciją, pavyzdžiui, XCtest. Mums to prireiks ateityje, kad nešoktume su tamburinu, kai kalbama apie kodo pasirašymą.
Jūsų projekte yra mažiausiai trys tikslai: pagrindinė programa, vienetų testai (juk jie egzistuoja, tiesa?) ir mūsų sukurti Target UI testai.
Eikite į „Target AmazingApp“, skirtuką „Kūrimo nustatymai“, skyrių „Kodo pasirašymo tapatybė“. Norėdami konfigūruoti XCtest, pasirinkite iOS Developer. Skiltyje Kodo pasirašymo stilius pasirinkite Rankinis. Aprūpinimo profilio dar nesukūrėme, bet prie jo tikrai grįšime šiek tiek vėliau.
„Target AmazingAppUITests“ darome tą patį, bet stulpelyje „Produktų rinkinio identifikatorius“ įrašome com.company.amazingappuitests.
2. Projekto nustatymas Apple Developer programoje
Eikite į Apple Developer Program puslapį, eikite į skiltį Sertifikatai, identifikatoriai ir profiliai, tada į elemento Identifiers stulpelį Programos ID. Sukurkite naują programos ID, pavadintą AmazingAppUITests ir bundleID com.company.amazingappuitests.
Dabar turime galimybę savo testus pasirašyti su atskiru sertifikatu, bet... Konstrukcijos surinkimo testavimui procedūra apima pačios programos surinkimą ir bandomojo bėgiko surinkimą. Atitinkamai, susiduriame su dviejų paketo ID pasirašymo vienu aprūpinimo profiliu problema. Laimei, yra paprastas ir elegantiškas sprendimas – „Wildcard App ID“. Kartojame naujo programos ID kūrimo procedūrą, bet vietoj aiškaus programos ID pasirinkite pakaitos simbolio programos ID, kaip parodyta ekrano kopijoje.
Šiuo metu baigėme darbą su developer.apple.com, bet nesumažinsime naršyklės lango. Eime
Dėmesingas skaitytojas pastebėjo, kad norint naudotis šia programa, mums reikės privačios saugyklos ir paskyros, turinčios prieigą prie „Apple Developer Program“ ir „Github“. Sukuriame (jei staiga tokio dalyko nėra) formos paskyrą [apsaugotas el. paštu], sugalvokite stiprų slaptažodį, užregistruokite jį adresu developer.apple.com ir paskirkite projekto administratoriumi. Tada suteikiame paskyrai prieigą prie jūsų įmonės „github“ saugyklos ir sukuriame naują privačią saugyklą tokiu pavadinimu kaip „AmazingAppMatch“.
3. Fastlane ir rungtynių programos nustatymas
Atidarykite terminalą, eikite į aplanką su projektu ir inicijuokite greitąją juostą, kaip nurodyta
$ fastlane init
Būsite paraginti pasirinkti galimas naudojimo konfigūracijas. Pasirinkite ketvirtą parinktį – rankinis projekto nustatymas.
Projektas turi naują „fastlane“ katalogą, kuriame yra du failai – „Appfile“ ir „Fastfile“. Trumpai tariant, paslaugų duomenis saugome „Appfile“, o užduotis rašome „Fastfile“, vadinamomis juostomis Fastlane terminologijoje. Rekomenduoju perskaityti oficialią dokumentaciją:
Atidarykite „Appfile“ savo mėgstamoje teksto rengyklėje ir perkelkite ją į šią 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
Grįžtame į terminalą ir pagal oficialų vadovą pradedame konfigūruoti atitiktį.
$ fastlane match init
$ fastlane match development
Tada įveskite prašomus duomenis - saugyklą, paskyrą, slaptažodį ir kt.
Svarbu: Kai pirmą kartą paleisite atitikties programą, jūsų bus paprašyta įvesti slaptažodį, kad iššifruotumėte saugyklą. Labai svarbu išsaugoti šį slaptažodį, jo mums prireiks nustatant CI serverį!
Fastlane aplanke atsirado naujas failas – Matchfile. Atidarykite jį savo mėgstamoje teksto rengyklėje ir parodykite taip:
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
Pildome būtent taip, jei ateityje norime naudoti atitiktį, kad pasirašytų kūrimus, kad jie būtų rodomi „Crashlytics“ ir (arba) „AppStore“, ty pasirašyti jūsų programos paketo ID.
Tačiau, kaip prisimename, sukūrėme specialų pakaitos simbolio ID, kad pasirašytume bandomąją versiją. Todėl atidarykite Fastfile ir įveskite naują juostą:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
)
end
Išsaugokite ir įveskite terminalą
fastlane testing_build_for_firebase
ir matome, kaip fastlane sukūrė naują sertifikatą ir įdėjo jį į saugyklą. Puiku!
Atidarykite XCode. Dabar turime būtiną „Match Development com.company.*“ formos aprūpinimo profilį, kuris turi būti nurodytas „AmazingApp“ ir „AmazingAppUITests“ tikslų skyriuje „Provisioning profile“.
Belieka pridėti juostą surinkimo bandymams. Eime
Nukopijuokime ir įklijuokime iš pirminio pavyzdžio, kad mūsų juostos testing_build_for_firebase atrodytų taip:
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
Norėdami gauti išsamios informacijos apie greitosios juostos nustatymą CircleCI, rekomenduoju perskaityti oficialią dokumentaciją
Nepamirškite pridėti naujos užduoties į mūsų 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. O kaip mūsų bandymų stende? „Firebase“ nustatymas.
Pereikime prie to, kam buvo parašytas straipsnis.
Galbūt jūsų programa naudoja „Firebase“ pagal nemokamą planą arba iš viso nenaudoja. Esminio skirtumo visiškai nėra, nes testavimo poreikiams galime sukurti atskirą projektą su nemokamo naudojimo metais (puiku, tiesa?)
Prisijungiame prie savo infrastruktūros paskyros (ar bet kurios kitos, nesvarbu) ir einame į
Svarbu: Ankstesniame veiksme Fastfile juostoje firebase_test_lab_ios_xctest parametras gcp_project turi atitikti projekto pavadinimą.
Numatytieji nustatymai mums tinka gana gerai.
Neuždarykite skirtuko, užsiregistruokite toje pačioje paskyroje
„Google“ metams skiria 300 USD, o tai, atliekant automatinius testus, prilygsta metams nemokamo naudojimosi paslauga. Įvedame jūsų mokėjimo informaciją, laukiame bandomojo 1 USD debeto ir gauname 300 USD į jūsų sąskaitą. Po metų projektas bus automatiškai perkeltas į nemokamą tarifų planą, todėl nereikės nerimauti dėl galimo pinigų praradimo.
Grįžkime prie skirtuko su „Firebase“ projektu ir perkelkime jį į „Blaze“ tarifų planą – dabar turime už ką mokėti, jei limitas bus viršytas.
„gcloud“ sąsajoje pasirinkite mūsų „Firebase“ projektą, pasirinkite pagrindinį meniu elementą „Katalogas“ ir pridėkite „Cloud Testing“ API ir „Cloud Tools Result“ API.
Tada eikite į meniu punktą „IAM ir administravimas“ -> Paslaugų abonementai -> Sukurti paslaugos paskyrą. Suteikiame teisę redaguoti projektą.
Sukurkite API raktą JSON formatu
Atsisiųsto JSON mums prireiks šiek tiek vėliau, tačiau kol kas testavimo laboratorijos sąranką laikysime baigta.
5. CircleCI nustatymas
Kyla pagrįstas klausimas – ką daryti su slaptažodžiais? Mūsų kūrimo mašinos aplinkos kintamasis mechanizmas padės saugiai saugoti slaptažodžius ir kitus slaptus duomenis. „CircleCI“ projekto nustatymuose pasirinkite Aplinkos kintamieji
Ir nustatykite šiuos kintamuosius:
- raktas: GOOGLE_APPLICATION_CREDENTIALS
reikšmė: gcloud paslaugos paskyros rakto json failo turinys - raktas: MATCH_PASSWORD
reikšmė: slaptažodis, skirtas iššifruoti github saugyklą su sertifikatais - raktas: FASTLANE_PASSWORD
reikšmė: Apple Developer Portal infrastruktūros paskyros slaptažodis
Išsaugome pakeitimus, sukuriame PR ir siunčiame jį mūsų komandos vadovui peržiūrėti.
rezultatai
Dėl šių paprastų manipuliacijų gavome gerą, stabilų darbinį stovą su galimybe testavimo metu įrašyti vaizdo įrašą įrenginio ekrane. Bandymo pavyzdyje nurodžiau „iPhone X“ įrenginio modelį, tačiau ūkyje pateikiamas gausus pasirinkimas iš įvairių modelių ir „iOS“ versijų derinio.
Antroji dalis bus skirta nuosekliam „Firebase“ testavimo laboratorijos, skirtos „Android“ projektui, sąrankai.
Šaltinis: www.habr.com