Korraldame Firebase'i testlaboris instrumentaalteste. 1. osa: iOS-i projekt

Korraldame Firebase'i testlaboris instrumentaalteste. 1. osa: iOS-i projekt

Minu nimi on Dmitri, töötan ettevõttes testijana MEL teadus. Üsna hiljuti lõpetasin tegelemise suhteliselt hiljutise funktsiooniga Firebase'i testlabor — nimelt iOS-i rakenduste instrumentaalse testimisega, kasutades natiivset testimisraamistikku XCUITest.

Enne seda olin juba proovinud Firebase Test Lab for Android ja kõik meeldis väga, nii et otsustasin proovida projekti iOS-i testimise infrastruktuuri samale alusele panna. Pidin palju guugeldama ja kõik ei õnnestunud esimesel korral, seega otsustasin kirjutada õpetusartikli neile, kes ikka veel hädas on.

Seega, kui teil on iOS-i projektis kasutajaliidese testid, võite juba täna proovida neid reaalsetes seadmetes käivitada, mida pakub Good Corporation. Huvilised tere tulemast kassi.

Loos otsustasin tugineda mõningatele algandmetele – GitHubi privaatsele hoidlale ja CircleCI ehitussüsteemile. Rakenduse nimi on AmazingApp, bundleID on com.company.amazingapp. Esitan need andmed kohe, et vähendada hilisemat segadust.

Kui rakendasite oma projektis teatud lahendusi teisiti, jagage oma kogemusi kommentaarides.

1. Testid ise

Looge kasutajaliidese testide jaoks uus projektiharu:

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

Avame projekti XCode'is ja loome kasutajaliidese testidega uue sihtmärgi [XCode -> File -> New -> Target -> iOS Testing Bundle], andes sellele iseenesestmõistetava nime AmazingAppUITests.

Korraldame Firebase'i testlaboris instrumentaalteste. 1. osa: iOS-i projekt

Minge loodud sihtmärgi jaotisesse Ehitamisetapid ja kontrollige jaotises Compile Sources - AmazingAppUITests.swift sihtsõltuvuste olemasolu – AmazingApp.

Hea tava on eraldada erinevad ehitusvalikud eraldi skeemideks. Loome oma kasutajaliidese testide jaoks skeemi [XCode -> Product -> Scheme -> New Scheme] ja anname sellele sama nime: AmazingAppUITests.

Loodud skeemi konstruktsioon peab sisaldama põhirakenduse sihtmärki – AmazingApp ja Target UI testid – AmazingAppUITests – vaata ekraanipilti

Korraldame Firebase'i testlaboris instrumentaalteste. 1. osa: iOS-i projekt

Järgmisena loome kasutajaliidese testide jaoks uue ehituskonfiguratsiooni. Klõpsake XCode'is projekti failil ja minge jaotisse Teave. Klõpsake "+" ja looge uus konfiguratsioon, näiteks XCtest. Meil on seda tulevikus vaja, et koodi allkirjastamisel parmupilliga tantsimist vältida.

Korraldame Firebase'i testlaboris instrumentaalteste. 1. osa: iOS-i projekt

Teie projektis on vähemalt kolm sihtmärki: põhirakendus, ühikutestid (need on ju olemas, eks?) ja meie loodud Target UI testid.

Minge jaotisse Target AmazingApp, vahekaardi Järjestuse sätted, jaotise Koodi allkirjastamise identiteet. XCtesti konfiguratsiooni jaoks valige iOS Developer. Jaotises Koodi allkirjastamise stiil valige Käsitsi. Me ei ole veel loonud ettevalmistusprofiili, kuid tuleme selle juurde kindlasti veidi hiljem tagasi.

Target AmazingAppUITesti puhul teeme sama, kuid veergu Product Bundle Identifier sisestame com.company.amazingappuitests.

2. Projekti seadistamine Apple'i arendajaprogrammis

Minge Apple'i arendajaprogrammi lehele, minge jaotisesse Sertifikaadid, identifikaatorid ja profiilid ning seejärel üksuse Identifikaatorid veergu Rakenduse ID-d. Looge uus rakenduse ID nimega AmazingAppUITests ja bundleID com.company.amazingappuitests.

Korraldame Firebase'i testlaboris instrumentaalteste. 1. osa: iOS-i projekt

Nüüd on meil võimalus allkirjastada oma testid eraldi sertifikaadiga, kuid... Testimiseks buildi kokkupanemise protseduur hõlmab rakenduse enda kokkupanemist ja testijooksja kokkupanemist. Sellest tulenevalt seisame silmitsi kahe komplekti ID allkirjastamise probleemiga ühe varustamisprofiiliga. Õnneks on olemas lihtne ja elegantne lahendus – Wildcard App ID. Kordame uue rakenduse ID loomise protseduuri, kuid rakenduse selgesõnalise ID asemel valige metapildil oleva rakenduse ID asemel metamärk.

Korraldame Firebase'i testlaboris instrumentaalteste. 1. osa: iOS-i projekt

Praegu oleme saidiga developer.apple.com töö lõpetanud, kuid me ei minimeeri brauseriakent. Lähme juurde Fastlane'i dokumentatsiooni sait ja lugege utiliidi Match kohta kaanest kaaneni.

Tähelepanelik lugeja märkas, et selle utiliidi kasutamiseks vajame privaatset hoidlat ja kontot, millel on juurdepääs nii Apple'i arendajaprogrammile kui ka Githubile. Loome (kui äkki sellist asja pole) vormi konto [meiliga kaitstud], leidke tugev parool, registreerige see saidil developer.apple.com ja määrake see projekti administraatoriks. Järgmisena anname kontole juurdepääsu teie ettevõtte githubi hoidlale ja loome uue privaatse hoidla nimega AmazingAppMatch.

3. Fastlane'i ja mänguutiliidi seadistamine

Avage terminal, minge projektiga kausta ja lähtestage fastlane, nagu näidatud ametlik käsiraamat. Pärast käsu sisestamist

$ fastlane init

Teil palutakse valida saadaolevad kasutuskonfiguratsioonid. Valige neljas valik - projekti käsitsi seadistamine.

Korraldame Firebase'i testlaboris instrumentaalteste. 1. osa: iOS-i projekt

Projektil on uus kataloog fastlane, mis sisaldab kahte faili – Appfile ja Fastfile. Lühidalt öeldes salvestame teenuseandmed Appfile'i ja kirjutame töid Fastfile'i, mida Fastlane'i terminoloogias nimetatakse radadeks. Soovitan lugeda ametlikku dokumentatsiooni: aeg, два.

Avage oma lemmiktekstiredaktoris Appfile ja viige see järgmisele vormile:

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

Naaseme terminali ja vastavalt ametlikule juhendile hakkame vastet konfigureerima.

$ fastlane match init
$ fastlane match development

Järgmisena sisestage nõutud andmed - hoidla, konto, parool jne.

NB! Match-utiliidi esmakordsel käivitamisel palutakse teil hoidla dekrüpteerimiseks sisestada parool. See parool on väga oluline, me vajame seda CI-serveri seadistamisel!

Fastlane'i kausta on ilmunud uus fail - Matchfile. Avage see oma lemmiktekstiredaktoris ja kuvage see järgmiselt:

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

Täidame selle täpselt sel viisil, kui tahame tulevikus kasutada vastet Crashlyticsis ja/või AppStore'is kuvamiseks mõeldud järge allkirjastamiseks, st teie rakenduse komplekti ID allkirjastamiseks.

Kuid nagu mäletame, lõime testehituse allkirjastamiseks spetsiaalse metamärgi ID. Seetõttu avage Fastfile ja sisestage uus rada:

lane :testing_build_for_firebase do

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

end

Salvestage ja sisestage terminali

fastlane testing_build_for_firebase

ja näeme, kuidas fastlane lõi uue sertifikaadi ja pani selle hoidlasse. Suurepärane!

Avage XCode. Nüüd on meil vormil Match Development com.company.* vajalik ettevalmistusprofiil, mis tuleb sihtmärkide AmazingApp ja AmazingAppUITests jaoks määrata jaotises Provisitsiooniprofiil.

Korraldame Firebase'i testlaboris instrumentaalteste. 1. osa: iOS-i projekt

Jääb üle lisada sõidurada monteerimiskatsete jaoks. Lähme juurde hoidla fastlane'i pistikprogrammi projekt, mis hõlbustab Firebase'i testlaborisse eksportimise seadistamist ja juhiste järgimist.

Kopeerime ja kleepime algsest näitest, nii et meie radade testimine_build_for_firebase näeks välja järgmine:


 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

Täieliku teabe saamiseks CircleCI-s fastlane seadistamise kohta soovitan lugeda ametlikku dokumentatsiooni korda два.

Ärge unustage lisada failile config.yml uut ülesannet:

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. Kuidas on lood meie katsestendiga? Firebase'i seadistamine.

Läheme selle juurde, milleks artikkel kirjutati.

Võib-olla kasutab teie rakendus Firebase'i tasuta paketi alusel või üldse mitte. Põhimõttelist vahet pole absoluutselt, sest testimisvajaduste jaoks saame luua eraldi projekti aasta tasuta kasutusega (lahe, eks?)

Logime sisse oma infrastruktuuri kontole (või mõnele muule, see pole oluline) ja läheme aadressile Firebase'i konsooli leht. Looge uus projekt nimega AmazingAppUITests.

NB! Fastfile in lane firebase_test_lab_ios_xctest eelmises etapis peaks parameeter gcp_project ühtima projekti nimega.

Korraldame Firebase'i testlaboris instrumentaalteste. 1. osa: iOS-i projekt

Vaikesätted sobivad meile päris hästi.

Ärge sulgege vahekaarti, registreeruge sama konto all Gpilv - see on vajalik meede, kuna Firebase'iga suhtlemine toimub gcloudi konsooli liidese abil.

Google annab aastaks 300 dollarit, mis automaattestide tegemise kontekstis võrdub aasta tasuta teenuse kasutamisega. Sisestame teie makseteabe, ootame 1 dollari suurust testdeebetit ja saame teie kontole 300 dollarit. Aasta pärast läheb projekt automaatselt üle tasuta tariifiplaani, seega pole vaja karta võimaliku rahakao pärast.

Pöördume Firebase'i projektiga vahekaardile tagasi ja viime selle üle Blaze'i tariifiplaani - nüüd on meil midagi maksta, kui limiit ületatakse.

Valige gcloudi liideses meie Firebase'i projekt, valige peamenüüst "Kataloog" ja lisage Cloud Testing API ja Cloud Tools Result API.

Korraldame Firebase'i testlaboris instrumentaalteste. 1. osa: iOS-i projekt

Seejärel minge menüüsse "IAM ja haldus" -> Teenusekontod -> Loo teenusekonto. Anname õigused projekti toimetamiseks.

Korraldame Firebase'i testlaboris instrumentaalteste. 1. osa: iOS-i projekt

Looge API-võti JSON-vormingus

Korraldame Firebase'i testlaboris instrumentaalteste. 1. osa: iOS-i projekt

Allalaaditud JSON-i vajame veidi hiljem, kuid praegu loeme testlabori seadistamise lõpetatuks.

5. CircleCI seadistamine

Tekib mõistlik küsimus – mida teha paroolidega? Meie ehitusmasina keskkonnamuutujate mehhanism aitab meil turvaliselt salvestada paroole ja muid tundlikke andmeid. CircleCI projekti sätetes valige Keskkonnamuutujad

Korraldame Firebase'i testlaboris instrumentaalteste. 1. osa: iOS-i projekt
Ja seadistage järgmised muutujad:

  • võti: GOOGLE_APPLICATION_CREDENTIALS
    väärtus: gcloudi teenusekonto võtme json-faili sisu
  • võti: MATCH_PASSWORD
    väärtus: parool Githubi hoidla sertifikaatidega dekrüpteerimiseks
  • võti: FASTLANE_PASSWORD
    väärtus: Apple'i arendajaportaali infrastruktuuri konto parool

Salvestame muudatused, loome suhtekorralduse ja saadame selle ülevaatamiseks meie meeskonna juhile.

Tulemused

Nende lihtsate manipulatsioonide tulemusena saime hea, stabiilse töötava aluse, millel on võimalus testimise ajal seadme ekraanile videot salvestada. Testnäites täpsustasin iPhone X seadme mudelit, kuid farm pakub rikkalikku valikut erinevate mudelite ja iOS-i versioonide kombinatsioonist.

Teine osa on pühendatud Firebase'i testlabori samm-sammult seadistamisele Androidi projekti jaoks.

Allikas: www.habr.com

Lisa kommentaar