Volám sa Dmitry, pracujem ako tester vo firme
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.
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
Ď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.
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.
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.
V tomto bode sme prácu s developer.apple.com ukončili, ale nebudeme minimalizovať okno prehliadača. Poďme do
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
$ fastlane init
Zobrazí sa výzva na výber dostupných konfigurácií použitia. Vyberte štvrtú možnosť – manuálne nastavenie projektu.
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:
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.
Zostáva pridať pruh pre montážne testy. Poďme do
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
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
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.
Predvolené nastavenia nám celkom vyhovujú.
Nezatvárajte kartu, zaregistrujte sa pod rovnakým účtom v
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.
Potom prejdite na položku ponuky „IAM a správa“ -> Servisné účty -> Vytvoriť servisný účet. Udeľujeme práva na úpravu projektu.
Vytvorte kľúč API vo formáte JSON
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
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