Mēs veicam instrumentālos testus Firebase Test Lab. 1. daļa: iOS projekts

Mēs veicam instrumentālos testus Firebase Test Lab. 1. daļa: iOS projekts

Mani sauc Dmitrijs, strādāju uzņēmumā par testeri MEL zinātne. Pavisam nesen es pabeidzu nodarboties ar salīdzinoši nesenu funkciju no Firebase testa laboratorija — proti, ar iOS lietojumprogrammu instrumentālo testēšanu, izmantojot vietējo testēšanas sistēmu XCUITest.

Pirms tam es jau biju izmēģinājis Firebase Test Lab for Android, un viss ļoti patika, tāpēc es nolēmu mēģināt nolikt vienādos pamatos projekta iOS testa infrastruktūru. Man nācās daudz googlēt, un ne viss izdevās pirmajā reizē, tāpēc nolēmu uzrakstīt pamācības rakstu tiem, kas joprojām cīnās.

Tātad, ja jums ir iOS projekta lietotāja saskarnes testi, jau šodien varat mēģināt tos palaist reālās ierīcēs, ko laipni nodrošina Good Corporation. Interesentus laipni lūdzam kat.

Stāstā es nolēmu balstīties uz dažiem sākotnējiem datiem - privātu repozitoriju GitHub un CircleCI veidošanas sistēmu. Lietojumprogrammas nosaukums ir AmazingApp, bundleID ir com.company.amazingapp. Es nekavējoties sniedzu šos datus, lai mazinātu turpmākās neskaidrības.

Ja kādus risinājumus savā projektā ieviesāt savādāk, dalieties pieredzē komentāros.

1. Paši testi

Izveidojiet jaunu projekta filiāli UI testiem:

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

Atvērsim projektu programmā XCode un izveidosim jaunu Target ar UI testiem [XCode -> File -> New -> Target -> iOS Testing Bundle], piešķirot tam pašsaprotamu nosaukumu AmazingAppUITests.

Mēs veicam instrumentālos testus Firebase Test Lab. 1. daļa: iOS projekts

Pārejiet uz izveidotā mērķa sadaļu Build Phases un pārbaudiet, vai nav mērķa atkarību — AmazingApp, sadaļā Compile Sources — AmazingAppUITests.swift.

Laba prakse ir sadalīt dažādas veidošanas iespējas atsevišķās shēmās. Mēs izveidojam shēmu mūsu UI testiem [XCode -> Product -> Scheme -> New Scheme] un piešķiram tai tādu pašu nosaukumu: AmazingAppUITests.

Izveidotās shēmas veidojumā jāiekļauj galvenās lietojumprogrammas mērķis - AmazingApp un Target UI testi - AmazingAppUITests - skatiet ekrānuzņēmumu

Mēs veicam instrumentālos testus Firebase Test Lab. 1. daļa: iOS projekts

Tālāk mēs izveidojam jaunu būvējuma konfigurāciju lietotāja saskarnes testiem. Programmā XCode noklikšķiniet uz projekta faila un dodieties uz sadaļu Informācija. Noklikšķiniet uz “+” un izveidojiet jaunu konfigurāciju, piemēram, XCtest. Mums tas būs vajadzīgs nākotnē, lai izvairītos no dejošanas ar tamburīnu, kad runa ir par koda parakstīšanu.

Mēs veicam instrumentālos testus Firebase Test Lab. 1. daļa: iOS projekts

Jūsu projektā ir vismaz trīs mērķi: galvenā lietojumprogramma, vienību testi (galu galā tie pastāv, vai ne?) un mūsu izveidotie Target UI testi.

Dodieties uz Target AmazingApp, cilni Build Settings, sadaļu Koda parakstīšanas identitāte. XCtest konfigurācijai atlasiet iOS izstrādātāju. Sadaļā Koda parakstīšanas stils atlasiet Manuāli. Mēs vēl neesam izveidojuši nodrošinājuma profilu, taču mēs noteikti atgriezīsimies pie tā nedaudz vēlāk.

Ar Target AmazingAppUITests mēs darām to pašu, bet slejā Product Bundle Identifier ievadām com.company.amazingappuitests.

2. Projekta iestatīšana Apple izstrādātāju programmā

Dodieties uz Apple izstrādātāju programmas lapu, dodieties uz sadaļu Sertifikāti, identifikatori un profili un pēc tam uz vienuma Identifiers sleju App ID. Izveidojiet jaunu lietotnes ID ar nosaukumu AmazingAppUITests un bundleID com.company.amazingappuitests.

Mēs veicam instrumentālos testus Firebase Test Lab. 1. daļa: iOS projekts

Tagad mums ir iespēja parakstīt savus testus ar atsevišķu sertifikātu, bet... Būvējuma salikšanas procedūra testēšanai ietver pašas lietojumprogrammas montāžu un testa skrējēja montāžu. Attiecīgi mēs saskaramies ar divu komplekta ID parakstīšanas problēmu ar vienu nodrošināšanas profilu. Par laimi, ir vienkāršs un elegants risinājums - Wildcard App ID. Mēs atkārtojam jauna lietotnes ID izveides procedūru, taču nepārprotama lietotnes ID vietā atlasiet aizstājējzīmi App ID, kā parādīts ekrānuzņēmumā.

Mēs veicam instrumentālos testus Firebase Test Lab. 1. daļa: iOS projekts

Šobrīd mēs esam pabeiguši darbu ar developer.apple.com, taču mēs nesamazināsim pārlūkprogrammas logu. Ejam uz Fastlane dokumentācijas vietne un lasiet par Match utilītu no vāka līdz vākam.

Kāds uzmanīgs lasītājs pamanīja, ka, lai izmantotu šo utilītu, mums būs nepieciešama privāta repozitorija un konts ar piekļuvi gan Apple izstrādātāju programmai, gan Github. Mēs izveidojam (ja pēkšņi tāda nav) veidlapas kontu [e-pasts aizsargāts], izstrādājiet spēcīgu paroli, reģistrējiet to vietnē developer.apple.com un ieceliet to par projekta administratoru. Pēc tam mēs piešķiram kontam piekļuvi jūsu uzņēmuma github repozitorijam un izveidojam jaunu privātu repozitoriju ar tādu nosaukumu kā AmazingAppMatch.

3. Fastlane un spēles utilīta iestatīšana

Atveriet termināli, dodieties uz mapi ar projektu un inicializējiet fastlane, kā norādīts oficiālā rokasgrāmata. Pēc komandas ievadīšanas

$ fastlane init

Jums tiks piedāvāts izvēlēties pieejamās lietošanas konfigurācijas. Izvēlieties ceturto opciju - manuāla projekta iestatīšana.

Mēs veicam instrumentālos testus Firebase Test Lab. 1. daļa: iOS projekts

Projektam ir jauns direktorijs fastlane, kurā ir divi faili – Appfile un Fastfile. Īsumā mēs glabājam pakalpojumu datus pakalpojumā Appfile un ierakstām darbus Fastfile, ko Fastlane terminoloģijā sauc par joslām. Iesaku izlasīt oficiālo dokumentāciju: laiks, два.

Atveriet Appfile savā iecienītākajā teksta redaktorā un atveriet to šādā 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

Mēs atgriežamies terminālī un saskaņā ar oficiālo rokasgrāmatu sākam konfigurēt atbilstību.

$ fastlane match init
$ fastlane match development

Tālāk ievadiet pieprasītos datus - repozitoriju, kontu, paroli utt.

Svarīgi: Pirmoreiz palaižot atbilstības utilītu, jums tiks lūgts ievadīt paroli, lai atšifrētu repozitoriju. Ir ļoti svarīgi saglabāt šo paroli, tā mums būs nepieciešama, uzstādot CI serveri!

Fastlane mapē ir parādījies jauns fails - Matchfile. Atveriet to savā iecienītākajā teksta redaktorā un parādiet to šādi:

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

Mēs to aizpildām tieši šādā veidā, ja turpmāk vēlamies izmantot match, lai parakstītu būvējumus parādīšanai pakalpojumā Crashlytics un/vai AppStore, tas ir, lai parakstītu jūsu lietojumprogrammas komplekta ID.

Bet, kā mēs atceramies, mēs izveidojām īpašu aizstājējzīmes ID, lai parakstītu testa būvējumu. Tāpēc atveriet Fastfile un ievadiet jaunu joslu:

lane :testing_build_for_firebase do

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

end

Saglabājiet un ievadiet terminālī

fastlane testing_build_for_firebase

un mēs redzam, kā fastlane izveidoja jaunu sertifikātu un ievietoja to repozitorijā. Lieliski!

Atveriet XCode. Tagad mums ir nepieciešamais veidlapas Match Development com.company.* nodrošināšanas profils, kas ir jānorāda AmazingApp un AmazingAppUITests mērķu sadaļā Nodrošināšanas profils.

Mēs veicam instrumentālos testus Firebase Test Lab. 1. daļa: iOS projekts

Atliek pievienot joslu montāžas testiem. Ejam uz krātuve Fastlane spraudņa projekts, kas atvieglo eksportēšanas iestatīšanu uz Firebase Test Lab un norādījumu izpildi.

Kopēsim un ielīmēsim no sākotnējā piemēra, lai mūsu joslu testing_build_for_firebase izskatītos šādi:


 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

Lai iegūtu pilnīgu informāciju par fastlane iestatīšanu pakalpojumā CircleCI, iesaku izlasīt oficiālo dokumentāciju reizes два.

Neaizmirstiet pievienot jaunu uzdevumu mūsu 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. Kā ir ar mūsu testēšanas stendu? Firebase iestatīšana.

Pievērsīsimies tam, kam raksts tika rakstīts.

Iespējams, jūsu lietotnē Firebase tiek izmantots bezmaksas plānā vai arī netiek izmantots vispār. Absolūti nekādas principiālas atšķirības nav, jo testēšanas vajadzībām varam izveidot atsevišķu projektu ar bezmaksas lietošanas gadu (forši, vai ne?)

Mēs piesakāmies savā infrastruktūras kontā (vai jebkurā citā, tas nav svarīgi) un dodamies uz Firebase konsoles lapa. Izveidojiet jaunu projektu ar nosaukumu AmazingAppUITests.

Svarīgi: Iepriekšējā darbībā Fastfile joslā firebase_test_lab_ios_xctest parametram gcp_project ir jāatbilst projekta nosaukumam.

Mēs veicam instrumentālos testus Firebase Test Lab. 1. daļa: iOS projekts

Noklusējuma iestatījumi mums ir diezgan piemēroti.

Neaizveriet cilni, reģistrējieties tajā pašā kontā Gmākonis - tas ir nepieciešams pasākums, jo saziņa ar Firebase notiek, izmantojot gcloud konsoles saskarni.

Google piešķir 300 USD par gadu, kas autotestu veikšanas kontekstā ir līdzvērtīgs gada bezmaksas pakalpojuma izmantošanai. Mēs ievadām jūsu maksājuma informāciju, sagaidām pārbaudes debetu 1 ASV dolāra apmērā un saņemam 300 ASV dolārus jūsu kontā. Pēc gada projekts automātiski tiks pārcelts uz bezmaksas tarifu plānu, tāpēc nav jāuztraucas par iespējamu naudas zaudējumu.

Atgriezīsimies pie cilnes ar Firebase projektu un pārliksim to uz Blaze tarifu plānu – tagad mums ir par ko maksāt, ja limits tiek pārsniegts.

Gcloud interfeisā atlasiet mūsu Firebase projektu, atlasiet galvenās izvēlnes vienumu “Directory” un pievienojiet Cloud Testing API un Cloud Tools Result API.

Mēs veicam instrumentālos testus Firebase Test Lab. 1. daļa: iOS projekts

Pēc tam dodieties uz izvēlnes vienumu “IAM un administrēšana” -> Pakalpojumu konti -> Izveidot pakalpojuma kontu. Mēs piešķiram tiesības rediģēt projektu.

Mēs veicam instrumentālos testus Firebase Test Lab. 1. daļa: iOS projekts

Izveidojiet API atslēgu JSON formātā

Mēs veicam instrumentālos testus Firebase Test Lab. 1. daļa: iOS projekts

Lejupielādētais JSON mums būs nepieciešams nedaudz vēlāk, taču pagaidām mēs uzskatīsim, ka Test Lab iestatīšana ir pabeigta.

5. CircleCI iestatīšana

Rodas pamatots jautājums – ko darīt ar parolēm? Mūsu veidošanas mašīnas vides mainīgais mehānisms palīdzēs mums droši glabāt mūsu paroles un citus sensitīvus datus. CircleCI projekta iestatījumos atlasiet Vides mainīgie

Mēs veicam instrumentālos testus Firebase Test Lab. 1. daļa: iOS projekts
Un iestatiet šādus mainīgos:

  • atslēga: GOOGLE_APPLICATION_CREDENTIALS
    vērtība: gcloud pakalpojuma konta atslēgas json faila saturs
  • atslēga: MATCH_PASSWORD
    vērtība: parole github repozitorija atšifrēšanai ar sertifikātiem
  • atslēga: FASTLANE_PASSWORD
    vērtība: Apple Developer Portal infrastruktūras konta parole

Mēs saglabājam izmaiņas, izveidojam PR un nosūtām to mūsu komandas vadītājam pārskatīšanai.

Rezultāti

Šo vienkāršo manipulāciju rezultātā mēs saņēmām labu, stabilu darba stendu ar iespēju testēšanas brīdī ierakstīt video ierīces ekrānā. Testa piemērā es norādīju iPhone X ierīces modeli, bet ferma nodrošina bagātīgu izvēli no dažādu modeļu un iOS versiju kombinācijas.

Otrā daļa būs veltīta Firebase testa laboratorijas pakāpeniskai iestatīšanai Android projektam.

Avots: www.habr.com

Pievieno komentāru