Izvajamo instrumentalne teste v Firebase Test Lab. 1. del: Projekt iOS

Izvajamo instrumentalne teste v Firebase Test Lab. 1. del: Projekt iOS

Moje ime je Dmitry, delam kot tester v podjetju MEL znanost. Pred kratkim sem končal z obravnavo relativno nove funkcije iz Testni laboratorij Firebase — in sicer z instrumentalnim testiranjem iOS aplikacij z uporabo domačega testnega ogrodja XCUITest.

Pred tem sem že preizkusil Firebase Test Lab za Android in vse mi je bilo zelo všeč, zato sem se odločil, da preizkusno infrastrukturo projekta iOS poskusim postaviti na isto podlago. Veliko sem moral brskati po Googlu in prvič ni šlo vse, zato sem se odločil napisati članek z navodili za tiste, ki se še vedno borijo.

Torej, če imate teste uporabniškega vmesnika na projektu iOS, jih lahko že danes poskusite izvesti na resničnih napravah, ki jih prijazno zagotavlja Good Corporation. Kogar zanima, dobrodošli v kat.

V zgodbi sem se odločil graditi na nekaj začetnih podatkih – zasebnem repozitoriju na GitHubu in sistemu za gradnjo CircleCI. Ime aplikacije je AmazingApp, bundleID je com.company.amazingapp. Te podatke predstavljam takoj, da zmanjšam kasnejšo zmedo.

Če ste nekatere rešitve v svojem projektu implementirali drugače, delite svoje izkušnje v komentarjih.

1. Sami testi

Ustvarite novo vejo projekta za preizkuse uporabniškega vmesnika:

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

Odprimo projekt v XCode in ustvarimo nov Target s testi uporabniškega vmesnika [XCode -> File -> New -> Target -> iOS Testing Bundle] in mu dajmo samoumevno ime AmazingAppUITests.

Izvajamo instrumentalne teste v Firebase Test Lab. 1. del: Projekt iOS

Pojdite na razdelek Build Phases ustvarjenega cilja in preverite prisotnost ciljnih odvisnosti - AmazingApp, v Compile Sources - AmazingAppUITests.swift.

Dobra praksa je, da različne možnosti gradnje ločite v ločene sheme. Ustvarimo shemo za naše preizkuse uporabniškega vmesnika [XCode -> Product -> Scheme -> New Scheme] in ji damo isto ime: AmazingAppUITests.

Zgradba ustvarjene sheme mora vključevati cilj glavne aplikacije - AmazingApp in preizkuse uporabniškega vmesnika Target - AmazingAppUITests - glejte posnetek zaslona

Izvajamo instrumentalne teste v Firebase Test Lab. 1. del: Projekt iOS

Nato ustvarimo novo konfiguracijo gradnje za preizkuse uporabniškega vmesnika. V XCode kliknite datoteko projekta in pojdite na razdelek Informacije. Kliknite »+« in ustvarite novo konfiguracijo, na primer XCtest. To bomo potrebovali v prihodnje, da se izognemo plesu s tamburino pri podpisovanju kod.

Izvajamo instrumentalne teste v Firebase Test Lab. 1. del: Projekt iOS

V vašem projektu so vsaj trije cilji: glavna aplikacija, testi enot (navsezadnje obstajajo, kajne?) in testi uporabniškega vmesnika Target, ki smo jih ustvarili.

Pojdite na Target AmazingApp, zavihek Build Settings, razdelek Code Signing Identity. Za konfiguracijo XCtest izberite iOS Developer. V razdelku Slog podpisovanja kode izberite Ročno. Profila za zagotavljanje še nismo ustvarili, vendar se bomo k njemu zagotovo vrnili malo kasneje.

Za Target AmazingAppUITests storimo enako, vendar v stolpec Product Bundle Identifier vnesemo com.company.amazingappuitests.

2. Nastavitev projekta v programu Apple Developer Program

Pojdite na stran Apple Developer Program, pojdite na razdelek Certificates, Identifiers & Profiles in nato na stolpec App ID-ji elementa Identifiers. Ustvarite nov ID aplikacije z imenom AmazingAppUITests in bundleID com.company.amazingappuitests.

Izvajamo instrumentalne teste v Firebase Test Lab. 1. del: Projekt iOS

Zdaj imamo možnost, da svoje teste podpišemo z ločenim potrdilom, toda ... Postopek sestavljanja gradnje za testiranje vključuje sestavljanje same aplikacije in sestavljanje izvajalca preizkusov. V skladu s tem se soočamo s težavo podpisovanja dveh ID-jev svežnja z enim profilom zagotavljanja. Na srečo obstaja preprosta in elegantna rešitev – Wildcard App ID. Ponovimo postopek za ustvarjanje novega ID-ja aplikacije, vendar namesto Eksplicitnega ID-ja aplikacije izberemo ID aplikacije z nadomestnim znakom kot na posnetku zaslona.

Izvajamo instrumentalne teste v Firebase Test Lab. 1. del: Projekt iOS

Na tej točki smo končali z delom z developer.apple.com, vendar okna brskalnika ne bomo minimizirali. Pojdimo na Stran z dokumentacijo Fastlane in preberite o pripomočku Match od platnice do platnice.

Pozoren bralec je opazil, da bomo za uporabo tega pripomočka potrebovali zasebno skladišče in račun z dostopom do programa Apple Developer Program in Github. Ustvarimo (če nenadoma tega ni) račun obrazca [e-pošta zaščitena], si omislite močno geslo, ga registrirajte pri developer.apple.com in ga določite za skrbnika projekta. Nato omogočimo računu dostop do repozitorija github vašega podjetja in ustvarimo novo zasebno repozitorij z imenom, kot je AmazingAppMatch.

3. Nastavitev Fastlane in pripomočka za ujemanje

Odprite terminal, pojdite v mapo s projektom in inicializirajte fastlane, kot je navedeno v uradni priročnik. Po vnosu ukaza

$ fastlane init

Pozvani boste, da izberete razpoložljive konfiguracije uporabe. Izberite četrto možnost - ročna nastavitev projekta.

Izvajamo instrumentalne teste v Firebase Test Lab. 1. del: Projekt iOS

Projekt ima nov imenik fastlane, ki vsebuje dve datoteki - Appfile in Fastfile. Na kratko, storitvene podatke shranjujemo v Appfile in pišemo opravila v Fastfile, ki se v terminologiji Fastlane imenujejo pasovi. Priporočam branje uradne dokumentacije: čas, два.

Odprite Appfile v svojem najljubšem urejevalniku besedil in ga prinesite na naslednji obrazec:

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

Vrnemo se na terminal in v skladu z uradnim priročnikom začnemo konfigurirati tekmo.

$ fastlane match init
$ fastlane match development

Nato vnesite zahtevane podatke - repozitorij, račun, geslo itd.

Pomembno: Ko prvič zaženete pripomoček za ujemanje, boste morali vnesti geslo za dešifriranje repozitorija. Zelo pomembno je, da shranite to geslo; potrebovali ga bomo pri nastavitvi strežnika CI!

V mapi Fastlane se je pojavila nova datoteka - Matchfile. Odprite ga v svojem najljubšem urejevalniku besedila in ga prikažite takole:

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

Točno tako ga izpolnimo, če želimo v prihodnosti uporabiti ujemanje za podpisovanje gradenj za prikaz v Crashlytics in/ali AppStore, torej za podpis ID-ja svežnja vaše aplikacije.

Toda, kot se spomnimo, smo ustvarili poseben nadomestni ID za podpis testne gradnje. Zato odprite Fastfile in vnesite nov pas:

lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"  # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
    )

end

Shranite in vstopite v terminal

fastlane testing_build_for_firebase

in vidimo, kako je fastlane ustvaril novo potrdilo in ga dal v repozitorij. Super!

Odprite XCode. Zdaj imamo potreben profil zagotavljanja obrazca Match Development com.company.*, ki mora biti naveden v razdelku Profil zagotavljanja za cilje AmazingApp in AmazingAppUITests.

Izvajamo instrumentalne teste v Firebase Test Lab. 1. del: Projekt iOS

Ostaja še dodati pas za sestavljanje testov. Pojdimo na repozitorij projekt vtičnika za fastlane, ki olajša nastavitev izvoza v Firebase Test Lab in sledite navodilom.

Kopirajmo in prilepimo izvirni primer, tako da bo naš lane testing_build_for_firebase na koncu videti takole:


 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

Za popolne informacije o nastavitvi fastlane v CircleCI priporočam branje uradne dokumentacije krat, два.

Ne pozabite dodati nove naloge v naš 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. Kaj pa naša preskusna naprava? Nastavitev Firebase.

Pojdimo k temu, za kaj je bil članek napisan.

Morda vaša aplikacija uporablja Firebase v brezplačnem načrtu ali pa sploh ne. Absolutno ni nobene bistvene razlike, saj lahko za potrebe testiranja ustvarimo ločen projekt z letom brezplačne uporabe (kul, kajne?)

Prijavite se v svoj infrastrukturni račun (ali kateri koli drug, ni pomembno) in pojdite na Stran konzole Firebase. Ustvarite nov projekt z imenom AmazingAppUITests.

Pomembno: V prejšnjem koraku v datoteki Fastfile v pasu firebase_test_lab_ios_xctest se mora parameter gcp_project ujemati z imenom projekta.

Izvajamo instrumentalne teste v Firebase Test Lab. 1. del: Projekt iOS

Privzete nastavitve nam kar ustrezajo.

Ne zaprite zavihka, registrirajte se pod istim računom v Gcloud - to je nujen ukrep, saj komunikacija s Firebase poteka prek vmesnika konzole gcloud.

Google daje 300 dolarjev za leto dni, kar je v okviru izvajanja samodejnih testov enako letu brezplačne uporabe storitve. Vnesemo vaše podatke o plačilu, počakamo na poskusno bremenitev v višini 1 USD in prejmemo 300 USD na vaš račun. Po enem letu bo projekt samodejno prenesen na brezplačen tarifni načrt, tako da ni treba skrbeti za morebitno izgubo denarja.

Vrnimo se na zavihek s projektom Firebase in ga prenesemo v tarifni načrt Blaze - zdaj imamo nekaj plačati, če je limit presežen.

V vmesniku gcloud izberite naš projekt Firebase, izberite postavko glavnega menija »Imenik« in dodajte Cloud Testing API in Cloud Tools Result API.

Izvajamo instrumentalne teste v Firebase Test Lab. 1. del: Projekt iOS

Nato pojdite na točko menija »IAM in administracija« -> Računi storitev -> Ustvari račun storitve. Podeljujemo pravice za urejanje projekta.

Izvajamo instrumentalne teste v Firebase Test Lab. 1. del: Projekt iOS

Ustvarite ključ API v formatu JSON

Izvajamo instrumentalne teste v Firebase Test Lab. 1. del: Projekt iOS

Preneseni JSON bomo potrebovali nekoliko pozneje, vendar bomo za zdaj menili, da je nastavitev Test Lab dokončana.

5. Nastavitev CircleCI

Postavlja se razumno vprašanje - kaj storiti z gesli? Mehanizem okoljskih spremenljivk našega gradbenega stroja nam bo pomagal pri varnem shranjevanju naših gesel in drugih občutljivih podatkov. V nastavitvah projekta CircleCI izberite Spremenljivke okolja

Izvajamo instrumentalne teste v Firebase Test Lab. 1. del: Projekt iOS
In nastavite naslednje spremenljivke:

  • ključ: GOOGLE_APPLICATION_CREDENTIALS
    vrednost: vsebina datoteke json ključa računa storitve gcloud
  • ključ: MATCH_PASSWORD
    vrednost: geslo za dešifriranje repozitorija github s certifikati
  • ključ: FASTLANE_PASSWORD
    vrednost: geslo računa za infrastrukturo Apple Developer Portal

Spremembe shranimo, ustvarimo PR in ga pošljemo našemu vodji ekipe v pregled.

Rezultati

Kot rezultat teh preprostih manipulacij smo dobili dobro, stabilno delovno stojalo z možnostjo snemanja videa na zaslonu naprave v času testiranja. V testnem primeru sem navedel model naprave iPhone X, farma pa ponuja bogato izbiro iz kombinacije različnih modelov in različic iOS.

Drugi del bo posvečen nastavitvi Firebase Test Lab po korakih za projekt Android.

Vir: www.habr.com

Dodaj komentar