KĂ€ivitame instrumentaalsed testid Firebase Test Lab'is. Osa 1: iOS projekt

KĂ€ivitame instrumentaalsed testid Firebase Test Lab'is. Osa 1: iOS projekt

Minu nimi on Dmitri, töötan testijana ettevĂ”ttes MEL Science. Hiljuti lĂ”petasin suhteliselt uue funktsiooni uurimise, mille kohta Firebase Test Lab — nimelt, iOS rakenduste instrumentaalsest testimisest kasutades natiivset testimisraamistiku XCUITest.

Enne seda olin juba proovinud Firebase Test Lab'i Androidi jaoks ja mulle meeldis see vÀga, seega otsustasin proovida iOS projekti testimisstruktuuri samadele rööbastele seadistada. Pidin palju guugeldama ja mitte kÔik ei Ônnestunud esimesel korral, seetÔttu otsustasin kirjutada Ôpetusartikli neile, kes seisavad selle ees.

Seega, kui teil on UI testid iOS projektis, siis saate juba tĂ€na proovida neid kĂ€ivitada reaalsetel seadmetel, mida lahkelt pakub Heategevuskorporatsioon. Huvi tundnud — olete teretulnud allolevasse osa.

Jutustuses otsustasin lĂ€htuda teatud algandmetest — privaatne reposteetory GitHub'is ja ehitussĂŒsteem CircleCI. Rakenduse nimi on AmazingApp, bundleID — com.company.amazingapp. Toon need andmed kohe vĂ€lja, et vĂ€hendada hilisemaid segadusi.

Kui olete oma projektis teatud lahendusi teisiti rakendanud, jagage oma kogemusi kommentaarides.

1. Testid

Loome uue projekti haru UI testide jaoks:

$ git checkout develop
$ git pull
$ git checkout -b "feature/add-ui-tests"

Avame projekti XCode'is ja loome uue sihtmÀrgi (Target) UI testide jaoks [XCode -> File -> New -> Target -> iOS Testing Bundle], anname sellele kÔlava nime AmazingAppUITests.

KĂ€ivitame instrumentaalsed testid Firebase Test Lab'is. Osa 1: iOS projekt

Mineme loodud sihtmÀrgi Build Phases sektsiooni ja kontrollime, kas Target Dependencies - AmazingApp, Compile Sources - AmazingAppUITests.swift on olemas.

Heaks tavaks on erinevate ehituste variantide eraldamine eraldi skeemidesse (Schemes). Loome skeemi meie UI testide jaoks [XCode -> Product -> Scheme -> New Scheme] ja anname sellele sama nime: AmazingAppUITests.

Loodud skeemi build peab sisaldama pÔhirakenduse Targetit - AmazingApp ja UI testide Targetit - AmazingAppUITests - vt ekraanipilte.

KĂ€ivitame instrumentaalsed testid Firebase Test Lab'is. Osa 1: iOS projekt

SeejÀrel loome UI testide jaoks uue ehituse konfiguratsiooni. XCode'is klÔpsame projekti failil, lÀheme Info sektsiooni. KlÔpsame " + " ja loome uue konfiguratsiooni, nÀiteks XCtest. See on vajalik edaspidi, et vÀltida segadust, kui jÔuame code signing'uni.

KĂ€ivitame instrumentaalsed testid Firebase Test Lab'is. Osa 1: iOS projekt

Teie projektis on vĂ€hemalt kolm Targetit: pĂ”hirakendus, ĂŒksuse testid (need on ju olemas, eks?) ja meie poolt loodud Target UI testide jaoks.

Siseneme Target AmazingApp, vahekaart Build Settings, jaotis Code Signing Identity. Konfiguratsiooni jaoks XCtest valime iOS Developer. Jaotises Code Signing Style valime Manual. Provisioning profile'i me veel ei genereerinud, kuid naaseme sellele hiljem kindlasti.

Target AmazingAppUITests jaoks teeme sama, kuid vÀljale Product Bundle Identifier kirjutame com.company.amazingappuitests.

2. Projekti seadistamine Apple Developer Programis

Siseneme Apple Developer Programi lehele, lÀheme jaotisse Certificates, Identifiers & Profiles ja seejÀrel Identifiers punkti all App IDs. Loome uue App ID nimega AmazingAppUITests ja bundleID com.company.amazingappuitests.

KĂ€ivitame instrumentaalsed testid Firebase Test Lab'is. Osa 1: iOS projekt

NĂŒĂŒd on meil vĂ”imalus allkirjastada meie testid eraldi sertifikaadiga, kuid
 Testimise build'i koostamise protseduur tĂ€hendab rakenduse enda ja testide kĂ€itaja build'i koostamist. SeetĂ”ttu seisame silmitsi kahe bundle ID allkirjastamise probleemiga ĂŒhe provisioning profile'iga. Õnneks on olemas lihtne ja elegantne lahendus — Wildcard App ID. Korrake uue App ID loomise protseduuri, kuid valige Explicit App ID asemel Wildcard App ID nagu ekraanipildil.

KĂ€ivitame instrumentaalsed testid Firebase Test Lab'is. Osa 1: iOS projekt

Selles etapis on töö developer.apple.com lĂ”petatud, kuid me ei sulge brauseri akent. Liigume Fastlane'i dokumentatsiooni lehele ja loeme utiliidist Match kĂ”ik sĂŒgavale sisse.

Hoolikas lugeja on mÀrganud, et selle utiliidi kasutamiseks on meil vaja privaatset hoidlat ja kontot, mis on ligipÀÀsudega nii Apple Developer Programile kui ka Githubile. Loome (kui sellist pole) konto vormis InfrastructureAccount@your.company.domain, mÔtleme vÀlja tugeva parooli, registreerime selle developer.apple.com-is ja mÀÀrame projekti administraatoriks. Edasi, anname kontole ligipÀÀsu teie ettevÔtte githubi hoidlasse ja loome uue privaatse hoidla nimega AmazingAppMatch.

3. Fastlane'i ja utiliidi match seadistamine

Avame terminali, liigume projekti kausta ja initsialiseerime fastlane'i nagu on toodud ametlikus juhendis. PÀrast kÀsu sisestamist

$ fastlane init

pakutakse valida olemasolevaid konfiguratsioone. Valime neljanda punkti — projekti kĂ€sitsi seadistamine.

KĂ€ivitame instrumentaalsed testid Firebase Test Lab'is. Osa 1: iOS projekt

Projektis on ilmunud uus kaust fastlane, kus asuvad kaks faili — Appfile ja Fastfile. ÜhesĂ”naga — Appfile's hoiame teenuste andmeid ja Fastfile's mÀÀratleme töid, mida Fastlane'i terminoloogias nimetatakse lanes. Soovitan lugeda ametlikku dokumentatsiooni: kord, kaks.

Avame Appfile oma lemmik tekstiredaktoriga ja viime selle jÀrgmisse vormingusse:

app_identifier "com.company.amazingapp"       # Paketi ID
apple_dev_portal_id "infrastructureaccount@your.company.domain"  # Loodud infrastruktuuri konto, millel on Ôigus redigeerida iOS projekti Apple'i arendaja programmis.
team_id "LSDY3IFJAY9" # Teie arendaja portaali meeskonna ID

Naaseme terminali ja vastavalt ametlikule juhendile alustame match'i seadistamist.

$ fastlane match init
$ fastlane match development

SeejĂ€rel sisestame nĂ”utud andmed — reposiit, konto, parool jne.

Oluline: esimese kĂ€ivitamise ajal palub utiliit match sisestada parooli reposiidi dekrĂŒpteerimiseks. On vĂ€ga oluline see parool sĂ€ilitada, see tuleb meil kasuks CI serveri seadistamise etapis!

Kaas fastlane'is ilmus uus fail — Matchfile. Avame oma lemmik tekstiredaktoriga ja viime selle jĂ€rgmisse vormingusse:

git_url("https://github.com/YourCompany/AmazingAppMatch") #Privaatne repo, mille eesmÀrk on hoida sertifikaate ja profiile.
type("development") # Vaikimisi tĂŒĂŒp: appstore, adhoc, enterprise vĂ”i development
app_identifier("com.company.amazingapp")
username("infrastructureaccount@your.company.domain") # Teie infrastruktuuri konto Apple Developer Portali kasutajanimi

TÀidame selle just niimoodi, kui tahame hiljem kasutada match'i versioonide allkirjastamiseks, mis on mÔeldud Crashlytics ja/vÔi AppStore'i jaoks, st teie rakenduse bundle ID allkirjastamiseks.

Aga nagu me teame, oleme testversiooni allkirjastamiseks loonud spetsiaalse Wildcard ID. Seega avame Fastfile'i ja lisame uue lane:

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_firebase

ja nÀeme, kuidas fastlane lÔi uue sertifikaadi ja salvestas selle repo. SuurepÀrane!

Avame XCode'i. NĂŒĂŒd on meil vajalik provisioning profile, Match Development com.company.*, mille peame mÀÀrama AmazingApp ja AmazingAppUITests sihtmĂ€rkide Provisioning profile sektsioonis.

KĂ€ivitame instrumentaalsed testid Firebase Test Lab'is. Osa 1: iOS projekt

Peab nĂŒĂŒd lisama lane testide koostamiseks. Liigume repo fastlane'i plugina projekt, mis hĂ”lbustab Firebase Test Labi eksportimise seadistamist ja jĂ€rgib juhiseid.

Kopeerime algsest nÀitest, et meie lane testing_build_for_firebase lÔpuks vÀlja nÀeks:


 lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"
    )

    scan(
      scheme: 'AmazingAppUITests',      # UI testimise skeem
      clean: true,                        # Soovitatav: see tagab, et ehitus ei sisaldaks tarbetuid faile
      skip_detect_devices: true,          # NÔutav
      build_for_testing: true,            # NÔutav
      sdk: 'iphoneos',                    # NÔutav
      should_zip_build_products: true,     # Peab olema tÔene, et seada Ôige formaat Firebase Test Lab'i jaoks
    )

    firebase_test_lab_ios_xctest(
      gcp_project: 'AmazingAppUITests', # Teie Google Cloud'i projekti nimi (naaseme selle rea juurde hiljem)
      devices: [                          # Seade(d), millega teste kÀitada
        {
          ios_model_id: 'iphonex',        # Seadmeme mudeli ID, vaata gcloud kĂ€sku ĂŒlal
          ios_version_id: '12.0',         # iOS versiooni ID, vaata gcloud kĂ€sku ĂŒlal
          locale: 'en_US',                # Valikuline: vaikimisi en_US, kui pole seadistatud
          orientation: 'portrait'         # Valikuline: vaikimisi portrait, kui pole seadistatud
        }
      ]
    )

  end

Fastlane'i seadistamise kohta CircleCI-s soovitan lugeda ametlikku dokumentatsiooni. ĂŒks, kaks.

Ärge unustage tĂ€iendama meie 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     # uuendame sÔltuvused
     - run:
         name: install gcloud-sdk   # maci masinale tuleb gcloud installida
         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 koostamiseks ja saadmiseks firebase'i

4. Aga kuidas meie testimisplatvorm? Seame ĂŒles Firebase.

Alustame tegelikult sellest, milleks artikkel kirjutati.

VĂ”ib-olla kasutab teie rakendus Firebase'i tasuta plaanil, vĂ”ib-olla ei kasuta seda ĂŒldse. Olulist vahet ei ole, kuna testimise vajadusteks vĂ”ime luua eraldi projekti, millel on aasta tasuta kasutust (pole paha, eks?)

Logime sisse oma infrastruktuuri kontole (vÔi mÔnele muule, pole vahet) ja suundume Firebase'i konsooli lehele. Loome uue projekti nimega AmazingAppUITests.

Oluline: Eelmises sammus Fastfile'is lane firebase_test_lab_ios_xctest parameeter gcp_project peab vastama projekti nimele.

KĂ€ivitame instrumentaalsed testid Firebase Test Lab'is. Osa 1: iOS projekt

Meie vaikeseaded sobivad meile tÀielikult.

Ärge sulgege vahekaart, registreerige sama konto alla Gcloud — see on sunnitud meede, kuna suhtlemine Firebase'iga toimub gcloudi konsooli liidese kaudu.

Google annab 300$ aastas, mis autotehtuste kontekstis vastab aasta tasuta teenuse kasutusele. Sisestame makseandmed, ootame testimistasu 1$ ning saame kontole 300$. Aasta möödudes projekti automaatselt tasuta paketile viimine, seega ei pea muretsema rahakaotuse pÀrast.

Naaseme Firebase projekti vahekaardile ja viime selle Blaze paketile — nĂŒĂŒd on meil raha, et ĂŒletada limiite.

Gcloudi liideses valime meie Firebase projekti, valime peamenĂŒĂŒst „Kataloog” ja lisame Cloud Testing API ja Cloud Tools Result API.

KĂ€ivitame instrumentaalsed testid Firebase Test Lab'is. Osa 1: iOS projekt

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

KĂ€ivitame instrumentaalsed testid Firebase Test Lab'is. Osa 1: iOS projekt

Loome JSON-formaadis API vÔtme

KĂ€ivitame instrumentaalsed testid Firebase Test Lab'is. Osa 1: iOS projekt

Allalaaditud JSON tuleb meil hiljem, kuid seni loeme Test Labi seadistamise lÔpetatuks.

5. CircleCI seadistamine

Tuleb Ă”igustatud kĂŒsimus — mida teha paroolidega? Meie paroolide ja teiste tundlike andmete turvaliseks hoidmiseks aitab meid meie ehitusmasina keskkonnamuutujate mehhanism. Projekti CircleCI seadetes valime Keskkonnamuutujad

KĂ€ivitame instrumentaalsed testid Firebase Test Lab'is. Osa 1: iOS projekt
Ja loome jÀrgmised muutujad:

  • vĂ”ti: GOOGLE_APPLICATION_CREDENTIALS
    vÀÀrtus: gcloud teenuse konto vÔtme JSON faili sisu
  • vĂ”ti: MATCH_PASSWORD
    vÀÀrtus: parool GitHubi sertifikaatide hoidmise repositorio dekodeerimiseks
  • vĂ”ti: FASTLANE_PASSWORD
    vÀÀrtus: Apple Developer Portali infrastruktuurkontot parool

Salvestame muudatused, loome PR ja saadame ĂŒlevaatamiseks oma tiimijuhile.

KokkuvÔte

Tulemusena nende lihtsate manipuleerimiste tÀitmine saime hea, stabiilselt töötava seisu ekraanivideote salvestamise vÔimalusega seadme testimise kÀigus. TestnÀites mÀrkisin seadme mudeliks iPhone X, kuid farm pakub laia valikut erinevate mudelite ja iOS-i versioonide kombinatsioone.

Teine osa keskendub samm-sammult Firebase Test Labi seadistamisele Android projekti jaoks.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster