A nevem Dmitrij, tesztelőként dolgozom a cégnél
Ezt megelőzően már kipróbáltam a Firebase Test Lab for Androidot, és minden nagyon tetszett, ezért úgy döntöttem, hogy megpróbálom a projekt iOS-teszt infrastruktúráját is hasonló alapokra helyezni. Sokat kellett gugliznom, és nem minden sikerült elsőre, ezért úgy döntöttem, írok egy oktató cikket azoknak, akik még mindig küzdenek.
Tehát, ha UI tesztjei vannak egy iOS-projekten, már ma kipróbálhatja valós eszközökön való futtatását, a Good Corporation jóvoltából. Az érdeklődőket szeretettel várjuk a cat.
A történetben úgy döntöttem, hogy néhány kezdeti adatra építek – egy privát adattárra a GitHubon és a CircleCI build rendszerre. Az alkalmazás neve AmazingApp, a bundleID pedig com.company.amazingapp. Ezeket az adatokat azonnal bemutatom a későbbi félreértések csökkentése érdekében.
Ha bizonyos megoldásokat másként valósított meg projektjében, ossza meg tapasztalatait a megjegyzésekben.
1. Maguk a tesztek
Hozzon létre egy új projektágat a felhasználói felület teszteléséhez:
$ git checkout develop
$ git pull
$ git checkout -b “feature/add-ui-tests”
Nyissuk meg a projektet XCode-ban, és hozzunk létre egy új Target felhasználói felület tesztekkel [XCode -> File -> New -> Target -> iOS Testing Bundle], és adjuk neki az AmazingAppUITests nevet.
Lépjen a létrehozott cél Összeállítási fázisai szakaszába, és ellenőrizze a Target Dependencies - AmazingApp meglétét a Compile Sources - AmazingAppUITests.swift oldalon.
A bevált gyakorlat az, hogy a különböző összeállítási lehetőségeket külön sémákra különítik el. Létrehozunk egy sémát a felhasználói felület tesztjeinkhez [XCode -> Product -> Scheme -> New Scheme], és ugyanazt a nevet adjuk neki: AmazingAppUITests.
A létrehozott séma összeállításának tartalmaznia kell a fő alkalmazás célját - AmazingApp és Target UI tesztek - AmazingAppUITests - lásd a képernyőképet
Ezután létrehozunk egy új összeállítási konfigurációt a felhasználói felület teszteléséhez. Az XCode-ban kattintson a projektfájlra, és lépjen az Info szakaszhoz. Kattintson a „+” gombra, és hozzon létre egy új konfigurációt, például XCtest. Erre a jövőben szükségünk lesz, hogy elkerüljük a tamburával táncolást, amikor kódaláírásról van szó.
A projektben legalább három Target található: a fő alkalmazás, az egységtesztek (végül is léteznek, igaz?) és az általunk létrehozott Target UI tesztek.
Lépjen a Target AmazingApp, Build Settings lapon, a Code Signing Identity szakaszba. Az XCtest konfigurációhoz válassza az iOS Developer lehetőséget. A Kód-aláírási stílus részben válassza a Kézi lehetőséget. Még nem hoztunk létre hozzáférési profilt, de egy kicsit később biztosan visszatérünk rá.
A Target AmazingAppUITests esetében ugyanezt tesszük, de a Product Bundle Identifier oszlopban beírjuk a com.company.amazingappuitests címet.
2. Projekt beállítása az Apple Developer Programban
Lépjen az Apple Developer Program oldalára, lépjen a Tanúsítványok, azonosítók és profilok szakaszra, majd az Azonosítók elem App IDs oszlopára. Hozzon létre egy új alkalmazásazonosítót AmazingAppUITests és bundleID com.company.amazingappuitests néven.
Most lehetőségünk van tesztjeinket külön tanúsítvánnyal aláírni, de... A build tesztelésre való összeállításának folyamata magában foglalja magát az alkalmazást és a tesztfutó összeállítását. Ennek megfelelően azzal a problémával szembesülünk, hogy két kötegazonosítót kell aláírni egy kiépítési profillal. Szerencsére van egy egyszerű és elegáns megoldás - Wildcard App ID. Megismételjük az eljárást az új alkalmazásazonosító létrehozásához, de az Explicit App ID helyett válassza a helyettesítő alkalmazásazonosítót, mint a képernyőképen.
Ezen a ponton befejeztük a munkát a developer.apple.com webhelyen, de nem fogjuk kicsinyíteni a böngészőablakot. Menjünk-hoz
Egy figyelmes olvasó észrevette, hogy a segédprogram használatához szükségünk lesz egy privát adattárra és egy fiókra, amely hozzáférést biztosít az Apple Developer Programhoz és a Githubhoz. Elkészítjük (ha hirtelen nincs ilyen) egy beszámolót az űrlapról [e-mail védett], találjon ki egy erős jelszót, regisztrálja azt a developer.apple.com oldalon, és nevezze ki projektadminisztrátornak. Ezután hozzáférést adunk a fióknak a cége github-tárházához, és létrehozunk egy új privát tárhelyet, amelynek neve például AmazingAppMatch.
3. A Fastlane és a match segédprogram beállítása
Nyisson meg egy terminált, lépjen a projektet tartalmazó mappába, és inicializálja a fastlane-t a jelzett módon
$ fastlane init
A rendszer felkéri az elérhető használati konfigurációk kiválasztására. Válassza a negyedik lehetőséget - kézi projektbeállítás.
A projektnek van egy új fastlane könyvtára, amely két fájlt tartalmaz - Appfile és Fastfile. Dióhéjban: a szolgáltatási adatokat az Appfile-ban tároljuk, a feladatokat pedig Fastfile-ban írjuk, amit a Fastlane terminológiában sávoknak nevezünk. Javaslom a hivatalos dokumentáció elolvasását:
Nyissa meg az Appfile-t kedvenc szövegszerkesztőjében, és hozza be a következő űrlapba:
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
Visszatérünk a terminálhoz, és a hivatalos kézikönyv szerint elkezdjük a match konfigurálását.
$ fastlane match init
$ fastlane match development
Ezután adja meg a kért adatokat - adattár, fiók, jelszó stb.
Fontos: Amikor először indítja el a match segédprogramot, meg kell adnia egy jelszót a tároló visszafejtéséhez. Nagyon fontos ennek a jelszónak a mentése, szükségünk lesz rá a CI szerver beállításakor!
Egy új fájl jelent meg a fastlane mappában - Matchfile. Nyissa meg kedvenc szövegszerkesztőjében, és jelenítse meg a következőképpen:
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
Pontosan így töltjük ki, ha a matchet a jövőben a Crashlyticsben és/vagy AppStore-ban való megjelenítésre szánt buildek aláírására, azaz az alkalmazás kötegazonosítójának aláírására szeretnénk használni.
De, mint emlékszünk, létrehoztunk egy speciális helyettesítő azonosítót a teszt build aláírására. Ezért nyissa meg a Fastfile-t, és lépjen be egy új sávba:
lane :testing_build_for_firebase do
match(
type: "development",
readonly: true,
app_identifier: "com.company.*",
git_branch: "uitests" # создаем отдельный бранч для development сертификата для подписи тестовой сборки.
)
end
Mentse el és lépjen be a terminálba
fastlane testing_build_for_firebase
és látjuk, hogyan hozott létre a fastlane egy új tanúsítványt és helyezte el az adattárba. Nagy!
Nyissa meg az XCode-ot. Mostantól rendelkezésünkre áll a Match Development com.company.* űrlap szükséges kiépítési profilja, amelyet az AmazingApp és AmazingAppUITests célokhoz meg kell adni a Provisioning profile szakaszban.
Marad a sáv hozzáadása az összeszerelési tesztekhez. Menjünk-hoz
Másoljunk be az eredeti példából, hogy a lane testing_build_for_firebase így nézzen ki:
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
A CircleCI-ben a fastlane beállításával kapcsolatos teljes információkért javaslom, hogy olvassa el a hivatalos dokumentációt
Ne felejtsen el új feladatot hozzáadni a config.yml fájlhoz:
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. Mi a helyzet a tesztpadunkkal? A Firebase beállítása.
Térjünk rá arra, hogy a cikk miért íródott.
Lehet, hogy alkalmazása ingyenes előfizetéssel használja a Firebase szolgáltatást, vagy egyáltalán nem. Abszolút nincs alapvető különbség, mert tesztelési igényekre külön projektet készíthetünk egy év ingyenes használattal (menő, ugye?)
Bejelentkezünk az infrastruktúra fiókunkba (vagy bármely másba, nem számít), és megyünk a címre
Fontos: A Firebase_test_lab_ios_xctest sávban található Fastfile előző lépésében a gcp_project paraméternek meg kell egyeznie a projekt nevével.
Az alapértelmezett beállítások elég jól megfelelnek nekünk.
Ne zárja be a lapot, regisztráljon ugyanabban a fiókban
A Google 300 dollárt ad egy évre, ami az automatikus tesztek végrehajtásával összefüggésben a szolgáltatás egy év ingyenes használatának felel meg. Megadjuk fizetési adatait, megvárjuk az 1 USD próbaterhelést, és 300 USD-t kapunk számlájára. Egy év elteltével a projekt automatikusan átkerül egy ingyenes díjcsomagba, így nem kell tartani az esetleges pénzveszteségtől.
Térjünk vissza a Firebase projekt lapjára, és tegyük át a Blaze díjcsomagba – most már van mit fizetni, ha a limitet túllépjük.
A gcloud felületen válassza ki Firebase projektünket, válassza ki a „Directory” főmenüpontot, és adja hozzá a Cloud Testing API-t és a Cloud Tools Result API-t.
Ezután lépjen az „IAM és adminisztráció” -> Szolgáltatásfiókok -> Szolgáltatásfiók létrehozása menüpontra. A projekt szerkesztési jogát biztosítjuk.
Hozzon létre egy API-kulcsot JSON formátumban
Kicsit később szükségünk lesz a letöltött JSON-ra, de egyelőre befejezettnek tekintjük a Test Lab beállítását.
5. A CircleCI beállítása
Felmerül egy ésszerű kérdés - mi a teendő a jelszavakkal? Építőgépünk környezeti változó mechanizmusa segít jelszavaink és egyéb érzékeny adataink biztonságos tárolásában. A CircleCI projekt beállításainál válassza a Környezeti változók lehetőséget
És állítsa be a következő változókat:
- kulcs: GOOGLE_APPLICATION_CREDENTIALS
érték: a gcloud szolgáltatásfiókkulcs json-fájljának tartalma - kulcs: MATCH_PASSWORD
érték: jelszó a github tárhely tanúsítványokkal történő visszafejtéséhez - kulcs: FASTLANE_PASSWORD
érték: Apple Developer Portal infrastruktúra-fiók jelszava
Mentjük a változtatásokat, létrehozunk egy PR-t, és elküldjük csapatunk vezetőjének felülvizsgálatra.
Eredményei
Ezen egyszerű manipulációk eredményeként egy jó, stabil működő állványt kaptunk, amely a tesztelés időpontjában videót is rögzíthet a készülék képernyőjén. A tesztpéldában megadtam az iPhone X eszközmodelljét, de a farm gazdag választékot kínál különböző modellek és iOS-verziók kombinációjából.
A második rész a Firebase Test Lab lépésről lépésre történő beállításának lesz szentelve egy Android-projekthez.
Forrás: will.com