
Minu nimi on Dmitri, töötan testijana ettevĂ”ttes . Alles hiljuti lĂ”petasin ma tutvumise suhteliselt uue funktsiooniga â nimelt, iOS-rakenduste instrumentaalsete testide lĂ€biviimine natiivse testimisraamistiku XCUITest abil.
Enne seda proovisin Firebase Test Labi Androidi jaoks ja mulle meeldis see vÀga, nii et otsustasin proovida iOS projekti testimisstruktuuri sarnastele radadele seada. Olin sunnitud palju Google'isse minema ja mitte kÔik ei Ônnestunud esimesel katsel, seetÔttu otsustasin kirjutada artikli-tutvustuse neile, kellel see veel ees.
Nii et kui teil on iOS projektis UI testid, saate juba tÀna proovida neid kÀivitada reaalsetel seadmetel, mille on lahkelt pakkunud Heategevuskorporatsioon. Huvi korral - tulge edasi.
Otsustasin jutustamise aluseks vĂ”tta mĂ”ned algandmed - privaatne hoidla GitHubis ja CircleCI ehitussĂŒsteem. Rakenduse nimi on AmazingApp, bundleID â com.company.amazingapp. Too andmed vĂ€lja kohe, et vĂ€hendada hilisemaid segadusi.
Kui te olete oma projektis teatud lahendusi erinevalt rakendanud, jagage kogemusi kommentaarides.
1. Testid ise
Loome projekti uue haru UI testide jaoks:
$ git checkout develop
$ git pull
$ git checkout -b âfeature/add-ui-testsâ
Avame projekti XCode'is ja loome uue EesmÀrgi (Target) UI testide jaoks [XCode -> File -> New -> Target -> iOS Testing Bundle], anname sellele arusaadava nime AmazingAppUITests.

Liigume loodud EesmĂ€rgi Build Phase'i sektsiooni ja kontrollime, kas olemas on Target Dependencies â AmazingApp, Compile Sources â AmazingAppUITests.swift.
Hea praktika on erinevate kogumiste eraldamine eraldi Skeemidesse (Schemes). Loome skeemi meie UI testide jaoks [XCode -> Product -> Scheme -> New Scheme] ja anname sellele sama nime: AmazingAppUITests.
Loodud skeemi kogumine peaks sisaldama pĂ”hiraamatulu Targetit â AmazingApp ja Targetit UI testide â AmazingAppUITests â vt. ekraanipilt.

Edasi, loome UI testide jaoks uue kogumise konfiguratsiooni. XCode'is klĂ”psame projekti failil, liigume sektsiooni Info. KlĂ”psame â+â ja loome uue konfiguratsiooni, nĂ€iteks XCtest. See tuleb meil hiljem kasuks, et vĂ€ltida keerulisi olukordi, kui jĂ”uame koodiallkirjastamiseni.

Teie projektis on vĂ€hemalt kolm Targetit: pĂ”hiraamat, ĂŒhiku testid (need on ju olemas, eks?) ja meie loodud Target UI testide jaoks.
Sisenege Target AmazingApp, vahekaart Build Settings, jaotises Code Signing Identity. XCtest konfiguratsiooni jaoks valige iOS Developer. Jaotises Code Signing Style valige Manual. Provisioning profile'i me veel ei ole genereerinud, kuid natuke hiljem tagasime sellele kindlasti.
Target AmazingAppUITests jaoks teeme sama, kuid toote paketitunnuse vÀljale kirjutame com.company.amazingappuitests.
2. Projekti seadistamine Apple Developer Program'is
Siseneme Apple Developer Program'i lehele, liigume jaotisse Certificates, Identifiers & Profiles ja seejÀrel punktis Identifiers vÀljale App IDs. Loome uue App ID nimega AmazingAppUITests ja bundleID-ga com.company.amazingappuitests.

NĂŒĂŒd on meil vĂ”imalus allkirjastada meie testid eraldi sertifikaadiga, kuid... Testimise jaoks mĂ”eldud build-protsess eeldab rakenduse enda ja testide kĂ€ivitaja build'i loomist. Seega seisame silmitsi probleemiga allkirjastada kahte bundle ID-d ĂŒhe provisioning profile'iga. Ănneks on olemas lihtne ja elegantne lahendus â Wildcard App ID. Kordame uue App ID loomise protsessi, kuid Explicit App ID asemel valime Wildcard App ID nagu ekraanipildil.

Selle etapi jooksul on töö developer.apple.com-is lÔpetatud, kuid sulgege brauseri aken me ei kavatse. Liigume ja loeme Match utiliidist alates lÔpuni.
Hoolsad lugejad on mÀrganud, et selle utiliidi kasutamiseks on vaja privaatset repot ning kontot, mis omab juurdepÀÀsu nii Apple Developer Program'ile kui ka Github'ile. Loome (kui seda veel ei ole) konto vormis InfrastructureAccount@your.company.domain, mÔtleme vÀlja tugeva parooli, registreerime selle developer.apple.com-is ning mÀÀrame projekti halduriks. SeejÀrel anname kontole juurdepÀÀsu teie ettevÔtte github repole ja loome uue privaatse repoga nimega AmazingAppMatch.
3. Fastlane'i ja match utiliidi seadistamine
Avame terminali, liikume projekti kausta ja initsialiseerime fastlane'i nagu on kirjeldatud . PÀrast kÀsu sisestamist
$ fastlane initpakutakse valida saadavalolevaid kasutuskonfiguratsioone. Valime neljanda punkti â projekti kĂ€sitsi seadistamine.

Projektis on tekkinud uus kaust fastlane, milles asuvad kaks faili â Appfile ja Fastfile. LĂŒhidalt öeldes â Appfile'is hoiame teenuseandmeid ja Fastfile'is kirjutame ĂŒlesandeid, Fastlane'i terminoloogias lanes. Soovitan lugeda ametlikku dokumentatsiooni: , .
Avame Appfile oma lemmikteksti redigeerijas ja viime selle jÀrgmisse vormingusse:
app_identifier "com.company.amazingapp" # Bundli ID
apple_dev_portal_id "infrastructureaccount@your.company.domain" # Loodud infrastruktuuri konto, millel on Ôigus redigeerida iOS projekti Apple Developer Program'is.
team_id "LSDY3IFJAY9" # Teie arendaja portaali meeskonna ID
Tagasi terminali ja hakkame ametliku juhendi jÀrgi seadistama match.
$ fastlane match init
$ fastlane match development
Sisestame kĂŒsitud andmed â repositoorium, konto, parool jne.
Oluline: esmakordsel kĂ€ivitamisel kĂŒsib utiliit match parooli repositooriumi dekrĂŒpteerimiseks. On vĂ€ga oluline see parool salvestada, see on vajalik CI serveri seadistamisetapis!
Fastlane kaustas on tekkinud uus fail â Matchfile. Avame selle oma lemmik tekstiredaktoris ja viime selle jĂ€rgmisesse vormi:
git_url("https://github.com/YourCompany/AmazingAppMatch") # Loodud privaatne repositoorium, et salvestada sertifikaate ja profiile.
type("development") # Vaikimisi tĂŒĂŒp, vĂ”ib olla: appstore, adhoc, enterprise vĂ”i development
app_identifier("com.company.amazingapp")
username("infrastructureaccount@your.company.domain") # Teie infrastruktuuri konto Apple Developer Portaali kasutajanimi
TÀidame selle just nii, kui soovime hiljem kasutada match'i rakenduste allkirjastamiseks Crashlytics'isse ja/vÔi AppStore'i, st teie rakenduse bundli ID allkirjastamiseks.
Kuid, nagu me mÀletame, lÔime testversiooni allkirjastamiseks spetsiaalse Wildcard ID. Seega avame Fastfile'i ja kirjutame uue lane'i:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # loome eraldi haru development sertifikaadi jaoks testversiooni allkirjastamiseks.
)
end
Salvestame, sisestame terminali
fastlane testing_build_for_firebaseja nÀeme, kuidas fastlane lÔi uue sertifikaadi ja salvestas selle repositooriumisse. SuurepÀrane!
Avame XCode'i. NĂŒĂŒd on meil vajalik provisions profiil Match Development com.company.*, mida tuleb mÀÀrata AmazingApp ja AmazingAppUITests sihtkohtades Provisions profiili sektsioonis.

JÀÀb veel kirjutada lane testide koostamiseks. Liigume fastlane'i pistikprogrammi projekti, mis lihtsustab eksporti seadistamist Firebase Test Lab'isse ja jÀrgime instruktsioonide.
Kopeerime algses nÀites, et meie lane testing_build_for_firebase vÀlja nÀeks selline:
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
Kogu teabe saamiseks fastlane'i seadistamise kohta CircleCI-s soovitan tutvuda ametliku dokumentatsiooniga. .
Ărge unustage tĂ€iendada meie config.yml uut ĂŒlesande:
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 # uuendame sÔltuvusi
- run:
name: install gcloud-sdk # mac masin vajab gcloudi installimist
command: |
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" /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 # kÀivitame lane'i ehitamise ja saatmise firebase'i
4. Aga mis meie testimisstandiga? Seadistame Firebase'i.
Asume tegelikult selle juurde, miks artikkel kirjutati.
VĂ”imalik, et teie rakendus kasutab Firebase'i tasuta plaanil, vĂ”i vĂ”ib-olla ei kasuta see ĂŒldse. PĂ”himĂ”tteliselt ei ole seal suurt vahet, sest testimise vajadustele saame luua eraldi projekti aasta tasuta kasutamiseks (Ă€ge, eks? )
Logime sisse oma infrastruktuuri kontole (vÔi mÔnele muule, pole vahet) ja suundume . Loome uue projekti nimega AmazingAppUITests.
Oluline: Eelmises sammus Fastfile'is lane firebase_test_lab_ios_xctest parameeter gcp_project peab vastama projekti nimele.

Vaikeseaded sobivad meile ideaalselt.
Ărge sulgege vahekaart, samade kontoandmetega registreeruge â see on hĂ€davajalik, kuna suhtleme Firebase'iga gcloudi konsooli liidese kaudu.
Google kingib 300$ aastas, mis on autotehnika testimise kontekstis vÔrreldav aasta tasuta teenuse kasutamisega. Sisestame makseandmed, ootame 1$ testimist ja saame kontole 300$. Aasta möödudes kantakse projekt automaatselt tasuta plaanile, seega ei pea raha kaotamise pÀrast muretsema.
Naaseme Firebase projekti vahelehele ja vahetame selle Blaze plaani peale â nĂŒĂŒd on meil, millega tasuda, juhul kui piirangud ĂŒletatakse.
gcloud liideses valime oma Firebase projekti, menĂŒĂŒs valime punkti "Kataloog" ja lisame Cloud Testing API ning Cloud Tools Result API.

SeejĂ€rel liigume menĂŒĂŒsse "IAM ja haldamine" -> Teenusekontod -> Loo teenusekonto. Anname Ă”igused projekti redigeerimiseks.

Loome API vÔtme JSON formaadis

Laaditud JSON-i vajame hiljem, kuid hetkel loeme Test Labi seadistuse lÔpetatuks.
5. CircleCI seadistamine
KĂŒsimus tekib â mis teha paroolidega? Meie paroolide ja teiste tundlike andmete usaldusvÀÀrseks salvestamiseks aitab ehitusmasina keskkonnamuutujad. CircleCI projekti seadetes valime Keskkonnamuutujad.

Ja loome jÀrgmised muutujad:
- key: GOOGLE_APPLICATION_CREDENTIALS
value: gcloud teenusekonto vÔtme JSON faili sisu - key: MATCH_PASSWORD
value: parool githubi sertifikaatide hoidmise deĆĄifreerimiseks - key: FASTLANE_PASSWORD
value: Apple Developer Portali infrastruktuuri konto parool
Salvestame muudatused, loome PR ja saadame review'le oma tiimijuhile.
Summary
Tulemuseks on see, et nende lihtsate toimingute kaudu saime head, stabiilselt töötavat seadet, millega on vÔimalik ekraanil olevat videovÔtet salvestada testimise ajal. TestnÀites mÀÀrasin seadme mudeliks iPhone X, kuid farm pakub rikkalikku valikut erinevate mudelite ja iOS versioonide kombinatsioone.
Teine osa keskendub samm-sammult Firebase Test Labi seadistamisele Android projekti jaoks.
Allikas: habr.com
