Műszeres teszteket futtatunk a Firebase tesztlaborban. 1. rész: iOS projekt

Műszeres teszteket futtatunk a Firebase tesztlaborban. 1. rész: iOS projekt

A nevem Dmitrij, tesztelőként dolgozom a cégnél MEL Tudomány. Nemrég fejeztem be egy viszonylag friss szolgáltatással foglalkozni Firebase tesztlabor – nevezetesen iOS alkalmazások műszeres tesztelésével az XCUITest natív tesztelési keretrendszer használatával.

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.

Műszeres teszteket futtatunk a Firebase tesztlaborban. 1. rész: iOS projekt

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

Műszeres teszteket futtatunk a Firebase tesztlaborban. 1. rész: iOS projekt

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ó.

Műszeres teszteket futtatunk a Firebase tesztlaborban. 1. rész: iOS projekt

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.

Műszeres teszteket futtatunk a Firebase tesztlaborban. 1. rész: iOS projekt

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.

Műszeres teszteket futtatunk a Firebase tesztlaborban. 1. rész: iOS projekt

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 Fastlane dokumentációs oldal és borítótól borítóig olvassa el a Match segédprogramot.

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 hivatalos kézikönyv. A parancs beírása után

$ 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.

Műszeres teszteket futtatunk a Firebase tesztlaborban. 1. rész: iOS projekt

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: idő, два.

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.

Műszeres teszteket futtatunk a Firebase tesztlaborban. 1. rész: iOS projekt

Marad a sáv hozzáadása az összeszerelési tesztekhez. Menjünk-hoz adattár egy plugin projekt a fastlane számára, amely megkönnyíti a Firebase Test Labba való exportálás beállítását és az utasítások követését.

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 idő два.

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 Firebase konzololdal. Hozzon létre egy új projektet AmazingAppUITests néven.

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.

Műszeres teszteket futtatunk a Firebase tesztlaborban. 1. rész: iOS projekt

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 Gcloud - ez szükséges intézkedés, mivel a Firebase-szel való kommunikáció a gcloud konzol felületén történik.

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.

Műszeres teszteket futtatunk a Firebase tesztlaborban. 1. rész: iOS projekt

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.

Műszeres teszteket futtatunk a Firebase tesztlaborban. 1. rész: iOS projekt

Hozzon létre egy API-kulcsot JSON formátumban

Műszeres teszteket futtatunk a Firebase tesztlaborban. 1. rész: iOS projekt

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

Műszeres teszteket futtatunk a Firebase tesztlaborban. 1. rész: iOS projekt
É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

Hozzászólás