Ne kryejmë teste instrumentale në Firebase Test Lab. Pjesa 1: Projekti iOS

Ne kryejmë teste instrumentale në Firebase Test Lab. Pjesa 1: Projekti iOS

Emri im është Dmitry, unë punoj si testues në kompani Shkenca MEL. Kohët e fundit kam përfunduar duke u marrë me një veçori relativisht të fundit nga Firebase Test Lab — domethënë, me testimin instrumental të aplikacioneve iOS duke përdorur kornizën amtare të testimit XCUITest.

Para kësaj, unë kisha provuar tashmë Firebase Test Lab për Android dhe me të vërtetë më pëlqeu gjithçka, kështu që vendosa të përpiqem të vendos infrastrukturën e testit iOS të projektit në të njëjtën bazë. M'u desh të kërkoja shumë në Google dhe jo gjithçka funksionoi herën e parë, kështu që vendosa të shkruaj një artikull udhëzues për ata që janë ende në vështirësi.

Pra, nëse keni teste UI në një projekt iOS, tashmë mund të provoni t'i ekzekutoni ato në pajisje reale sot, të ofruara me mirësi nga Good Corporation. Per te interesuarit ju mirepresim ne cat.

Në histori, vendosa të ndërtoj mbi disa të dhëna fillestare - një depo private në GitHub dhe sistemin e ndërtimit të CircleCI. Emri i aplikacionit është AmazingApp, bundleID është com.company.amazingapp. Unë i paraqes këto të dhëna menjëherë për të zvogëluar konfuzionin e mëvonshëm.

Nëse keni zbatuar zgjidhje të caktuara në projektin tuaj ndryshe, ndani përvojën tuaj në komente.

1. Vetë testet

Krijo një degë të re projekti për testet e UI:

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

Le të hapim projektin në XCode dhe të krijojmë një Target të ri me testet e ndërfaqes së përdoruesit [XCode -> File -> I ri -> Target -> Paketa e testimit iOS], duke i dhënë emrin e vetëshpjegueshëm AmazingAppUITests.

Ne kryejmë teste instrumentale në Firebase Test Lab. Pjesa 1: Projekti iOS

Shkoni te seksioni Build Phases të Target-it të krijuar dhe kontrolloni për praninë e Target Dependencies - AmazingApp, në Compile Sources - AmazingAppUITests.swift.

Një praktikë e mirë është të ndani opsione të ndryshme ndërtimi në Skema të veçanta. Ne krijojmë një skemë për testet tona të ndërfaqes së përdoruesit [XCode -> Produkt -> Skema -> Skema e re] dhe i japim të njëjtin emër: AmazingAppUITests.

Ndërtimi i skemës së krijuar duhet të përfshijë objektivin e aplikacionit kryesor - AmazingApp dhe testet e ndërfaqes së synuar - AmazingAppUITests - shikoni pamjen e ekranit

Ne kryejmë teste instrumentale në Firebase Test Lab. Pjesa 1: Projekti iOS

Më pas, ne krijojmë një konfigurim të ri ndërtimi për testet e UI. Në XCode, klikoni në skedarin e projektit dhe shkoni te seksioni Info. Klikoni në "+" dhe krijoni një konfigurim të ri, për shembull XCtest. Kjo do të na duhet në të ardhmen për të shmangur kërcimin me dajre kur bëhet fjalë për nënshkrimin e kodit.

Ne kryejmë teste instrumentale në Firebase Test Lab. Pjesa 1: Projekti iOS

Ekzistojnë të paktën tre objektiva në projektin tuaj: aplikacioni kryesor, testet e njësisë (në fund të fundit, ato ekzistojnë, apo jo?) dhe testet Target UI që krijuam.

Shkoni te Target AmazingApp, skeda Build Settings, seksioni i Identitetit të nënshkrimit të kodit. Për konfigurimin XCtest, zgjidhni Zhvilluesin iOS. Në seksionin Stili i nënshkrimit të kodit, zgjidhni Manual. Ne nuk kemi krijuar ende një profil sigurimi, por patjetër do t'i kthehemi pak më vonë.

Për Target AmazingAppUITests bëjmë të njëjtën gjë, por në kolonën "Identifikuesi i paketës së produktit" futemi com.company.amazingappuitests.

2. Vendosja e një projekti në Programin e Zhvilluesve të Apple

Shkoni te faqja e Programit të Zhvilluesve të Apple, shkoni te seksioni Certifikatat, Identifikuesit dhe Profilet dhe më pas te kolona ID-të e aplikacionit të artikullit Identifikues. Krijo një ID të re aplikacioni të quajtur AmazingAppUITests dhe bundleID com.company.amazingappuitests.

Ne kryejmë teste instrumentale në Firebase Test Lab. Pjesa 1: Projekti iOS

Tani ne kemi mundësinë të nënshkruajmë testet tona me një certifikatë të veçantë, por... Procedura për montimin e një konstruksioni për testim përfshin montimin e vetë aplikacionit dhe montimin e testuesit. Prandaj, ne jemi përballur me problemin e nënshkrimit të dy ID-ve të paketave me një profil provizionimi. Për fat të mirë, ekziston një zgjidhje e thjeshtë dhe elegante - ID-ja e aplikacionit Wildcard. Ne përsërisim procedurën për krijimin e një ID të re të aplikacionit, por në vend të ID-së së aplikacionit të qartë, zgjidhni ID-në e aplikacionit Wildcard si në pamjen e ekranit.

Ne kryejmë teste instrumentale në Firebase Test Lab. Pjesa 1: Projekti iOS

Në këtë pikë, ne kemi mbaruar së punuari me developer.apple.com, por nuk do të minimizojmë dritaren e shfletuesit. Shkojmë Faqja e dokumentacionit Fastlane dhe lexoni për programin Match nga fillimi në krye.

Një lexues i vëmendshëm vuri re se për të përdorur këtë mjet do të na duhet një depo private dhe një llogari me qasje si në Programin e Zhvilluesve të Apple ashtu edhe në Github. Ne krijojmë (nëse papritmas nuk ka një gjë të tillë) një llogari të formës [email mbrojtur], krijoni një fjalëkalim të fortë, regjistrojeni atë në developer.apple.com dhe emërojeni si administrator projekti. Më pas, ne i japim llogarisë qasje në depon e github të kompanisë suaj dhe krijojmë një depo të re private me një emër si AmazingAppMatch.

3. Vendosja e programit Fastlane dhe programit të ndeshjes

Hapni një terminal, shkoni te dosja me projektin dhe inicializoni fastlane siç tregohet në manual zyrtar. Pas futjes së komandës

$ fastlane init

Do t'ju kërkohet të zgjidhni konfigurimet e disponueshme të përdorimit. Zgjidhni opsionin e katërt - konfigurimin manual të projektit.

Ne kryejmë teste instrumentale në Firebase Test Lab. Pjesa 1: Projekti iOS

Projekti ka një direktori të re fastlane, e cila përmban dy skedarë - Appfile dhe Fastfile. Me pak fjalë, ne ruajmë të dhënat e shërbimit në Appfile dhe shkruajmë punë në Fastfile, të quajtura korsi në terminologjinë Fastlane. Unë rekomandoj të lexoni dokumentacionin zyrtar: kohë, два.

Hapni skedarin e aplikacionit në redaktuesin tuaj të preferuar të tekstit dhe sillni atë në formën e mëposhtme:

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

Kthehemi në terminal dhe sipas manualit zyrtar fillojmë të konfigurojmë ndeshjen.

$ fastlane match init
$ fastlane match development

Tjetra, futni të dhënat e kërkuara - depo, llogari, fjalëkalim, etj.

Rëndësishme: Kur të nisni për herë të parë programin e ndeshjes, do t'ju kërkohet të vendosni një fjalëkalim për të deshifruar depon. Është shumë e rëndësishme ta ruani këtë fjalëkalim; do të na duhet kur të konfigurojmë serverin CI!

Një skedar i ri është shfaqur në dosjen fastlane - Matchfile. Hapeni atë në redaktuesin tuaj të preferuar të tekstit dhe shfaqeni si kjo:

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

Ne e plotësojmë pikërisht në këtë mënyrë nëse duam të përdorim përputhjen në të ardhmen për të nënshkruar ndërtime për shfaqje në Crashlytics dhe/ose AppStore, domethënë për të nënshkruar ID-në e paketës së aplikacionit tuaj.

Por, siç e kujtojmë, ne krijuam një ID të veçantë Wildcard për të nënshkruar ndërtimin e testit. Prandaj, hapni Fastfile dhe futni një korsi të re:

lane :testing_build_for_firebase do

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

end

Ruani dhe futuni në terminal

fastlane testing_build_for_firebase

dhe ne shohim se si fastlane krijoi një certifikatë të re dhe e vendosi atë në depo. E madhe!

Hapni XCode. Tani kemi profilin e nevojshëm të provizionimit të formularit Match Development com.company.*, i cili duhet të specifikohet në seksionin e profilit të sigurimit për objektivat AmazingApp dhe AmazingAppUITests.

Ne kryejmë teste instrumentale në Firebase Test Lab. Pjesa 1: Projekti iOS

Mbetet për të shtuar korsinë për montimin e testeve. Shkojmë depo një projekt shtesë për fastlane që e bën më të lehtë konfigurimin e eksportit në Firebase Test Lab dhe ndjekjen e udhëzimeve.

Le të kopjojmë-ngjitim nga shembulli origjinal në mënyrë që testimi_build_for_firebase i korsisë sonë të përfundojë kështu:


 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

Për informacion të plotë rreth konfigurimit të fastlane në CircleCI, ju rekomandoj të lexoni dokumentacionin zyrtar koha, два.

Mos harroni të shtoni një detyrë të re në config.yml tonë:

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. Po stolin tonë të provës? Konfigurimi i Firebase.

Le të zbresim se për çfarë është shkruar artikulli.

Ndoshta aplikacioni juaj përdor Firebase në një plan falas, ose ndoshta aspak. Nuk ka absolutisht asnjë ndryshim thelbësor, sepse për nevojat e testimit mund të krijojmë një projekt të veçantë me një vit përdorim falas (cool, apo jo?)

Ne hyjmë në llogarinë tonë të infrastrukturës (ose ndonjë tjetër, nuk ka rëndësi) dhe shkojmë te Faqja e konsolës së Firebase. Krijo një projekt të ri të quajtur AmazingAppUITests.

Rëndësishme: Në hapin e mëparshëm në Fastfile in lane firebase_test_lab_ios_xctest parametri gcp_project duhet të përputhet me emrin e projektit.

Ne kryejmë teste instrumentale në Firebase Test Lab. Pjesa 1: Projekti iOS

Cilësimet e paracaktuara na përshtaten mjaft mirë.

Mos e mbyllni skedën, regjistrohuni në të njëjtën llogari Gcloud - kjo është një masë e nevojshme, pasi komunikimi me Firebase ndodh duke përdorur ndërfaqen e tastierës gcloud.

Google jep 300 dollarë për një vit, që në kuadër të kryerjes së autotesteve është e barabartë me një vit përdorim falas të shërbimit. Ne futim informacionin tuaj të pagesës, presim debitimin e testit prej 1$ dhe marrim 300$ në llogarinë tuaj. Pas një viti, projekti do të transferohet automatikisht në një plan tarifor falas, kështu që nuk ka nevojë të shqetësoheni për humbjen e mundshme të parave.

Le të kthehemi te skeda me projektin Firebase dhe ta transferojmë atë në planin tarifor Blaze - tani kemi diçka për të paguar nëse tejkalohet kufiri.

Në ndërfaqen e gcloud, zgjidhni projektin tonë Firebase, zgjidhni artikullin e menusë kryesore "Directory" dhe shtoni API-në e testimit në renë kompjuterike dhe API-në e rezultateve të mjeteve të resë kompjuterike.

Ne kryejmë teste instrumentale në Firebase Test Lab. Pjesa 1: Projekti iOS

Pastaj shkoni te artikulli i menysë "IAM dhe administrimi" -> Llogaritë e shërbimit -> Krijo llogari shërbimi. Ne japim të drejta për të redaktuar projektin.

Ne kryejmë teste instrumentale në Firebase Test Lab. Pjesa 1: Projekti iOS

Krijo një çelës API në formatin JSON

Ne kryejmë teste instrumentale në Firebase Test Lab. Pjesa 1: Projekti iOS

Do të na duhet JSON-i i shkarkuar pak më vonë, por tani për tani do ta konsiderojmë të përfunduar konfigurimin e Test Lab.

5. Vendosja e CircleCI

Shtrohet një pyetje e arsyeshme - çfarë të bëjmë me fjalëkalimet? Mekanizmi i ndryshores së mjedisit të makinës sonë të ndërtimit do të na ndihmojë të ruajmë në mënyrë të sigurt fjalëkalimet tona dhe të dhëna të tjera të ndjeshme. Në cilësimet e projektit CircleCI, zgjidhni Environment Variables

Ne kryejmë teste instrumentale në Firebase Test Lab. Pjesa 1: Projekti iOS
Dhe vendosni variablat e mëposhtëm:

  • çelësi: GOOGLE_APPLICATION_CREDENTIALS
    vlera: përmbajtja e skedarit json të çelësit të llogarisë së shërbimit gcloud
  • çelësi: MATCH_PASSWORD
    vlera: fjalëkalimi për deshifrimin e depove të github me certifikata
  • çelësi: FASTLANE_PASSWORD
    vlera: Fjalëkalimi i llogarisë së infrastrukturës së portalit të zhvilluesit të Apple

Ne i ruajmë ndryshimet, krijojmë një PR dhe ia dërgojmë drejtuesit të ekipit tonë për shqyrtim.

Rezultatet e

Si rezultat i këtyre manipulimeve të thjeshta, morëm një stendë të mirë, të qëndrueshme pune me aftësinë për të regjistruar video në ekranin e pajisjes në kohën e testimit. Në shembullin e testit, unë specifikova modelin e pajisjes iPhone X, por ferma ofron një përzgjedhje të pasur nga një kombinim i modeleve të ndryshme dhe versioneve iOS.

Pjesa e dytë do t'i kushtohet konfigurimit hap pas hapi të Firebase Test Lab për një projekt Android.

Burimi: www.habr.com

Shto një koment