Minu nimi on Dmitri, töötan ettevõttes testijana
Enne seda olin juba proovinud Firebase Test Lab for Android ja kõik meeldis väga, nii et otsustasin proovida projekti iOS-i testimise infrastruktuuri samale alusele panna. Pidin palju guugeldama ja kõik ei õnnestunud esimesel korral, seega otsustasin kirjutada õpetusartikli neile, kes ikka veel hädas on.
Seega, kui teil on iOS-i projektis kasutajaliidese testid, võite juba täna proovida neid reaalsetes seadmetes käivitada, mida pakub Good Corporation. Huvilised tere tulemast kassi.
Loos otsustasin tugineda mõningatele algandmetele – GitHubi privaatsele hoidlale ja CircleCI ehitussüsteemile. Rakenduse nimi on AmazingApp, bundleID on com.company.amazingapp. Esitan need andmed kohe, et vähendada hilisemat segadust.
Kui rakendasite oma projektis teatud lahendusi teisiti, jagage oma kogemusi kommentaarides.
1. Testid ise
Looge kasutajaliidese testide jaoks uus projektiharu:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
Avame projekti XCode'is ja loome kasutajaliidese testidega uue sihtmärgi [XCode -> File -> New -> Target -> iOS Testing Bundle], andes sellele iseenesestmõistetava nime AmazingAppUITests.
Minge loodud sihtmärgi jaotisesse Ehitamisetapid ja kontrollige jaotises Compile Sources - AmazingAppUITests.swift sihtsõltuvuste olemasolu – AmazingApp.
Hea tava on eraldada erinevad ehitusvalikud eraldi skeemideks. Loome oma kasutajaliidese testide jaoks skeemi [XCode -> Product -> Scheme -> New Scheme] ja anname sellele sama nime: AmazingAppUITests.
Loodud skeemi konstruktsioon peab sisaldama põhirakenduse sihtmärki – AmazingApp ja Target UI testid – AmazingAppUITests – vaata ekraanipilti
Järgmisena loome kasutajaliidese testide jaoks uue ehituskonfiguratsiooni. Klõpsake XCode'is projekti failil ja minge jaotisse Teave. Klõpsake "+" ja looge uus konfiguratsioon, näiteks XCtest. Meil on seda tulevikus vaja, et koodi allkirjastamisel parmupilliga tantsimist vältida.
Teie projektis on vähemalt kolm sihtmärki: põhirakendus, ühikutestid (need on ju olemas, eks?) ja meie loodud Target UI testid.
Minge jaotisse Target AmazingApp, vahekaardi Järjestuse sätted, jaotise Koodi allkirjastamise identiteet. XCtesti konfiguratsiooni jaoks valige iOS Developer. Jaotises Koodi allkirjastamise stiil valige Käsitsi. Me ei ole veel loonud ettevalmistusprofiili, kuid tuleme selle juurde kindlasti veidi hiljem tagasi.
Target AmazingAppUITesti puhul teeme sama, kuid veergu Product Bundle Identifier sisestame com.company.amazingappuitests.
2. Projekti seadistamine Apple'i arendajaprogrammis
Minge Apple'i arendajaprogrammi lehele, minge jaotisesse Sertifikaadid, identifikaatorid ja profiilid ning seejärel üksuse Identifikaatorid veergu Rakenduse ID-d. Looge uus rakenduse ID nimega AmazingAppUITests ja bundleID com.company.amazingappuitests.
Nüüd on meil võimalus allkirjastada oma testid eraldi sertifikaadiga, kuid... Testimiseks buildi kokkupanemise protseduur hõlmab rakenduse enda kokkupanemist ja testijooksja kokkupanemist. Sellest tulenevalt seisame silmitsi kahe komplekti ID allkirjastamise probleemiga ühe varustamisprofiiliga. Õnneks on olemas lihtne ja elegantne lahendus – Wildcard App ID. Kordame uue rakenduse ID loomise protseduuri, kuid rakenduse selgesõnalise ID asemel valige metapildil oleva rakenduse ID asemel metamärk.
Praegu oleme saidiga developer.apple.com töö lõpetanud, kuid me ei minimeeri brauseriakent. Lähme juurde
Tähelepanelik lugeja märkas, et selle utiliidi kasutamiseks vajame privaatset hoidlat ja kontot, millel on juurdepääs nii Apple'i arendajaprogrammile kui ka Githubile. Loome (kui äkki sellist asja pole) vormi konto [meiliga kaitstud], leidke tugev parool, registreerige see saidil developer.apple.com ja määrake see projekti administraatoriks. Järgmisena anname kontole juurdepääsu teie ettevõtte githubi hoidlale ja loome uue privaatse hoidla nimega AmazingAppMatch.
3. Fastlane'i ja mänguutiliidi seadistamine
Avage terminal, minge projektiga kausta ja lähtestage fastlane, nagu näidatud
$ fastlane init
Teil palutakse valida saadaolevad kasutuskonfiguratsioonid. Valige neljas valik - projekti käsitsi seadistamine.
Projektil on uus kataloog fastlane, mis sisaldab kahte faili – Appfile ja Fastfile. Lühidalt öeldes salvestame teenuseandmed Appfile'i ja kirjutame töid Fastfile'i, mida Fastlane'i terminoloogias nimetatakse radadeks. Soovitan lugeda ametlikku dokumentatsiooni:
Avage oma lemmiktekstiredaktoris Appfile ja viige see järgmisele vormile:
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
Naaseme terminali ja vastavalt ametlikule juhendile hakkame vastet konfigureerima.
$ fastlane match init
$ fastlane match development
Järgmisena sisestage nõutud andmed - hoidla, konto, parool jne.
NB! Match-utiliidi esmakordsel käivitamisel palutakse teil hoidla dekrüpteerimiseks sisestada parool. See parool on väga oluline, me vajame seda CI-serveri seadistamisel!
Fastlane'i kausta on ilmunud uus fail - Matchfile. Avage see oma lemmiktekstiredaktoris ja kuvage see järgmiselt:
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
Täidame selle täpselt sel viisil, kui tahame tulevikus kasutada vastet Crashlyticsis ja/või AppStore'is kuvamiseks mõeldud järge allkirjastamiseks, st teie rakenduse komplekti ID allkirjastamiseks.
Kuid nagu mäletame, lõime testehituse allkirjastamiseks spetsiaalse metamärgi ID. Seetõttu avage Fastfile ja sisestage uus rada:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
)
end
Salvestage ja sisestage terminali
fastlane testing_build_for_firebase
ja näeme, kuidas fastlane lõi uue sertifikaadi ja pani selle hoidlasse. Suurepärane!
Avage XCode. Nüüd on meil vormil Match Development com.company.* vajalik ettevalmistusprofiil, mis tuleb sihtmärkide AmazingApp ja AmazingAppUITests jaoks määrata jaotises Provisitsiooniprofiil.
Jääb üle lisada sõidurada monteerimiskatsete jaoks. Lähme juurde
Kopeerime ja kleepime algsest näitest, nii et meie radade testimine_build_for_firebase näeks välja järgmine:
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
Täieliku teabe saamiseks CircleCI-s fastlane seadistamise kohta soovitan lugeda ametlikku dokumentatsiooni
Ärge unustage lisada failile config.yml uut ülesannet:
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. Kuidas on lood meie katsestendiga? Firebase'i seadistamine.
Läheme selle juurde, milleks artikkel kirjutati.
Võib-olla kasutab teie rakendus Firebase'i tasuta paketi alusel või üldse mitte. Põhimõttelist vahet pole absoluutselt, sest testimisvajaduste jaoks saame luua eraldi projekti aasta tasuta kasutusega (lahe, eks?)
Logime sisse oma infrastruktuuri kontole (või mõnele muule, see pole oluline) ja läheme aadressile
NB! Fastfile in lane firebase_test_lab_ios_xctest eelmises etapis peaks parameeter gcp_project ühtima projekti nimega.
Vaikesätted sobivad meile päris hästi.
Ärge sulgege vahekaarti, registreeruge sama konto all
Google annab aastaks 300 dollarit, mis automaattestide tegemise kontekstis võrdub aasta tasuta teenuse kasutamisega. Sisestame teie makseteabe, ootame 1 dollari suurust testdeebetit ja saame teie kontole 300 dollarit. Aasta pärast läheb projekt automaatselt üle tasuta tariifiplaani, seega pole vaja karta võimaliku rahakao pärast.
Pöördume Firebase'i projektiga vahekaardile tagasi ja viime selle üle Blaze'i tariifiplaani - nüüd on meil midagi maksta, kui limiit ületatakse.
Valige gcloudi liideses meie Firebase'i projekt, valige peamenüüst "Kataloog" ja lisage Cloud Testing API ja Cloud Tools Result API.
Seejärel minge menüüsse "IAM ja haldus" -> Teenusekontod -> Loo teenusekonto. Anname õigused projekti toimetamiseks.
Looge API-võti JSON-vormingus
Allalaaditud JSON-i vajame veidi hiljem, kuid praegu loeme testlabori seadistamise lõpetatuks.
5. CircleCI seadistamine
Tekib mõistlik küsimus – mida teha paroolidega? Meie ehitusmasina keskkonnamuutujate mehhanism aitab meil turvaliselt salvestada paroole ja muid tundlikke andmeid. CircleCI projekti sätetes valige Keskkonnamuutujad
Ja seadistage järgmised muutujad:
- võti: GOOGLE_APPLICATION_CREDENTIALS
väärtus: gcloudi teenusekonto võtme json-faili sisu - võti: MATCH_PASSWORD
väärtus: parool Githubi hoidla sertifikaatidega dekrüpteerimiseks - võti: FASTLANE_PASSWORD
väärtus: Apple'i arendajaportaali infrastruktuuri konto parool
Salvestame muudatused, loome suhtekorralduse ja saadame selle ülevaatamiseks meie meeskonna juhile.
Tulemused
Nende lihtsate manipulatsioonide tulemusena saime hea, stabiilse töötava aluse, millel on võimalus testimise ajal seadme ekraanile videot salvestada. Testnäites täpsustasin iPhone X seadme mudelit, kuid farm pakub rikkalikku valikut erinevate mudelite ja iOS-i versioonide kombinatsioonist.
Teine osa on pühendatud Firebase'i testlabori samm-sammult seadistamisele Androidi projekti jaoks.
Allikas: www.habr.com