„Firebase Test Lab“ atliekame instrumentinius bandymus. 1 dalis: iOS projektas

„Firebase Test Lab“ atliekame instrumentinius bandymus. 1 dalis: iOS projektas

Mano vardas Dmitrijus, įmonėje dirbu testuotoju MEL mokslas. Visai neseniai baigiau nagrinėti palyginti neseniai sukurtą funkciją „Firebase“ bandymų laboratorija – būtent su instrumentiniu iOS programų testavimu naudojant vietinę testavimo sistemą XCUITest.

Prieš tai jau buvau išbandęs „Firebase Test Lab for Android“ ir viskas labai patiko, todėl nusprendžiau pabandyti sutalpinti projekto „iOS“ testavimo infrastruktūrą. Teko daug ieškoti Google ir ne viskas pavyko iš pirmo karto, todėl nusprendžiau parašyti mokomąjį straipsnį tiems, kam vis dar sunku.

Taigi, jei turite „iOS“ projekto vartotojo sąsajos testus, jau šiandien galite pabandyti juos paleisti tikruose įrenginiuose, kuriuos maloniai teikia „Good Corporation“. Besidomintiems, kviečiame į katę.

Pasakojime nusprendžiau remtis kai kuriais pradiniais duomenimis – privačia „GitHub“ saugykla ir „CircleCI“ kūrimo sistema. Programos pavadinimas yra AmazingApp, bundleID yra com.company.amazingapp. Šiuos duomenis pateikiu nedelsiant, kad sumažinčiau vėlesnę painiavą.

Jei tam tikrus sprendimus savo projekte įgyvendinote kitaip, pasidalykite patirtimi komentaruose.

1. Patys testai

Sukurkite naują projekto šaką vartotojo sąsajos testams:

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

Atidarykime projektą „XCode“ ir sukurkime naują taikinį su vartotojo sąsajos testais [XCode -> File -> New -> Target -> iOS Testing Bundle], suteikdami jam savaime suprantamą pavadinimą AmazingAppUITests.

„Firebase Test Lab“ atliekame instrumentinius bandymus. 1 dalis: iOS projektas

Eikite į sukurto tikslo skyrių „Kūrimo etapai“ ir patikrinkite, ar nėra tikslinių priklausomybių – „AmazingApp“, kompiliavimo šaltiniuose – AmazingAppUITests.swift.

Gera praktika yra atskirti skirtingas kūrimo parinktis į atskiras schemas. Sukuriame savo vartotojo sąsajos testų schemą [XCode -> Product -> Scheme -> New Scheme] ir suteikiame jai tą patį pavadinimą: AmazingAppUITests.

Sukurtos schemos kūrimas turi apimti pagrindinės programos tikslą – AmazingApp ir Target UI testus – AmazingAppUITests – žr. ekrano kopiją

„Firebase Test Lab“ atliekame instrumentinius bandymus. 1 dalis: iOS projektas

Tada sukuriame naują vartotojo sąsajos testų kūrimo konfigūraciją. „XCode“ spustelėkite projekto failą ir eikite į informacijos skyrių. Spustelėkite „+“ ir sukurkite naują konfigūraciją, pavyzdžiui, XCtest. Mums to prireiks ateityje, kad nešoktume su tamburinu, kai kalbama apie kodo pasirašymą.

„Firebase Test Lab“ atliekame instrumentinius bandymus. 1 dalis: iOS projektas

Jūsų projekte yra mažiausiai trys tikslai: pagrindinė programa, vienetų testai (juk jie egzistuoja, tiesa?) ir mūsų sukurti Target UI testai.

Eikite į „Target AmazingApp“, skirtuką „Kūrimo nustatymai“, skyrių „Kodo pasirašymo tapatybė“. Norėdami konfigūruoti XCtest, pasirinkite iOS Developer. Skiltyje Kodo pasirašymo stilius pasirinkite Rankinis. Aprūpinimo profilio dar nesukūrėme, bet prie jo tikrai grįšime šiek tiek vėliau.

„Target AmazingAppUITests“ darome tą patį, bet stulpelyje „Produktų rinkinio identifikatorius“ įrašome com.company.amazingappuitests.

2. Projekto nustatymas Apple Developer programoje

Eikite į Apple Developer Program puslapį, eikite į skiltį Sertifikatai, identifikatoriai ir profiliai, tada į elemento Identifiers stulpelį Programos ID. Sukurkite naują programos ID, pavadintą AmazingAppUITests ir bundleID com.company.amazingappuitests.

„Firebase Test Lab“ atliekame instrumentinius bandymus. 1 dalis: iOS projektas

Dabar turime galimybę savo testus pasirašyti su atskiru sertifikatu, bet... Konstrukcijos surinkimo testavimui procedūra apima pačios programos surinkimą ir bandomojo bėgiko surinkimą. Atitinkamai, susiduriame su dviejų paketo ID pasirašymo vienu aprūpinimo profiliu problema. Laimei, yra paprastas ir elegantiškas sprendimas – „Wildcard App ID“. Kartojame naujo programos ID kūrimo procedūrą, bet vietoj aiškaus programos ID pasirinkite pakaitos simbolio programos ID, kaip parodyta ekrano kopijoje.

„Firebase Test Lab“ atliekame instrumentinius bandymus. 1 dalis: iOS projektas

Šiuo metu baigėme darbą su developer.apple.com, bet nesumažinsime naršyklės lango. Eime Fastlane dokumentacijos svetainė ir skaitykite apie Match įrankį nuo viršelio iki viršelio.

Dėmesingas skaitytojas pastebėjo, kad norint naudotis šia programa, mums reikės privačios saugyklos ir paskyros, turinčios prieigą prie „Apple Developer Program“ ir „Github“. Sukuriame (jei staiga tokio dalyko nėra) formos paskyrą [apsaugotas el. paštu], sugalvokite stiprų slaptažodį, užregistruokite jį adresu developer.apple.com ir paskirkite projekto administratoriumi. Tada suteikiame paskyrai prieigą prie jūsų įmonės „github“ saugyklos ir sukuriame naują privačią saugyklą tokiu pavadinimu kaip „AmazingAppMatch“.

3. Fastlane ir rungtynių programos nustatymas

Atidarykite terminalą, eikite į aplanką su projektu ir inicijuokite greitąją juostą, kaip nurodyta oficialus vadovas. Įvedus komandą

$ fastlane init

Būsite paraginti pasirinkti galimas naudojimo konfigūracijas. Pasirinkite ketvirtą parinktį – rankinis projekto nustatymas.

„Firebase Test Lab“ atliekame instrumentinius bandymus. 1 dalis: iOS projektas

Projektas turi naują „fastlane“ katalogą, kuriame yra du failai – „Appfile“ ir „Fastfile“. Trumpai tariant, paslaugų duomenis saugome „Appfile“, o užduotis rašome „Fastfile“, vadinamomis juostomis Fastlane terminologijoje. Rekomenduoju perskaityti oficialią dokumentaciją: laikas, два.

Atidarykite „Appfile“ savo mėgstamoje teksto rengyklėje ir perkelkite ją į šią formą:

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

Grįžtame į terminalą ir pagal oficialų vadovą pradedame konfigūruoti atitiktį.

$ fastlane match init
$ fastlane match development

Tada įveskite prašomus duomenis - saugyklą, paskyrą, slaptažodį ir kt.

Svarbu: Kai pirmą kartą paleisite atitikties programą, jūsų bus paprašyta įvesti slaptažodį, kad iššifruotumėte saugyklą. Labai svarbu išsaugoti šį slaptažodį, jo mums prireiks nustatant CI serverį!

Fastlane aplanke atsirado naujas failas – Matchfile. Atidarykite jį savo mėgstamoje teksto rengyklėje ir parodykite taip:

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

Pildome būtent taip, jei ateityje norime naudoti atitiktį, kad pasirašytų kūrimus, kad jie būtų rodomi „Crashlytics“ ir (arba) „AppStore“, ty pasirašyti jūsų programos paketo ID.

Tačiau, kaip prisimename, sukūrėme specialų pakaitos simbolio ID, kad pasirašytume bandomąją versiją. Todėl atidarykite Fastfile ir įveskite naują juostą:

lane :testing_build_for_firebase do

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

end

Išsaugokite ir įveskite terminalą

fastlane testing_build_for_firebase

ir matome, kaip fastlane sukūrė naują sertifikatą ir įdėjo jį į saugyklą. Puiku!

Atidarykite XCode. Dabar turime būtiną „Match Development com.company.*“ formos aprūpinimo profilį, kuris turi būti nurodytas „AmazingApp“ ir „AmazingAppUITests“ tikslų skyriuje „Provisioning profile“.

„Firebase Test Lab“ atliekame instrumentinius bandymus. 1 dalis: iOS projektas

Belieka pridėti juostą surinkimo bandymams. Eime saugykla „Fastlane“ papildinio projektas, leidžiantis lengviau nustatyti eksportavimą į „Firebase Test Lab“ ir vadovautis instrukcijomis.

Nukopijuokime ir įklijuokime iš pirminio pavyzdžio, kad mūsų juostos testing_build_for_firebase atrodytų taip:


 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

Norėdami gauti išsamios informacijos apie greitosios juostos nustatymą CircleCI, rekomenduoju perskaityti oficialią dokumentaciją kartus два.

Nepamirškite pridėti naujos užduoties į mūsų 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. O kaip mūsų bandymų stende? „Firebase“ nustatymas.

Pereikime prie to, kam buvo parašytas straipsnis.

Galbūt jūsų programa naudoja „Firebase“ pagal nemokamą planą arba iš viso nenaudoja. Esminio skirtumo visiškai nėra, nes testavimo poreikiams galime sukurti atskirą projektą su nemokamo naudojimo metais (puiku, tiesa?)

Prisijungiame prie savo infrastruktūros paskyros (ar bet kurios kitos, nesvarbu) ir einame į „Firebase“ pulto puslapis. Sukurkite naują projektą pavadinimu AmazingAppUITests.

Svarbu: Ankstesniame veiksme Fastfile juostoje firebase_test_lab_ios_xctest parametras gcp_project turi atitikti projekto pavadinimą.

„Firebase Test Lab“ atliekame instrumentinius bandymus. 1 dalis: iOS projektas

Numatytieji nustatymai mums tinka gana gerai.

Neuždarykite skirtuko, užsiregistruokite toje pačioje paskyroje Gdebesis - tai būtina priemonė, nes ryšys su „Firebase“ vyksta naudojant „gcloud“ konsolės sąsają.

„Google“ metams skiria 300 USD, o tai, atliekant automatinius testus, prilygsta metams nemokamo naudojimosi paslauga. Įvedame jūsų mokėjimo informaciją, laukiame bandomojo 1 USD debeto ir gauname 300 USD į jūsų sąskaitą. Po metų projektas bus automatiškai perkeltas į nemokamą tarifų planą, todėl nereikės nerimauti dėl galimo pinigų praradimo.

Grįžkime prie skirtuko su „Firebase“ projektu ir perkelkime jį į „Blaze“ tarifų planą – dabar turime už ką mokėti, jei limitas bus viršytas.

„gcloud“ sąsajoje pasirinkite mūsų „Firebase“ projektą, pasirinkite pagrindinį meniu elementą „Katalogas“ ir pridėkite „Cloud Testing“ API ir „Cloud Tools Result“ API.

„Firebase Test Lab“ atliekame instrumentinius bandymus. 1 dalis: iOS projektas

Tada eikite į meniu punktą „IAM ir administravimas“ -> Paslaugų abonementai -> Sukurti paslaugos paskyrą. Suteikiame teisę redaguoti projektą.

„Firebase Test Lab“ atliekame instrumentinius bandymus. 1 dalis: iOS projektas

Sukurkite API raktą JSON formatu

„Firebase Test Lab“ atliekame instrumentinius bandymus. 1 dalis: iOS projektas

Atsisiųsto JSON mums prireiks šiek tiek vėliau, tačiau kol kas testavimo laboratorijos sąranką laikysime baigta.

5. CircleCI nustatymas

Kyla pagrįstas klausimas – ką daryti su slaptažodžiais? Mūsų kūrimo mašinos aplinkos kintamasis mechanizmas padės saugiai saugoti slaptažodžius ir kitus slaptus duomenis. „CircleCI“ projekto nustatymuose pasirinkite Aplinkos kintamieji

„Firebase Test Lab“ atliekame instrumentinius bandymus. 1 dalis: iOS projektas
Ir nustatykite šiuos kintamuosius:

  • raktas: GOOGLE_APPLICATION_CREDENTIALS
    reikšmė: gcloud paslaugos paskyros rakto json failo turinys
  • raktas: MATCH_PASSWORD
    reikšmė: slaptažodis, skirtas iššifruoti github saugyklą su sertifikatais
  • raktas: FASTLANE_PASSWORD
    reikšmė: Apple Developer Portal infrastruktūros paskyros slaptažodis

Išsaugome pakeitimus, sukuriame PR ir siunčiame jį mūsų komandos vadovui peržiūrėti.

rezultatai

Dėl šių paprastų manipuliacijų gavome gerą, stabilų darbinį stovą su galimybe testavimo metu įrašyti vaizdo įrašą įrenginio ekrane. Bandymo pavyzdyje nurodžiau „iPhone X“ įrenginio modelį, tačiau ūkyje pateikiamas gausus pasirinkimas iš įvairių modelių ir „iOS“ versijų derinio.

Antroji dalis bus skirta nuosekliam „Firebase“ testavimo laboratorijos, skirtos „Android“ projektui, sąrankai.

Šaltinis: www.habr.com

Добавить комментарий