Po запускаем тестирования инструментов в Firebase Test Lab. Çështja 1: projekti iOS

Po запускаем тестирования инструментов в Firebase Test Lab. Çështja 1: projekti iOS

Më quajnë Dmitri, punoj si testues në kompaninë MEL Science. Kohët e fundit përfundova për të kuptuar një funksion relativisht të ri nga Firebase Test Lab — specifikisht, për testimin instrumental të aplikacioneve iOS duke përdorur kornizën native të testimit XCUITest.

Më parë, kam provuar Firebase Test Lab për Android dhe më ka pëlqyer shumë, kështu që vendosa të provoj të vendos infrastrukturën testuese të projektit iOS në të njëjtat baza. Duhej të kërkoja shumë në Google dhe nuk gjithçka funksionoi që në herë të parë, prandaj vendosa të shkruaj një artikull-tutor për ata që ende do ta përballen me këtë.

Pra, nëse keni teste UI në projektin tuaj iOS, mund të përpiqeni ta lançoni atë sot në pajisje reale, të dhuruara nga Korporata e Mirësisë. Të interesuarit — mirë se vini poshtë.

Në rrëfimin, vendosa të bazohesha në disa të dhëna fillestare — një depo private në GitHub dhe një sistem ndërtimi CircleCI. Emri i aplikacionit — AmazingApp, bundleID — com.company.amazingapp. I paraqes këto të dhëna menjëherë, për të reduktuar konfuzionin më vonë.

Nëse keni zbatuar ndonjë nga zgjidhjet në projektin tuaj ndryshe — ndani përvojën tuaj në komente.

1. Testet vetë

Krijojmë një degë të re për projektin për testet UI:

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

Do ta hapim projektin në XCode dhe do të krijojmë një Qëllim (Target) të ri me testet UI [XCode -> File -> New -> Target -> iOS Testing Bundle], i japim një emër të qartë: AmazingAppUITests.

Po запускаем тестирования инструментов в Firebase Test Lab. Çështja 1: projekti iOS

Kalojmë në seksionin Build Phases të Target-it të krijuar dhe kontrollojmë praninë e Target Dependencies — AmazingApp, në Compile Sources — AmazingAppUITests.swift.

Një praktikë e mirë është të ndash variante të ndryshme ndërtimi në Schema të veçanta. Krijojmë një skemë për testet tona UI [XCode -> Product -> Scheme -> New Scheme] dhe i japim të njëjtin emër: AmazingAppUITests.

Build-i i skemës së krijuar duhet të përfshijë Target-in e aplikacionit kryesor — AmazingApp dhe Target-in e testeve UI — AmazingAppUITests — shihim screenshot-in.

Po запускаем тестирования инструментов в Firebase Test Lab. Çështja 1: projekti iOS

Më pas, krijojmë një konfigurim të ri ndërtimi për testet UI. Në XCode, klikoni mbi skedarin e projektit, kaloni në seksionin Info. Klikoni në “+” dhe krijoni një konfigurim të ri, për shembull XCtest. Kjo do të na nevojitet më vonë, për të shmangur telashet kur të arrijmë në nënshkrimin e kodit.

Po запускаем тестирования инструментов в Firebase Test Lab. Çështja 1: projekti iOS

Në projektin tuaj ka të paktën tre Target-e: aplikacioni kryesor, testet unike (sepse ato janë, apo jo?) dhe Target-in e testeve UI të krijuar prej nesh.

Hyni në Target AmazingApp, rubrika Build Settings, seksioni Code Signing Identity. Për konfigurimin e XCtest, zgjidheni iOS Developer. Në seksionin Code Signing Style zgjidhni Manual. Profilin e servisimit ende nuk e kemi gjeneruar, por do të kthehemi te ai më vonë.

Për Target AmazingAppUITests, bëjmë të njëjtën gjë, por në fushën Product Bundle Identifier shkruajmë com.company.amazingappuitests.

2. Konfigurimi i projektit në Apple Developer Program

Hyni në faqen e Apple Developer Program, kaloni në seksionin Certificates, Identifiers & Profiles dhe pastaj në fushën App IDs të pikës Identifiers. Krijoni një App ID të ri me emrin AmazingAppUITests dhe bundleID com.company.amazingappuitests.

Po запускаем тестирования инструментов в Firebase Test Lab. Çështja 1: projekti iOS

Tani kemi mundësinë për të nënshkruar testet tona me një certifikatë të ndarë, por… Proçesi i ndërtimit të build për testim përfshin ndërtimin e vetë aplikacionit dhe ndërtimin e tester runner. Prandaj, përballohemi me problemin e nënshkrimit të dy bundle ID me një provisioning profile. Fatmirësisht, ekziston një zgjidhje e thjeshtë dhe elegante — Wildcard App ID. Përsëritni procedurën e krijimit të një App ID të ri, por në vend të Explicit App ID zgjidhni Wildcard App ID siç është në skrin.

Po запускаем тестирования инструментов в Firebase Test Lab. Çështja 1: projekti iOS

Në këtë fazë puna me developer.apple.com përfundon, por nuk do ta mbyllim dritaren e shfletuesit. Shkojmë në faqen me dokumentacionin e Fastlane dhe lexojmë për utilitarin Match nga fillimi deri në fund.

Lexuesi vëmendshëm ka vënë re se për të përdorur këtë utilitar na nevojitet një depo private dhe një llogari që ka akses si në Apple Developer Program ashtu edhe në Github. Krijojmë (nëse nuk ka) një llogari si InfrastructureAccount@your.company.domain, duke marrë një fjalëkalim të fortë, e regjistrojmë atë në developer.apple.com dhe e emërojmë si administrator të projektit. Më pas, i japim llogarisë akses në depotin github të kompanisë suaj dhe krijojmë një depo të re private me emrin AmazingAppMatch.

3. Konfigurimi i Fastlane dhe utilitarit match

Hapni terminalin, kaloni në folderin e projektit dhe inicializoni fastlane siç është e shënuar në udhëzimin zyrtar. Pas futjes së komandës

$ fastlane init

do të ofrohet të zgjidhni konfigurimet e disponueshme të përdorimit. Zgjidhni opsionin e katërt — konfigurimi manual i projektit.

Po запускаем тестирования инструментов в Firebase Test Lab. Çështja 1: projekti iOS

Në projekt ka një direktori të re fastlane, në të cilën ndodhen dy skeduj — Appfile dhe Fastfile. Në pak fjalë — në Appfile ruajmë të dhënat shërbyese, ndërsa në Fastfile shkruajmë punët, të cilat në terminologjinë Fastlane quhen lanes. Rekomandoj të lexoni dokumentacionin zyrtar: një, dy.

Hapni Appfile në redaktorin tuaj të preferuar të tekstit dhe e sillni atë në pamjen e mëposhtme:

app_identifier "com.company.amazingapp"       # Bundle ID
apple_dev_portal_id "infrastructureaccount@your.company.domain"  # Llogaria infrastrukturore e krijuar që ka të drejtë të editojë projektin iOS në Apple Developer Program.
team_id "LSDY3IFJAY9" # ID e ekipit tuaj në Portalin e Zhvilluesit

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

$ fastlane match init
$ fastlane match development

Më pas shkruajmë të dhënat e kërkuara — repositorin, llogarinë, fjalëkalimin, etj.

E rëndësishme: në fillim të ekzekutimit, utilitari match do të kërkojë të shkruani fjalëkalimin për dekriptimin e repositorit. Është shumë e rëndësishme të ruani këtë fjalëkalim, në fazën e konfigurimit të serverit CI do të na nevojitet!

Në dosjen fastlane është krijuar një file i ri — Matchfile. E hapim në redaktorin tonë të preferuar dhe e çojmë në këtë formë:

git_url("https://github.com/YourCompany/AmazingAppMatch") # Rrepositori privat i krijuar për ruajtjen e certifikatave dhe profileve.
type("development") # Lloji default, mund të jetë: appstore, adhoc, enterprise ose development
app_identifier("com.company.amazingapp")
username("infrastructureaccount@your.company.domain") # Emri i përdoruesit të llogarisë infrastrukturore në Portalin e Zhvilluesit të Apple

E plotësojmë në këtë mënyrë, nëse duam ta përdorim më vonë match për nënshkrimin e build-eve për publikimin në Crashlytics dhe\/apo AppStore, pra për nënshkrimin e bundle ID të aplikacionit tuaj.

Por, siç e mbajmë mend, për nënshkrimin e build-it të testit, kemi krijuar një Wildcard ID të veçantë. Prandaj, hapim Fastfile dhe shkruajmë lane të re:

lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"  # krijojmë një degë të veçantë për certifikatën e zhvillimit për nënshkrimin e build-it të testit.
    )

end

E ruajmë, shkruajmë në terminal

fastlane testing_build_for_firebase

dhe shohim si fastlane krijoi një certifikatë të re dhe e vendosi në repositor. Shkëlqyer!

Hapim XCode. Tani kemi profilin e duhur të provizionimit nga lloji Match Development com.company.*, që duhet të tregojmë në seksionin e Profilit të Provizionimit për objektivat AmazingApp dhe AmazingAppUITests.

Po запускаем тестирования инструментов в Firebase Test Lab. Çështja 1: projekti iOS

Mbetej të shkuajmë lane për ndërtimin e testeve. Shkoni në repozitori projektin e plugin-it për fastlane, që lehtëson konfigurimin e eksportit në Firebase Test Lab dhe ndjekim udhëzimet.

Kopjopastojmë nga shembulli fillestar, për të bërë që lane ynë testing_build_for_firebase të duket 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 (k ćemo se vratiti na ovu liniju kasnije)
      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 informacione të plota mbi konfigurimin e fastlane në CircleCI, rekomandoj të lexoni dokumentacionin zyrtar një herë, dy.

Mos harrojmë të shtojmë detyrën tonë të re në 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     # AZHURNON KËSHILLAT
     - run:
         name: instaloni gcloud-sdk   # në makinen mac duhet të instalohet gcloud
         command: |
           ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"  /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  # nisni lane ndërtimi dhe dërgimi në firebase

4. Po si është me testimin tonë? Le të konfiguroni Firebase.

Të fillojmë, në të vërtetë, me atë për të cilën është shkruar artikulli.

Mund të jetë që aplikacioni juaj përdor Firebase në planin falas, mund të mos e përdorë fare. Nuk ka asnjë ndryshim të rëndësishëm, pasi për qëllime testimi mund të krijojmë një projekt të veçantë me një vit përdorimi falas (e shkëlqyer, apo jo?)

Kyçemi në llogarinë tonë infrastrukturore (ose ndonjë tjetër, nuk ka rëndësi) dhe shkojmë në faqen e konsolës Firebase. Krijoni një projekt të ri me emrin AmazingAppUITests.

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

Po запускаем тестирования инструментов в Firebase Test Lab. Çështja 1: projekti iOS

Cilësimet defaut na përshtaten mjaft mirë.

Mos e mbyllni këtu, me të njëjtën llogari regjistrohuni në Gcloud — kjo është një masë e detyruar, pasi komunikimi me Firebase bëhet përmes ndërfaqes së konsolës gcloud.

Google ofron 300$ për një vit, që në kontekstin e ekzekutimit të testeve automatike është ekuivalente me një vit të përdorimit falas të shërbimit. Shkruajmë të dhënat e pagesës, presim një ngarkesë provuese prej 1$ dhe marrim 300$ në llogari. Pas një viti, projekti do të kalojë automatikisht në planin falas, kështu që nuk duhet të shqetësohemi për mundësinë e humbjes së parave.

Kthehemi në tabin e projektit Firebase dhe e kalojmë atë në planin Blaze — tani kemi çfarë të paguajmë në rast se tejkalojmë limitet.

Në ndërfaqen gcloud, zgjedhim projektin tonë Firebase, zgjedhim opsionin e menusë kryesore "Katalogu" dhe shtojmë Cloud Testing API dhe Cloud Tools Result API.

Po запускаем тестирования инструментов в Firebase Test Lab. Çështja 1: projekti iOS

Pastaj kalojmë në menunë "IAM dhe administrim" -> Llogaritë e shërbimit -> Krijo llogari shërbimi. I japim të drejta për të redaktuar projektin.

Po запускаем тестирования инструментов в Firebase Test Lab. Çështja 1: projekti iOS

Krijojmë çelësin API në format JSON

Po запускаем тестирования инструментов в Firebase Test Lab. Çështja 1: projekti iOS

JSON i shkarkuar do na nevojitet më vonë, për tani konfigurimin Test Lab do ta konsiderojmë të përfunduar.

5. Konfigurimi i CircleCI

Këtu lind pyetja e arsyeshme — çfarë të bëjmë me fjalëkalimet? Mekanizmi i variablave të mjedisit të makinës sonë të ndërtimit do na ndihmojë të ruajmë në siguri fjalëkalimet tona dhe të dhëna të tjera të ndjeshme. Në cilësimet e projektit CircleCI zgjedhim Variablat e Mjedisit

Po запускаем тестирования инструментов в Firebase Test Lab. Çështja 1: projekti iOS
Dhe krijojmë 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 dekriptimin e depozitës GitHub me certifikatat
  • çelësi: FASTLANE_PASSWORD
    vlera: fjalëkalimi i llogarisë së infrastrukturës në Apple Developer Portal

Ruajmë ndryshimet, krijojmë PR dhe e dërgojmë për review te tim lideri.

Përfundime

Si rezultat i këtyre manipulimeve të thjeshta, kemi marrë një platformë të mirë, të qëndrueshme me mundësinë për të regjistruar video në ekranin e pajisjes gjatë testimit. Në shembullin e testit kam treguar modelin e pajisjes iPhone X, por ferma ofron një zgjedhje të pasur nga kombinime të ndryshme modelesh dhe versionesh të iOS.

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

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster