Provodimo instrumentalne testove u Firebase Test Labu. 1. dio: iOS projekt

Provodimo instrumentalne testove u Firebase Test Labu. 1. dio: iOS projekt

Moje ime je Dmitry, radim kao tester u tvrtki MEL znanost. Nedavno sam završio s relativno nedavnom značajkom iz Firebase Test Lab — naime, uz instrumentalno testiranje iOS aplikacija korištenjem nativnog okvira za testiranje XCUITest.

Prije toga sam već isprobao Firebase Test Lab za Android i sve mi se jako svidjelo, pa sam odlučio pokušati staviti iOS testnu infrastrukturu projekta na iste temelje. Morao sam puno guglati i nije sve išlo prvi put, pa sam odlučio napisati članak s uputama za one koji se još bore.

Dakle, ako imate testove korisničkog sučelja na iOS projektu, već danas ih možete pokušati pokrenuti na stvarnim uređajima, ljubazno ustupljeni od strane Good Corporation. Za zainteresirane, dobrodošli u cat.

U priči sam odlučio graditi na nekim početnim podacima – privatnom repozitoriju na GitHubu i CircleCI build sustavu. Naziv aplikacije je AmazingApp, bundleID je com.company.amazingapp. Ove podatke iznosim odmah kako bih smanjio naknadnu zabunu.

Ako ste neka rješenja u svom projektu implementirali drugačije, podijelite svoje iskustvo u komentarima.

1. Sami testovi

Stvorite novu granu projekta za UI testove:

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

Otvorimo projekt u XCodeu i stvorimo novi Target s UI testovima [XCode -> File -> New -> Target -> iOS Testing Bundle], dajući mu samorazumljiv naziv AmazingAppUITests.

Provodimo instrumentalne testove u Firebase Test Labu. 1. dio: iOS projekt

Idite na odjeljak Build Phases kreiranog cilja i provjerite prisutnost ciljnih ovisnosti - AmazingApp, u Compile Sources - AmazingAppUITests.swift.

Dobra praksa je odvojiti različite opcije izgradnje u zasebne sheme. Mi stvaramo shemu za naše UI testove [XCode -> Product -> Scheme -> New Scheme] i dajemo joj isti naziv: AmazingAppUITests.

Izrada izrađene sheme mora uključivati ​​Cilj glavne aplikacije - AmazingApp i Target UI testove - AmazingAppUITests - pogledajte snimak zaslona

Provodimo instrumentalne testove u Firebase Test Labu. 1. dio: iOS projekt

Zatim stvaramo novu konfiguraciju građenja za testove korisničkog sučelja. U XCodeu kliknite datoteku projekta i idite na odjeljak Info. Kliknite na “+” i izradite novu konfiguraciju, na primjer XCtest. Ovo će nam trebati u budućnosti kako bismo izbjegli ples uz tamburu kada je u pitanju potpisivanje šifre.

Provodimo instrumentalne testove u Firebase Test Labu. 1. dio: iOS projekt

Postoje najmanje tri cilja u vašem projektu: glavna aplikacija, jedinični testovi (uostalom, oni postoje, zar ne?) i Target UI testovi koje smo izradili.

Idite na Target AmazingApp, karticu Postavke izrade, odjeljak Identitet potpisivanja koda. Za konfiguraciju XCtest odaberite iOS Developer. U odjeljku Stil potpisivanja koda odaberite Ručno. Još nismo generirali profil za pružanje usluga, ali ćemo mu se svakako vratiti malo kasnije.

Za Target AmazingAppUITests radimo isto, ali u stupac Product Bundle Identifier unosimo com.company.amazingappuitests.

2. Postavljanje projekta u Apple Developer Program

Idite na stranicu Apple Developer Program, idite na odjeljak Certifikati, identifikatori i profili, a zatim na stupac App IDs stavke Identifiers. Izradite novi ID aplikacije pod nazivom AmazingAppUITests i bundleID com.company.amazingappuitests.

Provodimo instrumentalne testove u Firebase Test Labu. 1. dio: iOS projekt

Sada imamo priliku potpisati naše testove posebnim certifikatom, ali... Procedura sastavljanja međugradnje za testiranje uključuje sastavljanje same aplikacije i sastavljanje pokretača testa. Sukladno tome, suočeni smo s problemom potpisivanja dva ID-a paketa s jednim profilom za pružanje usluga. Srećom, postoji jednostavno i elegantno rješenje - Wildcard App ID. Ponavljamo proceduru za izradu novog App ID-a, ali umjesto Explicit App ID-a biramo Wildcard App ID kao na snimci zaslona.

Provodimo instrumentalne testove u Firebase Test Labu. 1. dio: iOS projekt

U ovom smo trenutku završili s radom s developer.apple.com, ali nećemo minimizirati prozor preglednika. Idemo Stranica s dokumentacijom za Fastlane i pročitajte o uslužnom programu Match od korice do korice.

Pažljivi čitatelj primijetio je da će nam za korištenje ovog uslužnog programa trebati privatno spremište i račun s pristupom Apple Developer Programu i Githubu. Stvaramo (ako iznenada toga nema) račun obrasca [e-pošta zaštićena], smislite jaku lozinku, registrirajte je na developer.apple.com i postavite je kao administratora projekta. Zatim dajemo računu pristup github repozitoriju vaše tvrtke i stvaramo novi privatni repozitorij s nazivom poput AmazingAppMatch.

3. Postavljanje Fastlanea i pomoćnog programa za meč

Otvorite terminal, idite u mapu s projektom i inicijalizirajte fastlane kao što je navedeno u službeni priručnik. Nakon unosa naredbe

$ fastlane init

Od vas će se tražiti da odaberete dostupne konfiguracije korištenja. Odaberite četvrtu opciju - ručno postavljanje projekta.

Provodimo instrumentalne testove u Firebase Test Labu. 1. dio: iOS projekt

Projekt ima novi direktorij fastlane, koji sadrži dvije datoteke - Appfile i Fastfile. Ukratko, pohranjujemo podatke o uslugama u Appfileu i pišemo poslove u Fastfileu, koji se u terminologiji Fastlanea nazivaju staze. Preporučujem čitanje službene dokumentacije: vrijeme, два.

Otvorite Appfile u svom omiljenom uređivaču teksta i dovedite ga u sljedeći obrazac:

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

Vraćamo se na terminal i prema službenom priručniku počinjemo konfigurirati utakmicu.

$ fastlane match init
$ fastlane match development

Zatim unesite tražene podatke - repozitorij, račun, lozinku itd.

Važno: Kada prvi put pokrenete uslužni program za podudaranje, od vas će se tražiti da unesete lozinku za dešifriranje repozitorija. Vrlo je važno sačuvati ovu lozinku; trebat će nam prilikom postavljanja CI poslužitelja!

Nova datoteka se pojavila u fastlane mapi - Matchfile. Otvorite ga u svom omiljenom uređivaču teksta i prikažite ga ovako:

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

Ispunjavamo ga upravo na ovaj način ako ubuduće želimo koristiti match za potpisivanje buildova za objavu u Crashlyticsu i/ili AppStoreu, odnosno za potpisivanje bundle ID-a vaše aplikacije.

No, kao što se sjećamo, stvorili smo poseban ID zamjenskog znaka za potpisivanje testne verzije. Stoga otvorite Fastfile i unesite novu traku:

lane :testing_build_for_firebase do

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

end

Spremite i uđite u terminal

fastlane testing_build_for_firebase

i vidimo kako je fastlane stvorio novi certifikat i stavio ga u repozitorij. Sjajno!

Otvorite XCode. Sada imamo potreban profil pružanja obrasca Match Development com.company.*, koji mora biti naveden u odjeljku Profil pružanja za ciljeve AmazingApp i AmazingAppUITests.

Provodimo instrumentalne testove u Firebase Test Labu. 1. dio: iOS projekt

Ostaje dodati traku za sastavljanje testova. Idemo spremište projekt dodatka za fastlane koji olakšava postavljanje izvoza u Firebase Test Lab i praćenje uputa.

Kopirajmo i zalijepimo iz originalnog primjera tako da naš lane testing_build_for_firebase na kraju izgleda ovako:


 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 potpune informacije o postavljanju fastlanea u CircleCI, preporučujem čitanje službene dokumentacije vrijeme два.

Ne zaboravite dodati novi zadatak u 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. Što je s našim ispitnim stolom? Postavljanje Firebasea.

Prijeđimo na ono za što je članak napisan.

Možda vaša aplikacija koristi Firebase na besplatnom planu ili možda uopće ne koristi. Nema apsolutno nikakve fundamentalne razlike, jer za potrebe testiranja možemo napraviti zaseban projekt s godinu dana besplatnog korištenja (cool, zar ne?)

Prijavljujemo se na svoj infrastrukturni račun (ili bilo koji drugi, nije važno) i idemo na Stranica Firebase konzole. Napravite novi projekt pod nazivom AmazingAppUITests.

Važno: U prethodnom koraku u Fastfileu u traci firebase_test_lab_ios_xctest parametar gcp_project trebao bi odgovarati nazivu projekta.

Provodimo instrumentalne testove u Firebase Test Labu. 1. dio: iOS projekt

Zadane postavke nam sasvim dobro odgovaraju.

Ne zatvarajte karticu, registrirajte se pod istim računom u Gcloud - ovo je neophodna mjera, budući da se komunikacija s Firebaseom odvija pomoću sučelja gcloud konzole.

Google daje 300 dolara za godinu dana, što je u kontekstu izvođenja autotestova ekvivalentno godini besplatnog korištenja usluge. Unosimo vaše podatke o plaćanju, čekamo testno terećenje od 1 USD i primamo 300 USD na vaš račun. Nakon godinu dana projekt će automatski biti prebačen na besplatni tarifni plan, tako da nema razloga za brigu o mogućem gubitku novca.

Vratimo se na karticu s projektom Firebase i prebacimo ga na tarifni plan Blaze - sada imamo što platiti ako se prekorači limit.

U sučelju gcloud odaberite naš Firebase projekt, odaberite stavku glavnog izbornika "Directory" i dodajte Cloud Testing API i Cloud Tools Result API.

Provodimo instrumentalne testove u Firebase Test Labu. 1. dio: iOS projekt

Zatim idite na stavku izbornika “IAM i administracija” -> Računi usluga -> Stvori račun usluge. Dajemo pravo na uređivanje projekta.

Provodimo instrumentalne testove u Firebase Test Labu. 1. dio: iOS projekt

Izradite API ključ u JSON formatu

Provodimo instrumentalne testove u Firebase Test Labu. 1. dio: iOS projekt

Preuzeti JSON trebat ćemo malo kasnije, ali za sada ćemo smatrati da je postavljanje Test Laba završeno.

5. Postavljanje CircleCI

Postavlja se razumno pitanje - što učiniti s lozinkama? Mehanizam varijable okruženja našeg stroja za izradu pomoći će nam da sigurno pohranimo svoje lozinke i druge osjetljive podatke. U postavkama projekta CircleCI odaberite Varijable okoline

Provodimo instrumentalne testove u Firebase Test Labu. 1. dio: iOS projekt
I postavite sljedeće varijable:

  • ključ: GOOGLE_APPLICATION_CREDENTIALS
    vrijednost: sadržaj json datoteke ključa računa usluge gcloud
  • ključ: MATCH_PASSWORD
    vrijednost: lozinka za dekriptiranje github repozitorija s certifikatima
  • ključ: FASTLANE_PASSWORD
    vrijednost: zaporka računa infrastrukture Apple Developer Portala

Spremamo promjene, stvaramo PR i šaljemo ga našem voditelju tima na pregled.

Rezultati

Kao rezultat ovih jednostavnih manipulacija dobili smo dobar, stabilan radni stalak s mogućnošću snimanja videa na zaslonu uređaja u vrijeme testiranja. U testnom primjeru naveo sam model iPhone X uređaja, ali farma nudi bogat izbor iz kombinacije različitih modela i iOS verzija.

Drugi dio bit će posvećen korak-po-korak postavljanju Firebase Test Laba za Android projekt.

Izvor: www.habr.com

Dodajte komentar