Khiav qhov ntsuas ntsuas hauv Firebase Test Lab. Part 1: iOS no project

Khiav qhov ntsuas ntsuas hauv Firebase Test Lab. Part 1: iOS no project

Kuv lub npe yog Dmitry, Kuv ua haujlwm ua tus kuaj hauv lub tuam txhab NTSE Science. Tsis ntev los no kuv tau ua tiav nrog cov yam ntxwv tsis ntev los no los ntawm firebase test lab - uas yog, nrog kev ntsuas ntsuas ntawm iOS daim ntawv thov siv lub hauv paus xeem XCUITest.

Ua ntej qhov no, kuv twb tau sim Firebase Test Lab rau Android thiab nyiam txhua yam, yog li kuv txiav txim siab los sim tso iOS no sim cov txheej txheem ntawm qhov project ntawm tib lub footing. Kuv yuav tsum tau mus rau Google ntau heev thiab tsis yog txhua yam ua haujlwm tawm thawj zaug, yog li kuv txiav txim siab sau ib tsab ntawv qhia rau cov uas tseem tawm tsam.

Yog li, yog tias koj muaj UI xeem ntawm qhov project iOS, koj tuaj yeem sim khiav lawv ntawm cov khoom siv tiag tiag niaj hnub no, ua siab zoo los ntawm Good Corporation. Rau cov neeg nyiam, txais tos rau miv.

Hauv zaj dab neeg, kuv tau txiav txim siab los tsim qee cov ntaub ntawv thawj zaug - ib qho chaw cia khoom ntiag tug ntawm GitHub thiab CircleCI tsim system. Daim ntawv thov npe yog AmazingApp, bundleID yog com.company.amazingapp. Kuv nthuav tawm cov ntaub ntawv no tam sim ntawd kom txo tau qhov tsis meej pem tom ntej.

Yog tias koj siv qee cov kev daws teeb meem hauv koj qhov project txawv, qhia koj qhov kev paub hauv cov lus.

1. Cov kev sim lawv tus kheej

Tsim ib ceg haujlwm tshiab rau kev xeem UI:

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

Cia peb qhib qhov project hauv XCode thiab tsim lub Hom Phiaj tshiab nrog kev sim UI [XCode -> Cov Ntaub Ntawv -> Tshiab -> Lub Hom Phiaj -> iOS Testing Bundle], muab nws tus kheej piav lub npe AmazingAppUITests.

Khiav qhov ntsuas ntsuas hauv Firebase Test Lab. Part 1: iOS no project

Mus rau ntu Tsim Phase ntawm qhov tsim Lub Hom Phiaj thiab tshawb xyuas lub xub ntiag ntawm Target Dependencies - AmazingApp, hauv Compile Sources - AmazingAppUITests.swift.

Ib qho kev xyaum zoo yog cais cov kev tsim tsim sib txawv rau hauv cov Schemes cais. Peb tsim ib lub tswv yim rau peb cov kev xeem UI [XCode -> Product -> Scheme -> New Scheme] thiab muab tib lub npe: AmazingAppUITests.

Tsim cov qauv tsim yuav tsum suav nrog Lub Hom Phiaj ntawm daim ntawv thov tseem ceeb - AmazingApp thiab Target UI xeem - AmazingAppUITests - saib screenshot

Khiav qhov ntsuas ntsuas hauv Firebase Test Lab. Part 1: iOS no project

Tom ntej no, peb tsim kev tsim kho tshiab rau kev xeem UI. Hauv XCode, nyem rau ntawm qhov project file thiab mus rau ntu Cov Ntaub Ntawv. Nyem rau ntawm "+" thiab tsim ib qho kev teeb tsa tshiab, piv txwv li XCtest. Peb yuav xav tau qhov no yav tom ntej txhawm rau zam kev seev cev nrog tambourine thaum nws los txog rau kev kos npe kos npe.

Khiav qhov ntsuas ntsuas hauv Firebase Test Lab. Part 1: iOS no project

Muaj tsawg kawg yog peb Lub Hom Phiaj hauv koj qhov project: daim ntawv thov tseem ceeb, kev xeem chav tsev (tom qab tag nrho, lawv muaj nyob, puas yog?) thiab Cov Kev Ntsuas UI peb tsim.

Mus rau Lub Hom Phiaj AmazingApp, Tsim Chaw tab, ntu Code Kos Npe Tus Kheej. Rau XCtest configuration, xaiv iOS Developer. Hauv tshooj Code Kos Npe Style, xaiv Phau Ntawv Qhia. Peb tsis tau tsim ib qho profile tsis tau, tab sis peb yuav twv yuav raug hu rov qab rau nws me ntsis tom qab.

Rau Lub Hom Phiaj AmazingAppUITests peb ua tib yam, tab sis nyob rau hauv Cov Khoom Muag Khoom Qhia Kem peb nkag mus rau com.company.amazingappuitests.

2. Teem ib qhov project hauv Apple Developer Program

Mus rau nplooj ntawv Apple Developer Program, mus rau ntu Daim Ntawv Pov Thawj, Tus Kheej & Cov Ntaub Ntawv thiab tom qab ntawd mus rau App IDs kab ntawm cov khoom Identifiers. Tsim tus ID App tshiab hu ua AmazingAppUITests thiab bundleID com.company.amazingappuitests.

Khiav qhov ntsuas ntsuas hauv Firebase Test Lab. Part 1: iOS no project

Tam sim no peb muaj lub sijhawm los kos npe rau peb cov kev xeem nrog daim ntawv pov thawj cais, tab sis ... Cov txheej txheem rau kev sib sau ua ke rau kev sim yuav tsum sib sau ua ke daim ntawv thov nws tus kheej thiab sib sau ua ke tus neeg sib tw khiav. Raws li, peb tau ntsib teeb meem ntawm kev kos npe rau ob daim ID nrog rau ib qho profile. Hmoov zoo, muaj qhov kev daws teeb meem yooj yim thiab zoo nkauj - Wildcard App ID. Peb rov ua cov txheej txheem rau kev tsim App ID tshiab, tab sis tsis yog siv App ID, xaiv Wildcard App ID raws li hauv screenshot.

Khiav qhov ntsuas ntsuas hauv Firebase Test Lab. Part 1: iOS no project

Lub sijhawm no, peb tau ua tiav nrog developer.apple.com, tab sis peb yuav tsis txo qhov browser qhov rai. Wb mus Fastlane cov ntaub ntawv site thiab nyeem txog Match utility los ntawm npog mus rau npog.

Ib tus neeg nyeem tau txais kev pom zoo pom tias siv cov khoom siv no peb yuav xav tau lub chaw khaws khoom ntiag tug thiab tus account nrog kev nkag mus rau Apple Developer Program thiab Github. Peb tsim (yog tias dheev tsis muaj qhov zoo li no) tus account ntawm daim ntawv [email tiv thaiv], tuaj nrog tus password muaj zog, sau npe nrog developer.apple.com, thiab xaiv nws ua tus tswj xyuas qhov project. Tom ntej no, peb muab tus account nkag mus rau koj lub tuam txhab github repository thiab tsim ib lub chaw khaws khoom ntiag tug tshiab nrog lub npe zoo li AmazingAppMatch.

3. Kev teeb tsa Fastlane thiab cov khoom siv sib tw

Qhib lub davhlau ya nyob twg, mus rau cov ntawv tais ceev tseg nrog qhov project thiab pib fastlane raws li tau hais hauv phau ntawv official. Tom qab nkag mus rau cov lus txib

$ fastlane init

Koj yuav raug ceeb toom kom xaiv cov kev siv uas muaj. Xaiv qhov kev xaiv thib plaub - phau ntawv teeb tsa.

Khiav qhov ntsuas ntsuas hauv Firebase Test Lab. Part 1: iOS no project

Qhov project muaj cov npe tshiab fastlane, uas muaj ob cov ntaub ntawv - Appfile thiab Fastfile. Hauv cov ntsiab lus, peb khaws cov ntaub ntawv pabcuam hauv Appfile, thiab sau cov haujlwm hauv Fastfile, hu ua kab hauv Fastlane cov lus siv. Kuv xav kom nyeem cov ntaub ntawv raug cai: sij hawm, ob.

Qhib Appfile hauv koj cov ntawv nyeem uas koj nyiam thiab coj mus rau hauv daim ntawv hauv qab no:

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

Peb rov qab mus rau lub davhlau ya nyob twg thiab raws li phau ntawv qhia peb pib teeb tsa kev sib tw.

$ fastlane match init
$ fastlane match development

Tom ntej no, nkag mus rau cov ntaub ntawv thov - repository, account, password, thiab lwm yam.

Nws yog ib qho tseem ceeb rau: Thaum koj xub pib qhov kev sib tw siv hluav taws xob, koj yuav raug nug kom nkag mus rau tus password kom decrypt lub chaw cia khoom. Nws tseem ceeb heev kom txuag tau tus password no; peb yuav xav tau nws thaum teeb tsa CI server!

Ib cov ntaub ntawv tshiab tau tshwm sim hauv cov ntawv ceev ceev - Matchfile. Qhib nws nyob rau hauv koj nyiam ntawv nyeem editor thiab tso saib nws zoo li no:

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

Peb sau nws raws nraim li no yog tias peb xav siv kev sib tw yav tom ntej los kos npe tsim rau kev tshaj tawm hauv Crashlytics thiab / lossis AppStore, uas yog, kos npe rau pob ID ntawm koj daim ntawv thov.

Tab sis, raws li peb nco qab, peb tsim ib qho tshwj xeeb Wildcard ID los kos npe rau qhov kev sim tsim. Yog li ntawd, qhib Fastfile thiab nkag mus rau txoj kab tshiab:

lane :testing_build_for_firebase do

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

end

Txuag thiab nkag mus rau hauv lub davhlau ya nyob twg

fastlane testing_build_for_firebase

thiab peb pom li cas fastlane tsim ib daim ntawv pov thawj tshiab thiab muab tso rau hauv lub repository. Zoo heev!

Qhib XCode. Tam sim no peb muaj cov ntaub ntawv tsim nyog ntawm daim ntawv Match Development com.company.*, uas yuav tsum tau teev nyob rau hauv ntu Kev Pabcuam profile rau AmazingApp thiab AmazingAppUITests lub hom phiaj.

Khiav qhov ntsuas ntsuas hauv Firebase Test Lab. Part 1: iOS no project

Nws tseem yuav ntxiv txoj kab rau kev sib sau ua ke. Wb mus chaw cia khoom ib qhov project plugin rau fastlane uas ua rau nws yooj yim dua los teeb tsa xa tawm mus rau Firebase Test Lab thiab ua raws li cov lus qhia.

Cia peb luam-paste los ntawm tus qauv qub kom peb txoj kab kev sim_build_for_firebase xaus li no:


 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

Yog xav paub ntxiv txog kev teeb tsa fastlane hauv CircleCI, kuv xav kom nyeem cov ntaub ntawv raug cai ib zaug, ob.

Tsis txhob hnov ​​qab ntxiv ib txoj hauj lwm tshiab rau peb 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. Yuav ua li cas txog peb lub rooj zaum xeem? Teeb tsa Firebase.

Cia wb mus saib seb tsab xov xwm tau sau rau dab tsi.

Tej zaum koj lub app siv Firebase ntawm txoj kev npaj pub dawb, lossis tej zaum tsis yog tag nrho. Tsis muaj qhov sib txawv ntawm qhov tseem ceeb, vim tias kev sim xav tau peb tuaj yeem tsim ib txoj haujlwm cais nrog ib xyoos siv dawb (txias, puas yog?)

Peb nkag mus rau hauv peb tus as khauj infrastructure (lossis lwm yam, nws tsis muaj teeb meem), thiab mus rau Firebase console nplooj. Tsim ib qhov project tshiab hu ua AmazingAppUITests.

Nws yog ib qho tseem ceeb rau: Hauv cov kauj ruam dhau los hauv Fastfile hauv kab firebase_test_lab_ios_xctest gcp_project parameter yuav tsum phim lub npe project.

Khiav qhov ntsuas ntsuas hauv Firebase Test Lab. Part 1: iOS no project

Cov kev teeb tsa lub neej ntawd haum peb zoo heev.

Tsis txhob kaw lub tab, sau npe nyob rau hauv tib tus account hauv Gcloud - qhov no yog qhov tsim nyog ntsuas, txij li kev sib txuas lus nrog Firebase tshwm sim siv gcloud console interface.

Google tau muab $ 300 rau ib xyoos, uas nyob rau hauv cov ntsiab lus ntawm kev ua autotests yog sib npaug rau ib xyoos ntawm kev siv dawb ntawm cov kev pabcuam. Peb sau koj cov ntaub ntawv them nyiaj, tos rau qhov kev xeem debit ntawm $ 1 thiab tau txais $ 300 rau koj tus account. Tom qab ib xyoos, qhov project yuav cia li hloov mus rau qhov kev npaj them nqi pub dawb, yog li tsis tas yuav txhawj xeeb txog kev poob nyiaj.

Cia peb rov qab mus rau lub tab nrog Firebase qhov project thiab hloov mus rau Blaze tariff txoj kev npaj - tam sim no peb muaj ib yam dab tsi los them yog tias qhov kev txwv dhau lawm.

Hauv gcloud interface, xaiv peb qhov phiaj xwm Firebase, xaiv "Directory" cov ntawv qhia zaub mov tseem ceeb thiab ntxiv Cloud Testing API thiab Cloud Tools Result API.

Khiav qhov ntsuas ntsuas hauv Firebase Test Lab. Part 1: iOS no project

Tom qab ntawd mus rau cov ntawv qhia zaub mov "IAM thiab kev tswj hwm" -> Kev pabcuam nyiaj -> Tsim kev pabcuam nyiaj. Peb muab txoj cai los kho qhov project.

Khiav qhov ntsuas ntsuas hauv Firebase Test Lab. Part 1: iOS no project

Tsim tus yuam sij API hauv JSON hom

Khiav qhov ntsuas ntsuas hauv Firebase Test Lab. Part 1: iOS no project

Peb yuav xav tau lub downloaded JSON me ntsis tom qab, tab sis rau tam sim no peb yuav xav txog qhov Test Lab teeb tiav.

5. Kev teeb tsa CircleCI

Cov lus nug tsim nyog tshwm sim - yuav ua li cas nrog tus password? Ib puag ncig sib txawv ntawm peb lub tshuab tsim yuav pab peb khaws peb cov passwords thiab lwm cov ntaub ntawv rhiab. Hauv CircleCI qhov project nqis, xaiv Environment Variables

Khiav qhov ntsuas ntsuas hauv Firebase Test Lab. Part 1: iOS no project
Thiab teeb tsa cov kev hloov pauv hauv qab no:

  • key: GOOGLE_APPLICATION_CREDENTIALS
    tus nqi: cov ntsiab lus ntawm json cov ntaub ntawv ntawm gcloud service account key
  • key: MATCH_PASSWORD
    tus nqi: lo lus zais rau decrypting lub github repository nrog daim ntawv pov thawj
  • key: FASTLANE_PASSWORD
    tus nqi: Apple Developer Portal infrastructure account password

Peb khaws cov kev hloov pauv, tsim PR thiab xa mus rau peb pawg thawj coj saib xyuas.

Cov txiaj ntsim tau los

Raws li qhov tshwm sim ntawm cov kev siv yooj yim no, peb tau txais qhov zoo, ruaj khov ua haujlwm nrog lub peev xwm los kaw cov yeeb yaj kiab ntawm lub vijtsam ntaus ntawv thaum lub sijhawm sim. Hauv kev sim piv txwv, kuv tau teev cov qauv iPhone X ntaus ntawv, tab sis kev ua liaj ua teb muab kev xaiv nplua nuj los ntawm kev sib xyaw ua ke ntawm cov qauv sib txawv thiab iOS versions.

Qhov thib ob yuav mob siab rau kev teeb tsa ib ntus ntawm Firebase Test Lab rau qhov project hauv Android.

Tau qhov twg los: www.hab.com

Ntxiv ib saib