Nagdagan kami mga instrumental nga pagsulay sa Firebase Test Lab. Bahin 1: iOS nga proyekto

Nagdagan kami mga instrumental nga pagsulay sa Firebase Test Lab. Bahin 1: iOS nga proyekto

Ang akong ngalan mao si Dmitry, nagtrabaho ko isip usa ka tester sa kompanya Siyensya sa MEL. Bag-o lang nahuman nako ang pag-atubang sa usa ka medyo bag-o nga bahin gikan sa Firebase Test Lab - nga mao, uban ang instrumental nga pagsulay sa mga aplikasyon sa iOS gamit ang lumad nga testing framework XCUITest.

Sa wala pa kini, gisulayan na nako ang Firebase Test Lab para sa Android ug ganahan kaayo sa tanan, mao nga nakahukom ko nga sulayan nga ibutang ang imprastraktura sa pagsulay sa iOS sa proyekto sa samang footing. Kinahanglan ko nga mag-Google og daghan ug dili ang tanan nagtrabaho sa unang higayon, mao nga nakahukom ko sa pagsulat og usa ka artikulo sa pagtudlo alang niadtong kinsa naglisud gihapon.

Mao nga, kung adunay ka mga pagsulay sa UI sa usa ka proyekto sa iOS, mahimo nimong sulayan ang pagpadagan niini sa tinuud nga mga aparato karon, malulotong gihatag sa Good Corporation. Sa mga interesado, welcome sa iring.

Sa istorya, nakahukom ko nga magtukod sa pipila ka inisyal nga datos - usa ka pribadong repositoryo sa GitHub ug ang CircleCI build system. Ang ngalan sa aplikasyon kay AmazingApp, ang bundleID kay com.company.amazingapp. Gipresentar ko dayon kini nga datos aron makunhuran ang sunod nga kalibog.

Kung lahi ang imong gipatuman nga mga solusyon sa imong proyekto, ipaambit ang imong kasinatian sa mga komento.

1. Ang mga pagsulay sa ilang kaugalingon

Paghimo og bag-ong sanga sa proyekto alang sa mga pagsulay sa UI:

$ git checkout develop
$ git pull
$ git checkout -b β€œfeature/add-ui-tests”

Atong ablihan ang proyekto sa XCode ug maghimo usa ka bag-ong Target nga adunay mga pagsulay sa UI [XCode -> File -> Bag-ong -> Target -> iOS Testing Bundle], nga gihatagan kini nga nagpatin-aw sa kaugalingon nga ngalan nga AmazingAppUITests.

Nagdagan kami mga instrumental nga pagsulay sa Firebase Test Lab. Bahin 1: iOS nga proyekto

Adto sa Build Phases nga seksyon sa gibuhat nga Target ug susiha ang presensya sa Target Dependencies - AmazingApp, sa Compile Sources - AmazingAppUITests.swift.

Ang usa ka maayong praktis mao ang pagbulag sa lain-laing mga kapilian sa pagtukod ngadto sa lain nga mga Scheme. Naghimo kami usa ka laraw alang sa among mga pagsulay sa UI [XCode -> Product -> Scheme -> Bag-ong Scheme] ug hatagan kini parehas nga ngalan: AmazingAppUITests.

Ang paghimo sa gihimo nga laraw kinahanglan nga maglakip sa Target sa panguna nga aplikasyon - Mga pagsulay sa AmazingApp ug Target UI - AmazingAppUITests - tan-awa ang screenshot

Nagdagan kami mga instrumental nga pagsulay sa Firebase Test Lab. Bahin 1: iOS nga proyekto

Sunod, maghimo kami usa ka bag-ong configuration sa pagtukod alang sa mga pagsulay sa UI. Sa XCode, i-klik ang project file ug adto sa Info section. Pag-klik sa "+" ug paghimo og bag-ong configuration, pananglitan XCtest. Kinahanglan naton kini sa umaabot aron malikayan ang pagsayaw gamit ang tamburin kung bahin sa pagpirma sa code.

Nagdagan kami mga instrumental nga pagsulay sa Firebase Test Lab. Bahin 1: iOS nga proyekto

Adunay labing menos tulo ka mga Target sa imong proyekto: ang nag-unang aplikasyon, mga pagsulay sa yunit (pagkahuman, naglungtad sila, di ba?) Ug ang mga pagsulay sa Target UI nga among gihimo.

Adto sa Target AmazingApp, Build Settings tab, Code Signing Identity section. Para sa XCtest configuration, pilia ang iOS Developer. Sa seksyon sa Code Signing Style, pilia ang Manwal. Wala pa kami nakamugna og provisioning profile, apan siguradong mobalik kami niini sa ulahi.

Para sa Target AmazingAppUITests among gibuhat ang parehas, pero sa Product Bundle Identifier column among gisulod ang com.company.amazingappuitests.

2. Pag-set up og proyekto sa Apple Developer Program

Adto sa Apple Developer Program page, adto sa Sertipiko, Identifiers & Profiles nga seksyon ug dayon sa App IDs column sa Identifiers item. Paghimo ug bag-ong App ID nga gitawag ug AmazingAppUITests ug bundleID com.company.amazingappuitests.

Nagdagan kami mga instrumental nga pagsulay sa Firebase Test Lab. Bahin 1: iOS nga proyekto

Karon kami adunay oportunidad nga pirmahan ang among mga pagsulay gamit ang usa ka lahi nga sertipiko, apan ... Ang pamaagi sa pag-assemble sa usa ka pagtukod alang sa pagsulay naglakip sa pag-assemble sa aplikasyon mismo ug pag-assemble sa test runner. Tungod niini, nag-atubang kami sa problema sa pagpirma sa duha ka bundle ID nga adunay usa ka provisioning profile. Maayo na lang, adunay usa ka yano ug elegante nga solusyon - Wildcard App ID. Gisubli namo ang pamaagi sa paghimo og bag-ong App ID, apan imbes nga Explicit App ID, pilia ang Wildcard App ID sama sa screenshot.

Nagdagan kami mga instrumental nga pagsulay sa Firebase Test Lab. Bahin 1: iOS nga proyekto

Niini nga punto, nahuman na kami sa pagtrabaho uban sa developer.apple.com, apan dili namo maminusan ang bintana sa browser. Adto ta sa Site sa dokumentasyon sa Fastlane ug basaha ang bahin sa Match utility gikan sa hapin hangtod sa hapin.

Namatikdan sa usa ka matinagdanon nga magbabasa nga aron magamit kini nga utility magkinahanglan kami usa ka pribado nga repositoryo ug usa ka account nga adunay access sa Apple Developer Program ug Github. Naghimo kami (kung kalit nga wala) usa ka asoy sa porma [protektado sa email], paghimo ug lig-on nga password, irehistro kini sa developer.apple.com, ug itudlo kini isip administrador sa proyekto. Sunod, gihatagan namon ang account access sa github repository sa imong kompanya ug paghimo usa ka bag-ong pribadong repository nga adunay ngalan sama sa AmazingAppMatch.

3. Pag-set up sa Fastlane ug sa match utility

Ablihi ang usa ka terminal, adto sa folder nga adunay proyekto ug pagsugod sa fastlane ingon sa gipakita sa opisyal nga manwal. Human sa pagsulod sa sugo

$ fastlane init

Maaghat ka sa pagpili sa magamit nga mga pag-configure sa paggamit. Pilia ang ikaupat nga kapilian - manwal nga pag-setup sa proyekto.

Nagdagan kami mga instrumental nga pagsulay sa Firebase Test Lab. Bahin 1: iOS nga proyekto

Ang proyekto adunay bag-ong direktoryo nga fastlane, nga adunay duha ka mga file - Appfile ug Fastfile. Sa laktod nga pagkasulti, gitipigan namo ang datos sa serbisyo sa Appfile, ug nagsulat og mga trabaho sa Fastfile, nga gitawag ug mga lane sa terminolohiya sa Fastlane. Girekomenda nako ang pagbasa sa opisyal nga dokumentasyon: mga panahon, duha ka.

Ablihi ang Appfile sa imong paborito nga text editor ug dad-a kini sa mosunod nga porma:

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

Mibalik kami sa terminal ug sumala sa opisyal nga manwal nagsugod kami sa pag-configure sa posporo.

$ fastlane match init
$ fastlane match development

Sunod, isulud ang gihangyo nga datos - repository, account, password, ug uban pa.

Kini mao ang importante sa: Sa una nimo nga paglansad sa match utility, hangyoon ka nga mosulod sa usa ka password aron ma-decrypt ang repository. Importante kaayo nga i-save kini nga password; kinahanglan namon kini kung mag-set up sa CI server!

Usa ka bag-ong file ang nagpakita sa fastlane folder - Matchfile. Ablihi kini sa imong paborito nga text editor ug ipakita kini sama niini:

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

Among pun-an kini sa eksakto niining paagiha kon gusto namong gamiton ang posporo sa umaabot aron mapirmahan ang mga build para ipakita sa Crashlytics ug/o AppStore, nga mao, aron mapirmahan ang bundle ID sa imong aplikasyon.

Apan, sama sa among nahinumduman, naghimo kami usa ka espesyal nga Wildcard ID aron pirmahan ang pagsulay nga pagtukod. Busa, ablihi ang Fastfile ug pagsulod og bag-ong lane:

lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"  # создаСм ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Ρ€Π°Π½Ρ‡ для development сСртификата для подписи тСстовой сборки.
    )

end

Pag-save ug pagsulod sa terminal

fastlane testing_build_for_firebase

ug nakita namo kung giunsa paghimo sa fastlane ang usa ka bag-ong sertipiko ug gibutang kini sa repository. Nindot!

Ablihi ang XCode. Karon naa na miy gikinahanglan nga provisioning profile sa porma nga Match Development com.company.*, nga kinahanglang ipiho sa Provisioning profile section para sa AmazingApp ug AmazingAppUITests nga mga target.

Nagdagan kami mga instrumental nga pagsulay sa Firebase Test Lab. Bahin 1: iOS nga proyekto

Nagpabilin kini aron idugang ang lane alang sa mga pagsulay sa pag-assemble. Adto ta sa tipiganan usa ka proyekto sa plugin para sa fastlane nga nagpasayon ​​sa pag-set up sa pag-eksport sa Firebase Test Lab ug pagsunod sa mga instruksyon.

Atong kopyahon-i-paste gikan sa orihinal nga pananglitan aron ang atong lane testing_build_for_firebase mahuman nga ingon niini:


 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

Alang sa kompleto nga kasayuran bahin sa pag-set up sa fastlane sa CircleCI, girekomenda nako ang pagbasa sa opisyal nga dokumentasyon kausa, duha ka.

Ayaw kalimot sa pagdugang og bag-ong buluhaton sa among 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. Komosta ang atong test bench? Pag-set up sa Firebase.

Atong hisgotan kung para sa unsa ang artikulo gisulat.

Tingali ang imong app naggamit sa Firebase sa usa ka libre nga plano, o tingali dili gyud. Wala'y hingpit nga sukaranan nga kalainan, tungod kay alang sa mga panginahanglanon sa pagsulay makahimo kami og usa ka bulag nga proyekto nga adunay usa ka tuig nga libre nga paggamit (cool, di ba?)

Nag-log in kami sa among account sa imprastraktura (o bisan unsa pa, dili igsapayan), ug moadto sa Panid sa Firebase console. Paghimo og bag-ong proyekto nga ginganlag AmazingAppUITests.

Kini mao ang importante sa: Sa miaging lakang sa Fastfile sa lane firebase_test_lab_ios_xctest ang gcp_project parameter kinahanglang motakdo sa ngalan sa proyekto.

Nagdagan kami mga instrumental nga pagsulay sa Firebase Test Lab. Bahin 1: iOS nga proyekto

Ang mga default nga setting angayan kaayo kanamo.

Ayaw isira ang tab, magparehistro sa ilawom sa parehas nga account sa Gcloud - kini usa ka kinahanglanon nga sukod, tungod kay ang komunikasyon sa Firebase mahitabo gamit ang interface sa gcloud console.

Naghatag ang Google og $300 sa usa ka tuig, nga sa konteksto sa pagpahigayon sa mga autotest katumbas sa usa ka tuig nga libre nga paggamit sa serbisyo. Gisulod namo ang imong impormasyon sa pagbayad, maghulat sa test debit nga $1 ug makadawat og $300 sa imong account. Pagkahuman sa usa ka tuig, ang proyekto awtomatiko nga ibalhin sa usa ka libre nga plano sa taripa, busa dili kinahanglan nga mabalaka bahin sa posible nga pagkawala sa salapi.

Balikan nato ang tab nga adunay proyekto sa Firebase ug ibalhin kini sa plano sa taripa sa Blaze - karon aduna na kitay bayronon kon molapas na ang limitasyon.

Sa interface sa gcloud, pilia ang among proyekto sa Firebase, pilia ang β€œDirectory” main menu item ug idugang ang Cloud Testing API ug Cloud Tools Result API.

Nagdagan kami mga instrumental nga pagsulay sa Firebase Test Lab. Bahin 1: iOS nga proyekto

Dayon adto sa menu item "IAM ug administrasyon" -> Mga account sa serbisyo -> Paghimo account sa serbisyo. Naghatag kami og mga katungod sa pag-edit sa proyekto.

Nagdagan kami mga instrumental nga pagsulay sa Firebase Test Lab. Bahin 1: iOS nga proyekto

Paghimo og API key sa JSON format

Nagdagan kami mga instrumental nga pagsulay sa Firebase Test Lab. Bahin 1: iOS nga proyekto

Kinahanglan namon ang na-download nga JSON sa ulahi, apan sa pagkakaron among ikonsiderar ang pag-setup sa Test Lab nga kompleto.

5. Pag-set up sa CircleCI

Ang usa ka makatarunganon nga pangutana mitungha - unsa ang buhaton sa mga password? Ang environment variable mechanism sa atong build machine makatabang nato nga luwas nga tipigan ang atong mga password ug uban pang sensitibong data. Sa mga setting sa proyekto sa CircleCI, pilia ang Environment Variables

Nagdagan kami mga instrumental nga pagsulay sa Firebase Test Lab. Bahin 1: iOS nga proyekto
Ug i-set up ang mosunod nga mga variable:

  • yawe: GOOGLE_APPLICATION_CREDENTIALS
    bili: sulod sa json file sa gcloud service account key
  • yawe: MATCH_PASSWORD
    bili: password alang sa pag-decrypting sa github repository nga adunay mga sertipiko
  • yawe: FASTLANE_PASSWORD
    bili: Apple Developer Portal infrastructure account password

Gitipigan namo ang mga pagbag-o, paghimo og PR ug ipadala kini sa among team lead alang sa pagsusi.

Mga resulta

Ingon usa ka sangputanan niining yano nga mga pagmaniobra, nakadawat kami usa ka maayo, lig-on nga baroganan sa pagtrabaho nga adunay katakus sa pagrekord sa video sa screen sa aparato sa panahon sa pagsulay. Sa pananglitan sa pagsulay, akong gipiho ang modelo sa iPhone X device, apan ang umahan naghatag og daghang pagpili gikan sa kombinasyon sa lain-laing mga modelo ug mga bersyon sa iOS.

Ang ikaduhang bahin igahin sa sunod-sunod nga pag-setup sa Firebase Test Lab alang sa usa ka proyekto sa Android.

Source: www.habr.com

Idugang sa usa ka comment