Provádíme instrumentální testy ve Firebase Test Lab. Část 1: Projekt iOS

Provádíme instrumentální testy ve Firebase Test Lab. Část 1: Projekt iOS

Jmenuji se Dmitry a pracuji jako tester ve firmě Věda MEL. Poměrně nedávno jsem dokončil práci s relativně nedávnou funkcí z Firebase Test Lab — konkrétně s instrumentálním testováním iOS aplikací pomocí nativního testovacího rámce XCUITest.

Předtím jsem již vyzkoušel Firebase Test Lab pro Android a opravdu se mi vše líbilo, takže jsem se rozhodl zkusit postavit testovací infrastrukturu iOS projektu na stejnou úroveň. Musel jsem hodně googlovat a ne všechno se povedlo napoprvé, tak jsem se rozhodl napsat výukový článek pro ty, kteří se stále trápí.

Pokud tedy máte testy uživatelského rozhraní na projektu iOS, můžete si je již dnes vyzkoušet spustit na skutečných zařízeních, laskavě poskytnutých společností Good Corporation. Pro zájemce vítejte na kat.

V příběhu jsem se rozhodl stavět na některých počátečních datech – soukromém repozitáři na GitHubu a sestavovacím systému CircleCI. Název aplikace je AmazingApp, bundleID je com.company.amazingapp. Tyto údaje uvádím okamžitě, abych snížil následný zmatek.

Pokud jste některá řešení ve svém projektu implementovali jinak, podělte se o své zkušenosti v komentářích.

1. Samotné testy

Vytvořte novou větev projektu pro testy uživatelského rozhraní:

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

Otevřeme projekt v XCode a vytvoříme nový cíl s testy uživatelského rozhraní [XCode -> File -> New -> Target -> iOS Testing Bundle] a dáme mu samovysvětlující název AmazingAppUITests.

Provádíme instrumentální testy ve Firebase Test Lab. Část 1: Projekt iOS

Přejděte do sekce Build Phases vytvořeného cíle a zkontrolujte přítomnost Target Dependencies - AmazingApp, v Compile Sources - AmazingAppUITests.swift.

Osvědčeným postupem je oddělit různé možnosti sestavení do samostatných schémat. Vytvoříme schéma pro naše testy uživatelského rozhraní [XCode -> Produkt -> Schéma -> Nové schéma] a dáme mu stejný název: AmazingAppUITests.

Sestavení vytvořeného schématu musí zahrnovat Cíl hlavní aplikace - AmazingApp a Target UI testy - AmazingAppUITests - viz snímek obrazovky

Provádíme instrumentální testy ve Firebase Test Lab. Část 1: Projekt iOS

Dále vytvoříme novou konfiguraci sestavení pro testy uživatelského rozhraní. V XCode klikněte na soubor projektu a přejděte do sekce Info. Klikněte na „+“ a vytvořte novou konfiguraci, například XCtest. V budoucnu to budeme potřebovat, abychom se vyhnuli tanci s tamburínou, pokud jde o podepisování kódu.

Provádíme instrumentální testy ve Firebase Test Lab. Část 1: Projekt iOS

Ve vašem projektu jsou alespoň tři cíle: hlavní aplikace, testy jednotek (koneckonců existují, že?) a testy cílového uživatelského rozhraní, které jsme vytvořili.

Přejděte do části Target AmazingApp, karta Nastavení sestavení, část Identita podepisování kódu. Pro konfiguraci XCtest vyberte iOS Developer. V části Styl podepisování kódu vyberte Ruční. Provizorní profil jsme zatím nevygenerovali, ale určitě se k němu vrátíme o něco později.

Pro Target AmazingAppUITests děláme totéž, ale do sloupce Product Bundle Identifier zadáme com.company.amazingappuitests.

2. Nastavení projektu v programu Apple Developer Program

Přejděte na stránku Apple Developer Program, přejděte do sekce Certifikáty, identifikátory a profily a poté do sloupce App ID v položce Identifikátory. Vytvořte nové ID aplikace s názvem AmazingAppUITests a bundleID com.company.amazingappuitests.

Provádíme instrumentální testy ve Firebase Test Lab. Část 1: Projekt iOS

Nyní máme možnost podepsat naše testy samostatným certifikátem, ale... Postup při sestavení sestavení pro testování zahrnuje sestavení samotné aplikace a sestavení testovacího běhu. V souladu s tím se potýkáme s problémem podepisování dvou ID svazků s jedním zřizovacím profilem. Naštěstí existuje jednoduché a elegantní řešení – Wildcard App ID. Opakujeme postup pro vytvoření nového ID aplikace, ale místo Explicit App ID vyberte Wildcard App ID jako na snímku obrazovky.

Provádíme instrumentální testy ve Firebase Test Lab. Část 1: Projekt iOS

V tuto chvíli jsme skončili s prací s developer.apple.com, ale nebudeme minimalizovat okno prohlížeče. Pojďme Stránka s dokumentací Fastlane a přečtěte si o nástroji Match od začátku do konce.

Pozorný čtenář si všiml, že k použití tohoto nástroje budeme potřebovat soukromé úložiště a účet s přístupem jak do Apple Developer Program, tak do Github. Vytvoříme (pokud najednou nic takového neexistuje) účet formuláře [chráněno e-mailem], vymyslete silné heslo, zaregistrujte jej na developer.apple.com a jmenujte jej správcem projektu. Dále dáme účtu přístup k úložišti github vaší společnosti a vytvoříme nové soukromé úložiště s názvem jako AmazingAppMatch.

3. Nastavení Fastlane a nástroje match

Otevřete terminál, přejděte do složky s projektem a inicializujte fastlane, jak je uvedeno v oficiální manuál. Po zadání příkazu

$ fastlane init

Budete vyzváni k výběru dostupných konfigurací použití. Vyberte čtvrtou možnost – ruční nastavení projektu.

Provádíme instrumentální testy ve Firebase Test Lab. Část 1: Projekt iOS

Projekt má nový adresář fastlane, který obsahuje dva soubory – Appfile a Fastfile. Stručně řečeno, data služeb ukládáme do Appfile a zapisujeme úlohy do Fastfile, nazývané v terminologii Fastlane pruhy. Doporučuji přečíst si oficiální dokumentaci: čas, два.

Otevřete Appfile ve svém oblíbeném textovém editoru a převeďte jej do následující podoby:

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

Vrátíme se k terminálu a podle oficiálního manuálu začneme konfigurovat match.

$ fastlane match init
$ fastlane match development

Dále zadejte požadované údaje - úložiště, účet, heslo atd.

Je důležité, aby se: Při prvním spuštění nástroje match budete požádáni o zadání hesla pro dešifrování úložiště. Toto heslo je velmi důležité uložit, budeme ho potřebovat při nastavování CI serveru!

Ve složce fastlane se objevil nový soubor - Matchfile. Otevřete jej ve svém oblíbeném textovém editoru a zobrazte jej 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

Přesně tímto způsobem jej vyplníme, pokud chceme v budoucnu používat match k podepisování sestavení pro zobrazení v Crashlytics a/nebo AppStore, tedy k podepisování ID balíčku vaší aplikace.

Ale jak si pamatujeme, vytvořili jsme speciální Wildcard ID k podepsání testovacího sestavení. Proto otevřete Fastfile a zadejte nový jízdní pruh:

lane :testing_build_for_firebase do

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

end

Uložte a zadejte do terminálu

fastlane testing_build_for_firebase

a vidíme, jak fastlane vytvořil nový certifikát a vložil ho do úložiště. Skvělý!

Otevřete XCode. Nyní máme potřebný zřizovací profil formuláře Match Development com.company.*, který musí být specifikován v sekci Provisioning profile pro cíle AmazingApp a AmazingAppUITests.

Provádíme instrumentální testy ve Firebase Test Lab. Část 1: Projekt iOS

Zbývá přidat pruh pro montážní zkoušky. Pojďme úložiště projekt pluginu pro fastlane, který usnadňuje nastavení exportu do Firebase Test Lab a postupujte podle pokynů.

Pojďme zkopírovat a vložit z původního příkladu tak, aby naše lane testing_build_for_firebase nakonec vypadala 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

Pro kompletní informace o nastavení fastlane v CircleCI doporučuji přečíst si oficiální dokumentaci časy, два.

Nezapomeňte přidat nový úkol do našeho 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 co naše testovací stolice? Nastavení Firebase.

Pojďme k tomu, k čemu byl článek napsán.

Možná vaše aplikace používá Firebase v bezplatném plánu, nebo možná vůbec. Neexistuje absolutně žádný zásadní rozdíl, protože pro potřeby testování můžeme vytvořit samostatný projekt s rokem bezplatného používání (cool, že?)

Přihlásíme se ke svému účtu infrastruktury (nebo k jakémukoli jinému, na tom nezáleží) a přejdeme na Stránka konzoly Firebase. Vytvořte nový projekt s názvem AmazingAppUITests.

Je důležité, aby se: V předchozím kroku ve Fastfile v pruhu firebase_test_lab_ios_xctest by měl parametr gcp_project odpovídat názvu projektu.

Provádíme instrumentální testy ve Firebase Test Lab. Část 1: Projekt iOS

Výchozí nastavení nám docela vyhovuje.

Kartu nezavírejte, zaregistrujte se pod stejným účtem v Gcloud - toto je nezbytné opatření, protože komunikace s Firebase probíhá pomocí rozhraní konzoly gcloud.

Google dává 300 dolarů na rok, což v kontextu provádění autotestů odpovídá jednomu roku bezplatného používání služby. Zadáme vaše platební údaje, počkáme na zkušební debet ve výši 1 USD a obdržíme 300 USD na váš účet. Po roce se projekt automaticky převede na bezplatný tarif, takže se nemusíte bát případné ztráty peněz.

Vraťme se na záložku s projektem Firebase a přenesme jej do tarifu Blaze – nyní máme z čeho platit při překročení limitu.

V rozhraní gcloud vyberte náš projekt Firebase, vyberte položku hlavní nabídky „Directory“ a přidejte rozhraní Cloud Testing API a Cloud Tools Result API.

Provádíme instrumentální testy ve Firebase Test Lab. Část 1: Projekt iOS

Poté přejděte na položku nabídky „IAM a administrace“ -> Servisní účty -> Vytvořit servisní účet. Udělujeme práva na úpravu projektu.

Provádíme instrumentální testy ve Firebase Test Lab. Část 1: Projekt iOS

Vytvořte klíč API ve formátu JSON

Provádíme instrumentální testy ve Firebase Test Lab. Část 1: Projekt iOS

Stažený JSON budeme potřebovat o něco později, ale prozatím budeme považovat nastavení Test Lab za dokončené.

5. Nastavení CircleCI

Nabízí se rozumná otázka – co dělat s hesly? Mechanismus proměnné prostředí našeho sestavovacího stroje nám pomůže bezpečně ukládat naše hesla a další citlivá data. V nastavení projektu CircleCI vyberte Proměnné prostředí

Provádíme instrumentální testy ve Firebase Test Lab. Část 1: Projekt iOS
A nastavte následující proměnné:

  • klíč: GOOGLE_APPLICATION_CREDENTIALS
    hodnota: obsah souboru json klíče účtu služby gcloud
  • klíč: MATCH_PASSWORD
    hodnota: heslo pro dešifrování úložiště github pomocí certifikátů
  • klíč: FASTLANE_PASSWORD
    hodnota: Heslo účtu infrastruktury Apple Developer Portal

Změny uložíme, vytvoříme PR a zašleme je vedoucímu našeho týmu ke kontrole.

Výsledky

V důsledku těchto jednoduchých manipulací jsme v době testování dostali dobrý, stabilní pracovní stojan se schopností nahrávat video na obrazovce zařízení. V testovacím příkladu jsem specifikoval model zařízení iPhone X, ale farma poskytuje bohatý výběr z kombinace různých modelů a verzí iOS.

Druhá část bude věnována krok za krokem nastavení Firebase Test Lab pro projekt Android.

Zdroj: www.habr.com

Přidat komentář