Izvodimo instrumentalne testove u Firebase Test Lab. Dio 1: iOS projekt

Izvodimo instrumentalne testove u Firebase Test Lab. Dio 1: iOS projekt

Zovem se Dmitrij, radim kao tester u kompaniji MEL Science. Nedavno sam završio sa radom sa relativno nedavnom funkcijom iz Firebase Test Lab — naime, uz instrumentalno testiranje iOS aplikacija korištenjem izvornog okvira za testiranje XCUITest.

Prije ovoga, već sam isprobao Firebase Test Lab za Android i jako mi se sve svidjelo, pa sam odlučio pokušati postaviti iOS test infrastrukturu projekta na istu osnovu. Morao sam mnogo guglati i nije sve ispalo iz prvog puta, pa sam odlučio da napišem tutorial članak za one koji se još muče.

Dakle, ako imate UI testove na iOS projektu, već danas možete pokušati da ih pokrenete na stvarnim uređajima, ljubazno osigurana od strane Good Corporation. Za zainteresovane, dobrodošli u cat.

U priči sam odlučio da izgradim neke početne podatke - privatno spremište na GitHubu i CircleCI build sistem. Naziv aplikacije je AmazingApp, bundleID je com.company.amazingapp. Iznosim ove podatke odmah kako bih smanjio kasniju zabunu.

Ako ste različito implementirali određena rješenja u svoj projekt, podijelite svoje iskustvo u komentarima.

1. Sami testovi

Kreirajte novu granu projekta za UI testove:

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

Otvorimo projekat u XCode-u i kreirajmo novi Target sa UI testovima [XCode -> File -> New -> Target -> iOS Testing Bundle], dajući mu naziv AmazingAppUITests koji je samo po sebi razumljiv.

Izvodimo instrumentalne testove u Firebase Test Lab. Dio 1: iOS projekt

Idite na odjeljak Faze izgradnje kreiranog Target-a i provjerite prisutnost Target Dependencies - AmazingApp, u Compile Sources - AmazingAppUITests.swift.

Dobra praksa je odvajanje različitih opcija izgradnje u zasebne šeme. Kreiramo šemu za naše UI testove [XCode -> Product -> Scheme -> New Scheme] i dajemo joj isto ime: AmazingAppUITests.

Izrada kreirane šeme mora uključivati ​​Target glavne aplikacije - AmazingApp i Target UI testove - AmazingAppUITests - pogledajte snimak ekrana

Izvodimo instrumentalne testove u Firebase Test Lab. Dio 1: iOS projekt

Zatim kreiramo novu konfiguraciju izgradnje za UI testove. U XCodeu kliknite na datoteku projekta i idite na odjeljak Info. Kliknite na “+” i kreirajte novu konfiguraciju, na primjer XCtest. Ovo će nam trebati u budućnosti kako bismo izbjegli ples s tamburom kada je u pitanju potpisivanje koda.

Izvodimo instrumentalne testove u Firebase Test Lab. Dio 1: iOS projekt

U vašem projektu postoje najmanje tri cilja: glavna aplikacija, jedinični testovi (na kraju krajeva, postoje, zar ne?) i Target UI testovi koje smo kreirali.

Idite na Target AmazingApp, karticu Postavke izrade, odjeljak Identitet za potpisivanje koda. Za XCtest konfiguraciju odaberite iOS Developer. U odjeljku Stil potpisivanja koda odaberite Ručno. Još nismo generirali profil za proviziju, ali ćemo se definitivno vratiti na njega malo kasnije.

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

2. Postavljanje projekta u Apple Developer Program

Idite na stranicu programa Apple Developer Program, idite na odjeljak Certifikati, identifikatori i profili, a zatim na kolonu ID-ovi aplikacije u stavci Identifikatori. Kreirajte novi ID aplikacije pod nazivom AmazingAppUITests i bundleID com.company.amazingappuitests.

Izvodimo instrumentalne testove u Firebase Test Lab. Dio 1: iOS projekt

Sada imamo priliku da svoje testove potpisujemo posebnim sertifikatom, ali... Procedura sastavljanja build-a za testiranje uključuje sklapanje same aplikacije i sastavljanje test runnera. Shodno tome, suočeni smo sa problemom potpisivanja dva ID-a paketa sa jednim provizijskim profilom. Srećom, postoji jednostavno i elegantno rješenje - Wildcard App ID. Ponavljamo proceduru za kreiranje novog ID-a aplikacije, ali umjesto Eksplicitnog ID-a aplikacije, odaberite Wildcard ID aplikacije kao na snimku ekrana.

Izvodimo instrumentalne testove u Firebase Test Lab. Dio 1: iOS projekt

U ovom trenutku smo završili rad sa developer.apple.com, ali nećemo minimizirati prozor pretraživača. Idemo na Stranica za dokumentaciju Fastlane i pročitajte o uslužnom programu Match od korice do korice.

Pažljivi čitatelj je primijetio da će nam za korištenje ovog uslužnog programa biti potrebno privatno spremište i račun s pristupom Apple Developer Programu i Githubu. Kreiramo (ako odjednom toga nema) račun forme [email zaštićen], smislite jaku lozinku, registrirajte je na developer.apple.com i imenujte je za administratora projekta. Zatim dajemo nalogu pristup github repozitoriju vaše kompanije i kreiramo novo privatno spremište s imenom kao što je AmazingAppMatch.

3. Postavljanje Fastlane-a i uslužnog programa za utakmicu

Otvorite terminal, idite u fasciklu sa projektom i inicijalizirajte fastlane kao što je naznačeno u službeni priručnik. Nakon unosa komande

$ fastlane init

Od vas će biti zatraženo da odaberete dostupne konfiguracije korištenja. Odaberite četvrtu opciju - ručno podešavanje projekta.

Izvodimo instrumentalne testove u Firebase Test Lab. Dio 1: iOS projekt

Projekat ima novi direktorij fastlane, koji sadrži dvije datoteke - Appfile i Fastfile. Ukratko, pohranjujemo servisne podatke u Appfile, a poslove pišemo u Fastfile, koji se nazivaju trake u Fastlane terminologiji. Preporučujem da pročitate zvaničnu dokumentaciju: puta, два.

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 - spremište, račun, lozinku, itd.

Važno je da se: Kada prvi put pokrenete uslužni program za podudaranje, od vas će se tražiti da unesete lozinku za dešifriranje spremišta. Veoma je važno da sačuvamo ovu lozinku;

Nova datoteka se pojavila u fascikli fastlane - 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

Popunjavamo ga upravo na ovaj način ako želimo koristiti match u budućnosti za potpisivanje build-ova za prikaz u Crashlytics i/ili AppStore-u, odnosno za potpisivanje bundle ID-a vaše aplikacije.

Ali, kao što se sjećamo, kreirali smo poseban Wildcard ID za potpisivanje probne verzije. Stoga, otvorite Fastfile i uđite u novu traku:

lane :testing_build_for_firebase do

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

end

Sačuvajte i uđite u terminal

fastlane testing_build_for_firebase

i vidimo kako je fastlane kreirao novi certifikat i stavio ga u spremište. Odlično!

Otvorite XCode. Sada imamo neophodan profil obezbeđivanja obrasca Match Development com.company.*, koji mora biti naveden u odeljku Profil provizije za ciljeve AmazingApp i AmazingAppUITests.

Izvodimo instrumentalne testove u Firebase Test Lab. Dio 1: iOS projekt

Ostaje dodati traku za testove sastavljanja. Idemo na spremište projekat dodataka za fastlane koji olakšava postavljanje izvoza u Firebase Test Lab i slijedite upute.

Kopirajmo i zalijepimo iz originalnog primjera tako da naš lane testing_build_for_firebase 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 puta, два.

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. Šta je sa našom ispitnom klupom? Postavljanje Firebase-a.

Pređimo na ono zbog čega je članak napisan.

Možda vaša aplikacija koristi Firebase na besplatnom planu, a možda uopće ne koristi. Apsolutno nema suštinske razlike, jer za potrebe testiranja možemo napraviti poseban projekat sa godinu dana besplatnog korišćenja (kul, zar ne?)

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

Važno je da se: U prethodnom koraku u Fastfileu u traci firebase_test_lab_ios_xctest parametar gcp_project bi trebao odgovarati imenu projekta.

Izvodimo instrumentalne testove u Firebase Test Lab. Dio 1: iOS projekt

Zadane postavke nam dosta odgovaraju.

Ne zatvarajte karticu, registrujte se pod istim nalogom u Gcloud - ovo je neophodna mjera, budući da se komunikacija sa Firebase-om odvija preko 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 probno zaduženje od 1 USD i primamo 300 USD na vaš račun. Nakon godinu dana, projekat će automatski biti prebačen na besplatni tarifni plan, tako da nema potrebe da brinete o mogućem gubitku novca.

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

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

Izvodimo instrumentalne testove u Firebase Test Lab. Dio 1: iOS projekt

Zatim idite na stavku menija “IAM i administracija” -> Servisni nalozi -> Kreiraj nalog usluge. Dajemo prava za uređivanje projekta.

Izvodimo instrumentalne testove u Firebase Test Lab. Dio 1: iOS projekt

Kreirajte API ključ u JSON formatu

Izvodimo instrumentalne testove u Firebase Test Lab. Dio 1: iOS projekt

Preuzeti JSON će nam trebati malo kasnije, ali za sada ćemo smatrati da je podešavanje Test Lab-a završeno.

5. Postavljanje CircleCI

Postavlja se razumno pitanje - šta učiniti sa lozinkama? Mehanizam varijabli okruženja naše mašine za izradu pomoći će nam da bezbedno čuvamo naše lozinke i druge osetljive podatke. U postavkama projekta CircleCI izaberite Varijable okruženja

Izvodimo instrumentalne testove u Firebase Test Lab. Dio 1: iOS projekt
I postavite sljedeće varijable:

  • ključ: GOOGLE_APPLICATION_CREDENTIALS
    vrijednost: sadržaj json datoteke ključa naloga usluge gcloud
  • ključ: MATCH_PASSWORD
    vrijednost: lozinka za dešifriranje github spremišta s certifikatima
  • ključ: FASTLANE_PASSWORD
    vrijednost: Lozinka naloga infrastrukture Apple Developer Portala

Mi spremamo promjene, kreiramo PR i šaljemo ga našem vođi tima na pregled.

Ishodi

Kao rezultat ovih jednostavnih manipulacija, dobili smo dobar, stabilan radni stalak sa mogućnošću snimanja videa na ekranu 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 će biti posvećen korak po korak postavljanju Firebase Test Lab-a za Android projekat.

izvor: www.habr.com

Dodajte komentar