Nou fè tès enstrimantal nan Firebase Test Lab. Pati 1: pwojè iOS

Nou fè tès enstrimantal nan Firebase Test Lab. Pati 1: pwojè iOS

Non mwen se Dmitry, mwen travay kòm yon tèsteur nan konpayi an Syans MEL. Byen dènyèman mwen te fini fè fas ak yon karakteristik relativman resan soti nan Laboratwa tès Firebase — sètadi, ak tès enstrimantal nan aplikasyon iOS lè l sèvi avèk fondasyon tès natif natal XCUITest la.

Anvan sa, mwen te deja eseye Firebase Test Lab pou Android ak reyèlman te renmen tout bagay, Se konsa, mwen deside eseye mete enfrastrikti tès iOS nan pwojè a sou menm baz la. Mwen te oblije Google anpil epi yo pa tout bagay te mache premye fwa, kidonk mwen te deside ekri yon atik leson patikilye pou moun ki toujou ap konbat.

Se konsa, si ou gen tès UI sou yon pwojè iOS, ou ka deja eseye kouri yo sou aparèy reyèl jodi a, dousman bay pa Good Corporation. Pou moun ki enterese, akeyi nan chat.

Nan istwa a, mwen deside bati sou kèk done inisyal - yon depo prive sou GitHub ak sistèm nan bati CircleCI. Non aplikasyon an se AmazingApp, bundleID se com.company.amazingapp. Mwen prezante done sa yo imedyatman pou diminye konfizyon ki vin apre yo.

Si ou aplike sèten solisyon nan pwojè ou yon fason diferan, pataje eksperyans ou nan kòmantè yo.

1. Tès yo tèt yo

Kreye yon nouvo branch pwojè pou tès UI:

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

Ann louvri pwojè a nan XCode epi kreye yon nouvo Sib ak tès UI [XCode -> Fichye -> Nouvo -> Sib -> iOS Tès Bundle], bay li non ki eksplikasyon pwòp AmazingAppUITests.

Nou fè tès enstrimantal nan Firebase Test Lab. Pati 1: pwojè iOS

Ale nan seksyon Build Phases nan Target kreye a epi tcheke pou prezans Depandans Sib - AmazingApp, nan Konpile Sous - AmazingAppUITests.swift.

Yon bon pratik se separe diferan opsyon bati nan Schemes separe. Nou kreye yon konplo pou tès UI nou yo [XCode -> Product -> Scheme -> New Scheme] epi ba li menm non: AmazingAppUITests.

Bati nan konplo kreye a dwe gen ladan sib aplikasyon prensipal la - AmazingApp ak tès UI sib - AmazingAppUITests - gade ekran

Nou fè tès enstrimantal nan Firebase Test Lab. Pati 1: pwojè iOS

Apre sa, nou kreye yon nouvo konfigirasyon bati pou tès UI. Nan XCode, klike sou dosye pwojè a epi ale nan seksyon Enfòmasyon an. Klike sou "+" epi kreye yon nouvo konfigirasyon, pou egzanp XCtest. Nou pral bezwen sa alavni pou nou evite danse ak yon tanbourin lè li rive siyen kòd.

Nou fè tès enstrimantal nan Firebase Test Lab. Pati 1: pwojè iOS

Gen omwen twa Sib nan pwojè ou a: aplikasyon prensipal la, tès inite yo (apre tout, yo egziste, pa vre?) ak tès UI nou te kreye yo.

Ale nan Target AmazingApp, Build Settings tab, Kòd siyen idantite seksyon. Pou konfigirasyon XCtest la, chwazi iOS Developer. Nan seksyon Style siyen Kòd, chwazi Manyèl. Nou poko jenere yon pwofil pwovizyon ankò, men nou pral definitivman retounen sou li yon ti kras pita.

Pou Target AmazingAppUITests nou fè menm bagay la, men nan kolòn Product Bundle Identifier nou antre com.company.amazingappuitests.

2. Mete kanpe yon pwojè nan Pwogram Developer Apple la

Ale nan paj Apple Developer Program, ale nan seksyon Sètifika, Idantifyan ak pwofil epi answit nan kolòn ID App nan atik Idantifyan yo. Kreye yon nouvo ID App ki rele AmazingAppUITests ak bundleID com.company.amazingappuitests.

Nou fè tès enstrimantal nan Firebase Test Lab. Pati 1: pwojè iOS

Koulye a, nou gen opòtinite pou siyen tès nou yo ak yon sètifika separe, men... Pwosedi pou rasanble yon bati pou tès enplike nan rasanble aplikasyon an tèt li ak rasanble kourè tès la. An konsekans, nou fè fas ak pwoblèm nan siyen de ID pake ak yon pwofil pwovizyon. Erezman, gen yon solisyon senp ak elegant - Wildcard App ID. Nou repete pwosedi a pou kreye yon nouvo ID App, men olye pou yo ID eksplisit App, chwazi Wildcard ID ID tankou nan ekran an.

Nou fè tès enstrimantal nan Firebase Test Lab. Pati 1: pwojè iOS

Nan pwen sa a, nou fini travay ak developer.apple.com, men nou pa pral minimize fenèt navigatè a. Ann ale nan Sit dokiman Fastlane epi li sou sèvis piblik Match la soti nan kouvèti a.

Yon lektè atantif remake ke pou sèvi ak sèvis piblik sa a nou pral bezwen yon depo prive ak yon kont ki gen aksè a tou de Pwogram Apple Developer ak Github. Nou kreye (si toudenkou pa gen okenn bagay konsa) yon kont nan fòm nan [imèl pwoteje], vini ak yon modpas solid, anrejistre li sou developer.apple.com, epi nonmen li kòm yon administratè pwojè. Apre sa, nou bay kont lan aksè nan depo Github konpayi ou a epi kreye yon nouvo depo prive ak yon non tankou AmazingAppMatch.

3. Mete kanpe Fastlane ak sèvis piblik match la

Louvri yon tèminal, ale nan katab la ak pwojè a epi inisyalize Fastlane jan sa endike nan manyèl ofisyèl. Apre w fin antre nan lòd la

$ fastlane init

Y ap mande w pou w chwazi konfigirasyon itilizasyon ki disponib yo. Chwazi katriyèm opsyon an - konfigirasyon pwojè manyèl.

Nou fè tès enstrimantal nan Firebase Test Lab. Pati 1: pwojè iOS

Pwojè a gen yon nouvo anyè fastlane, ki gen de dosye - Appfile ak Fastfile. Nan yon ti bout tan, nou estoke done sèvis nan Appfile, epi ekri travay nan Fastfile, yo rele liy nan tèminoloji Fastlane. Mwen rekòmande li dokiman ofisyèl la: tan, два.

Louvri Appfile a nan editè tèks ou pi renmen epi pote li nan fòm sa a:

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

Nou retounen nan tèminal la ak dapre manyèl ofisyèl la nou kòmanse konfigirasyon matche ak.

$ fastlane match init
$ fastlane match development

Apre sa, antre done yo mande yo - depo, kont, modpas, elatriye.

Enpòtan: Lè ou premye lanse sèvis piblik match la, yo pral mande w pou antre yon modpas pou dechifre repozitwa a. Li trè enpòtan pou konsève pou modpas sa a; nou pral bezwen li lè w ap mete sèvè CI a!

Yon nouvo fichye parèt nan katab Fastlane a - Matchfile. Louvri li nan editè tèks ou pi renmen epi montre li konsa:

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

Nou ranpli li egzakteman nan fason sa a si nou vle sèvi ak matche ak alavni pou siyen bati pou ekspozisyon nan Crashlytics ak/oswa AppStore, se sa ki, pou siyen ID pake aplikasyon w lan.

Men, jan nou sonje, nou te kreye yon ID espesyal Wildcard pou siyen bati tès la. Se poutèt sa, louvri Fastfile epi antre nan yon nouvo liy:

lane :testing_build_for_firebase do

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

end

Sove epi antre nan tèminal la

fastlane testing_build_for_firebase

epi nou wè ki jan fastlane te kreye yon nouvo sètifika epi mete l nan repozitwa a. Gwo!

Louvri XCode. Koulye a, nou gen pwofil pwovizyon ki nesesè nan fòm Match Development com.company.*, ki dwe espesifye nan seksyon pwofil Pwovizyon pou objektif AmazingApp ak AmazingAppUITests.

Nou fè tès enstrimantal nan Firebase Test Lab. Pati 1: pwojè iOS

Li rete pou ajoute liy pou rasanble tès yo. Ann ale nan depo yon pwojè plugin pou fastlane ki rann li pi fasil pou mete ekspòtasyon nan Firebase Test Lab epi swiv enstriksyon yo.

Ann kopye-kole soti nan egzanp orijinal la pou ke liy nou an testing_build_for_firebase fini sanble sa a:


 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

Pou enfòmasyon konplè sou konfigirasyon fastlane nan CircleCI, mwen rekòmande li dokiman ofisyèl la yon fwa, два.

Pa bliye ajoute yon nouvo travay nan config.yml nou an:

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. Ki sa ki sou ban tès nou an? Mete kanpe Firebase.

Ann desann sou sa atik la te ekri pou.

Petèt aplikasyon w lan sèvi ak Firebase sou yon plan gratis, oswa petèt pa ditou. Pa gen absoliman okenn diferans fondamantal, paske pou bezwen tès nou ka kreye yon pwojè separe ak yon ane nan itilizasyon gratis (fre, pa vre?)

Nou konekte nan kont enfrastrikti nou an (oswa nenpòt lòt, li pa enpòtan), epi ale nan Firebase konsole paj. Kreye yon nouvo pwojè ki rele AmazingAppUITests.

Enpòtan: Nan etap anvan an nan Fastfile nan liy firebase_test_lab_ios_xctest paramèt gcp_project la ta dwe matche ak non pwojè a.

Nou fè tès enstrimantal nan Firebase Test Lab. Pati 1: pwojè iOS

Anviwònman default yo adapte nou byen.

Pa fèmen tab la, anrejistre anba menm kont la nan Gcloud - sa a se yon mezi nesesè, paske kominikasyon ak Firebase fèt lè l sèvi avèk koòdone konsole gcloud la.

Google ap bay $300 pou yon ane, ki nan yon kontèks fè autotests ekivalan a yon ane pou sèvi ak sèvis la gratis. Nou antre enfòmasyon peman ou, tann debi tès la $1 epi nou resevwa $300 sou kont ou. Apre yon ane, pwojè a pral otomatikman transfere nan yon plan tarif gratis, kidonk pa gen okenn bezwen enkyete sou pèt posib nan lajan.

Ann retounen nan tab la ak pwojè Firebase a epi transfere li nan plan tarif Blaze - kounye a nou gen yon bagay pou peye si limit la depase.

Nan koòdone gcloud la, chwazi pwojè Firebase nou an, chwazi "Anyè" atik meni prensipal la epi ajoute Cloud Testing API ak Cloud Tools Result API.

Nou fè tès enstrimantal nan Firebase Test Lab. Pati 1: pwojè iOS

Lè sa a, ale nan atik nan meni "IAM ak administrasyon" -> Kont sèvis -> Kreye kont sèvis. Nou bay dwa pou edite pwojè a.

Nou fè tès enstrimantal nan Firebase Test Lab. Pati 1: pwojè iOS

Kreye yon kle API nan fòma JSON

Nou fè tès enstrimantal nan Firebase Test Lab. Pati 1: pwojè iOS

Nou pral bezwen telechaje JSON a yon ti kras pita, men pou kounye a nou pral konsidere konfigirasyon Laboratwa Tès la konplè.

5. Mete kanpe CircleCI

Yon kesyon rezonab rive - kisa pou w fè ak modpas yo? Mekanis varyab anviwònman an nan machin bati nou an ap ede nou byen estoke modpas nou yo ak lòt done sansib. Nan anviwònman pwojè CircleCI, chwazi Varyab Anviwònman

Nou fè tès enstrimantal nan Firebase Test Lab. Pati 1: pwojè iOS
Epi mete varyab sa yo:

  • kle: GOOGLE_APPLICATION_CREDENTIALS
    valè: sa ki nan dosye json kle kont sèvis gcloud la
  • kle: MATCH_PASSWORD
    valè: modpas pou dechifre depo Github la ak sètifika
  • kle: FASTLANE_PASSWORD
    valè: Apple Developer Portal enfrastrikti kont modpas

Nou sove chanjman yo, kreye yon PR epi voye li bay dirijan ekip nou an pou revize.

Rezilta

Kòm yon rezilta nan manipilasyon senp sa yo, nou te resevwa yon bon, ki estab k ap travay kanpe ak kapasite nan anrejistre videyo sou ekran aparèy la nan moman tès la. Nan egzanp tès la, mwen espesifye modèl aparèy iPhone X la, men fèm nan bay yon seleksyon rich nan yon konbinezon de modèl diferan ak vèsyon iOS.

Dezyèm pati a pral konsakre nan konfigirasyon etap-pa-etap nan Firebase Test Lab pou yon pwojè Android.

Sous: www.habr.com

Add nouvo kòmantè