Vykonávame inštrumentálne testy vo Firebase Test Lab. Časť 1: Projekt iOS

Vykonávame inštrumentálne testy vo Firebase Test Lab. Časť 1: Projekt iOS

Volám sa Dmitry, pracujem ako tester vo firme Veda MEL. Pomerne nedávno som dokončil prácu s relatívne nedávnou funkciou z testovacie laboratórium firebase — konkrétne s inštrumentálnym testovaním iOS aplikácií pomocou natívneho testovacieho rámca XCUITest.

Predtým som už vyskúšal Firebase Test Lab pre Android a naozaj sa mi všetko páčilo, a tak som sa rozhodol, že skúsim postaviť na rovnakú úroveň testovaciu infraštruktúru iOS projektu. Musel som veľa googliť a nie všetko mi vyšlo na prvý raz, tak som sa rozhodol napísať návodový článok pre tých, ktorí ešte stále bojujú.

Ak teda máte testy používateľského rozhrania na projekte iOS, môžete si ich už dnes vyskúšať spustiť na skutočných zariadeniach, ktoré láskavo poskytuje spoločnosť Good Corporation. Pre záujemcov vitajte v kat.

V príbehu som sa rozhodol stavať na niektorých počiatočných dátach – súkromnom úložisku na GitHub a zostavovacom systéme CircleCI. Názov aplikácie je AmazingApp, bundleID je com.company.amazingapp. Tieto údaje uvádzam okamžite, aby som znížil následný zmätok.

Ak ste niektoré riešenia vo svojom projekte implementovali inak, podeľte sa o svoje skúsenosti v komentároch.

1. Samotné testy

Vytvorte novú vetvu projektu pre testy používateľského rozhrania:

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

Otvorme projekt v XCode a vytvorte nový cieľ pomocou testov používateľského rozhrania [XCode -> File -> New -> Target -> iOS Testing Bundle], ktorý mu dá samovysvetľujúci názov AmazingAppUITests.

Vykonávame inštrumentálne testy vo Firebase Test Lab. Časť 1: Projekt iOS

Prejdite do časti Build Phases vytvoreného cieľa a skontrolujte prítomnosť Target Dependencies - AmazingApp, v kompilačných zdrojoch - AmazingAppUITests.swift.

Osvedčeným postupom je oddeliť rôzne možnosti zostavenia do samostatných schém. Vytvoríme schému pre naše testy používateľského rozhrania [XCode -> Produkt -> Schéma -> Nová schéma] a dáme jej rovnaký názov: AmazingAppUITests.

Zostava vytvorenej schémy musí obsahovať Cieľ hlavnej aplikácie - AmazingApp a Target UI testy - AmazingAppUITests - pozri screenshot

Vykonávame inštrumentálne testy vo Firebase Test Lab. Časť 1: Projekt iOS

Ďalej vytvoríme novú konfiguráciu zostavy pre testy používateľského rozhrania. V XCode kliknite na súbor projektu a prejdite do sekcie Informácie. Kliknite na „+“ a vytvorte novú konfiguráciu, napríklad XCtest. V budúcnosti to budeme potrebovať, aby sme sa vyhli tancu s tamburínou pri podpisovaní kódu.

Vykonávame inštrumentálne testy vo Firebase Test Lab. Časť 1: Projekt iOS

Vo vašom projekte sú aspoň tri ciele: hlavná aplikácia, testy jednotiek (napokon existujú, však?) a testy cieľového používateľského rozhrania, ktoré sme vytvorili.

Prejdite do časti Target AmazingApp, karta Nastavenia zostavy, časť Identita podpisovania kódu. Pre konfiguráciu XCtest vyberte iOS Developer. V časti Štýl podpisovania kódu vyberte možnosť Manuálne. Provizorný profil sme zatiaľ nevygenerovali, ale určite sa k nemu vrátime o niečo neskôr.

Pre Target AmazingAppUITests robíme to isté, ale do stĺpca Product Bundle Identifier zadáme com.company.amazingappuitests.

2. Nastavenie projektu v programe Apple Developer Program

Prejdite na stránku Apple Developer Program, prejdite do sekcie Certifikáty, identifikátory a profily a potom do stĺpca App ID v položke Identifikátory. Vytvorte nové ID aplikácie s názvom AmazingAppUITests a bundleID com.company.amazingappuitests.

Vykonávame inštrumentálne testy vo Firebase Test Lab. Časť 1: Projekt iOS

Teraz máme možnosť podpísať naše testy samostatným certifikátom, ale... Postup zostavenia zostavy na testovanie zahŕňa zostavenie samotnej aplikácie a zostavenie testovacieho zariadenia. V súlade s tým čelíme problému podpísania dvoch ID zväzkov s jedným profilom poskytovania. Našťastie existuje jednoduché a elegantné riešenie – Wildcard App ID. Zopakujeme postup vytvorenia nového ID aplikácie, ale namiesto Explicit App ID vyberte Wildcard App ID ako na snímke obrazovky.

Vykonávame inštrumentálne testy vo Firebase Test Lab. Časť 1: Projekt iOS

V tomto bode sme prácu s developer.apple.com ukončili, ale nebudeme minimalizovať okno prehliadača. Poďme do Stránka dokumentácie Fastlane a prečítajte si o pomôcke Match od začiatku do konca.

Pozorný čitateľ si všimol, že na používanie tohto nástroja budeme potrebovať súkromné ​​úložisko a účet s prístupom k programu Apple Developer Program aj Github. Vytvoríme (ak zrazu nič také neexistuje) účet formulára [chránené e-mailom], vymyslite si silné heslo, zaregistrujte ho na developer.apple.com a vymenujte ho za správcu projektu. Ďalej dáme účtu prístup k úložisku github vašej spoločnosti a vytvoríme nové súkromné ​​úložisko s názvom ako AmazingAppMatch.

3. Nastavenie Fastlane a utility match

Otvorte terminál, prejdite do priečinka s projektom a inicializujte fastlane, ako je uvedené v oficiálny manuál. Po zadaní príkazu

$ fastlane init

Zobrazí sa výzva na výber dostupných konfigurácií použitia. Vyberte štvrtú možnosť – manuálne nastavenie projektu.

Vykonávame inštrumentálne testy vo Firebase Test Lab. Časť 1: Projekt iOS

Projekt má nový adresár fastlane, ktorý obsahuje dva súbory – Appfile a Fastfile. Stručne povedané, ukladáme servisné dáta v Appfile a zapisujeme úlohy do Fastfile, ktoré sa v terminológii Fastlane nazývajú pruhy. Odporúčam prečítať si oficiálnu dokumentáciu: čas, два.

Otvorte Appfile vo svojom obľúbenom textovom editore a preneste ho do nasledujúceho tvaru:

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

Vraciame sa k terminálu a podľa oficiálneho manuálu začíname konfigurovať match.

$ fastlane match init
$ fastlane match development

Ďalej zadajte požadované údaje - úložisko, účet, heslo atď.

Dôležité: Keď prvýkrát spustíte utilitu match, budete požiadaní o zadanie hesla na dešifrovanie úložiska. Toto heslo je veľmi dôležité uložiť, budeme ho potrebovať pri nastavovaní CI servera!

V priečinku fastlane sa objavil nový súbor - Matchfile. Otvorte ho vo svojom obľúbenom textovom editore a zobrazte ho takto:

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

Presne takto ho vypĺňame, ak chceme v budúcnosti použiť match na podpisovanie zostáv na uverejnenie v Crashlytics a/alebo AppStore, teda na podpísanie ID balíka vašej aplikácie.

Ale, ako si pamätáme, vytvorili sme špeciálne Wildcard ID na podpísanie testovacej zostavy. Preto otvorte Fastfile a zadajte nový jazdný pruh:

lane :testing_build_for_firebase do

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

end

Uložte a zadajte do terminálu

fastlane testing_build_for_firebase

a vidíme, ako fastlane vytvoril nový certifikát a vložil ho do úložiska. Skvelé!

Otvorte XCode. Teraz máme potrebný profil poskytovania formulára Match Development com.company.*, ktorý musí byť špecifikovaný v sekcii Provisioning profile pre ciele AmazingApp a AmazingAppUITests.

Vykonávame inštrumentálne testy vo Firebase Test Lab. Časť 1: Projekt iOS

Zostáva pridať pruh pre montážne testy. Poďme do Úložisko projekt doplnku pre fastlane, ktorý uľahčuje nastavenie exportu do Firebase Test Lab a postupujte podľa pokynov.

Skopírujme a prilepme z pôvodného príkladu, aby náš lane testing_build_for_firebase nakoniec vyzeral takto:


 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

Pre kompletné informácie o nastavení fastlane v CircleCI odporúčam prečítať si oficiálnu dokumentáciu čas два.

Nezabudnite pridať novú úlohu do nášho súboru 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. A čo naša testovacia lavica? Nastavenie Firebase.

Poďme k tomu, na čo bol článok napísaný.

Možno, že vaša aplikácia používa Firebase v rámci bezplatného plánu, alebo možno vôbec. Neexistuje absolútne žiadny zásadný rozdiel, pretože pre potreby testovania môžeme vytvoriť samostatný projekt s rokom bezplatného používania (cool, nie?)

Prihlásime sa do nášho účtu infraštruktúry (alebo akéhokoľvek iného, ​​na tom nezáleží) a prejdeme na Stránka konzoly Firebase. Vytvorte nový projekt s názvom AmazingAppUITests.

Dôležité: V predchádzajúcom kroku v súbore Fastfile v pruhu firebase_test_lab_ios_xctest by sa parameter gcp_project mal zhodovať s názvom projektu.

Vykonávame inštrumentálne testy vo Firebase Test Lab. Časť 1: Projekt iOS

Predvolené nastavenia nám celkom vyhovujú.

Nezatvárajte kartu, zaregistrujte sa pod rovnakým účtom v Gcloud - toto je nevyhnutné opatrenie, keďže komunikácia s Firebase prebieha pomocou rozhrania konzoly gcloud.

Google dáva 300 dolárov na rok, čo v kontexte vykonávania autotestov zodpovedá ročnému bezplatnému využívaniu služby. Zadáme vaše platobné údaje, počkáme na skúšobný debet vo výške 1 USD a na váš účet dostaneme 300 USD. Po roku sa projekt automaticky prenesie do bezplatného tarifného plánu, takže sa netreba obávať prípadnej straty peňazí.

Vráťme sa na záložku s projektom Firebase a prenesme ho do tarifného plánu Blaze – teraz máme z čoho platiť, ak bude limit prekročený.

V rozhraní gcloud vyberte náš projekt Firebase, vyberte položku hlavnej ponuky „Directory“ a pridajte rozhrania Cloud Testing API a Cloud Tools Result API.

Vykonávame inštrumentálne testy vo Firebase Test Lab. Časť 1: Projekt iOS

Potom prejdite na položku ponuky „IAM a správa“ -> Servisné účty -> Vytvoriť servisný účet. Udeľujeme práva na úpravu projektu.

Vykonávame inštrumentálne testy vo Firebase Test Lab. Časť 1: Projekt iOS

Vytvorte kľúč API vo formáte JSON

Vykonávame inštrumentálne testy vo Firebase Test Lab. Časť 1: Projekt iOS

Stiahnutý JSON budeme potrebovať o niečo neskôr, ale zatiaľ budeme považovať nastavenie Test Lab za dokončené.

5. Nastavenie CircleCI

Vzniká rozumná otázka - čo robiť s heslami? Mechanizmus premennej prostredia nášho zostavovacieho stroja nám pomôže bezpečne ukladať naše heslá a ďalšie citlivé údaje. V nastaveniach projektu CircleCI vyberte položku Premenné prostredia

Vykonávame inštrumentálne testy vo Firebase Test Lab. Časť 1: Projekt iOS
A nastavte nasledujúce premenné:

  • kľúč: GOOGLE_APPLICATION_CREDENTIALS
    hodnota: obsah súboru json kľúča účtu služby gcloud
  • kľúč: MATCH_PASSWORD
    hodnota: heslo na dešifrovanie úložiska github s certifikátmi
  • kľúč: FASTLANE_PASSWORD
    hodnota: Heslo účtu infraštruktúry portálu Apple Developer Portal

Zmeny uložíme, vytvoríme PR a pošleme ho vedúcemu tímu na posúdenie.

Výsledky

V dôsledku týchto jednoduchých manipulácií sme v čase testovania dostali dobrý, stabilný pracovný stojan so schopnosťou nahrávať video na obrazovke zariadenia. V testovacom príklade som špecifikoval model zariadenia iPhone X, no farma poskytuje bohatý výber z kombinácie rôznych modelov a verzií iOS.

Druhá časť bude venovaná krok za krokom nastavenia Firebase Test Lab pre projekt Android.

Zdroj: hab.com

Pridať komentár