A nṣiṣẹ awọn idanwo ohun elo ni Firebase Test Lab. Apá 1: iOS ise agbese

A nṣiṣẹ awọn idanwo ohun elo ni Firebase Test Lab. Apá 1: iOS ise agbese

Orukọ mi ni Dmitry, Mo ṣiṣẹ bi idanwo ni ile-iṣẹ naa MEL Imọ. Laipẹ Mo pari ṣiṣe pẹlu ẹya tuntun kan lati ọdọ Firebase igbeyewo Lab - eyun, pẹlu idanwo irinṣẹ ti awọn ohun elo iOS nipa lilo ilana idanwo abinibi XCUITest.

Ṣaaju eyi, Mo ti gbiyanju Lab Idanwo Firebase fun Android ati pe o fẹran ohun gbogbo, nitorinaa Mo pinnu lati gbiyanju lati fi awọn amayederun idanwo iOS ti iṣẹ akanṣe naa si ẹsẹ kanna. Mo ni lati Google pupọ ati pe kii ṣe ohun gbogbo ṣiṣẹ ni igba akọkọ, nitorinaa Mo pinnu lati kọ nkan ikẹkọ fun awọn ti o tun n tiraka.

Nitorinaa, ti o ba ni awọn idanwo UI lori iṣẹ akanṣe iOS kan, o le gbiyanju tẹlẹ ni ṣiṣe wọn lori awọn ẹrọ gidi loni, ti a fi inurere pese nipasẹ Ile-iṣẹ Dara. Fun awon ti o nife, kaabo si ologbo.

Ninu itan naa, Mo pinnu lati kọ lori diẹ ninu data akọkọ - ibi ipamọ ikọkọ lori GitHub ati CircleCI kọ eto. Orukọ ohun elo naa jẹ AmazingApp, bundleID jẹ com.company.amazingapp. Mo ṣafihan data yii lẹsẹkẹsẹ lati dinku iporuru ti o tẹle.

Ti o ba ṣe imuse awọn ojutu kan ninu iṣẹ akanṣe rẹ yatọ, pin iriri rẹ ninu awọn asọye.

1. Awọn igbeyewo ara wọn

Ṣẹda ẹka iṣẹ akanṣe tuntun fun awọn idanwo UI:

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

Jẹ ki a ṣii iṣẹ akanṣe ni XCode ki o ṣẹda Ibi-afẹde tuntun pẹlu awọn idanwo UI [XCode -> Faili -> Tuntun -> Àkọlé -> Ipilẹ Idanwo iOS], fifun ni orukọ alaye ti ara ẹni AmazingAppUITests.

A nṣiṣẹ awọn idanwo ohun elo ni Firebase Test Lab. Apá 1: iOS ise agbese

Lọ si apakan Awọn ipele Kọ ti Ibi-afẹde ti o ṣẹda ati ṣayẹwo fun wiwa awọn igbẹkẹle ibi-afẹde - AmazingApp, ni Awọn orisun Iṣakojọ - AmazingAppUITests.swift.

Iwa ti o dara ni lati ya awọn aṣayan kikọ oriṣiriṣi si awọn eto lọtọ. A ṣẹda ero kan fun awọn idanwo UI wa [XCode -> Ọja -> Eto -> Eto Tuntun] ati fun ni orukọ kanna: AmazingAppUITests.

Kọ ti ero ti a ṣẹda gbọdọ pẹlu Àkọlé ti ohun elo akọkọ - AmazingApp ati Awọn idanwo UI Target - AmazingAppUITests - wo sikirinifoto

A nṣiṣẹ awọn idanwo ohun elo ni Firebase Test Lab. Apá 1: iOS ise agbese

Nigbamii ti, a ṣẹda iṣeto ile tuntun fun awọn idanwo UI. Ni XCode, tẹ lori faili ise agbese ki o lọ si apakan Alaye. Tẹ lori “+” ki o ṣẹda iṣeto tuntun, fun apẹẹrẹ XCtest. A yoo nilo eyi ni ọjọ iwaju lati yago fun jijo pẹlu tambourin nigbati o ba de iforukọsilẹ koodu.

A nṣiṣẹ awọn idanwo ohun elo ni Firebase Test Lab. Apá 1: iOS ise agbese

O kere ju Awọn ibi-afẹde mẹta wa ninu iṣẹ akanṣe rẹ: ohun elo akọkọ, awọn idanwo ẹyọkan (lẹhinna gbogbo wọn wa, otun?) Ati awọn idanwo UI Target ti a ṣẹda.

Lọ si Àkọlé AmazingApp, Kọ Eto taabu, koodu Ibuwọlu Idanimọ apakan. Fun iṣeto XCtest, yan Olùgbéejáde iOS. Ni apakan Aṣa Ibuwọlu koodu, yan Afowoyi. A ko ti ṣe ipilẹṣẹ profaili ipese sibẹsibẹ, ṣugbọn dajudaju a yoo pada si ọdọ diẹ diẹ nigbamii.

Fun Àkọlé AmazingAppUITests a ṣe kanna, ṣugbọn ninu iwe idanimọ lapapo ọja a tẹ com.company.amazingappuitests.

2. Eto soke ise agbese kan ni Apple Developer Program

Lọ si oju-iwe Eto Olùgbéejáde Apple, lọ si Awọn iwe-ẹri, Awọn idanimọ & Awọn profaili apakan ati lẹhinna si oju-iwe ID Awọn ohun elo ti ohun Idanimọ. Ṣẹda ID App tuntun ti a pe ni AmazingAppUITests ati bundleID com.company.amazingappuitests.

A nṣiṣẹ awọn idanwo ohun elo ni Firebase Test Lab. Apá 1: iOS ise agbese

Ni bayi a ni aye lati fowo si awọn idanwo wa pẹlu iwe-ẹri lọtọ, ṣugbọn… Ilana fun iṣakojọpọ kọ fun idanwo jẹ apejọ ohun elo funrararẹ ati apejọ olusare idanwo naa. Nitorinaa, a dojuko pẹlu iṣoro ti wíwọlé awọn ID lapapo meji pẹlu profaili ipese kan. Da, nibẹ ni a rọrun ati ki o yangan ojutu - Wildcard App ID. A tun ilana fun ṣiṣẹda titun App ID, sugbon dipo ti fojuhan App ID, yan Wildcard App ID bi ninu awọn sikirinifoto.

A nṣiṣẹ awọn idanwo ohun elo ni Firebase Test Lab. Apá 1: iOS ise agbese

Ni aaye yii, a ti pari ṣiṣẹ pẹlu developer.apple.com, ṣugbọn a kii yoo dinku window ẹrọ aṣawakiri naa. Jẹ ki a lọ si Fastlane iwe ojula ki o si ka nipa IwUlO Baramu lati ideri si ideri.

Oluka ti o tẹtisi ṣe akiyesi pe lati lo ohun elo yii a yoo nilo ibi ipamọ ikọkọ ati akọọlẹ kan pẹlu iraye si mejeeji Eto Olumulo Apple ati Github. A ṣẹda (ti o ba lojiji ko si iru nkan bẹẹ) akọọlẹ ti fọọmu naa [imeeli ni idaabobo], Wa pẹlu ọrọ igbaniwọle to lagbara, forukọsilẹ pẹlu developer.apple.com, ki o si yan rẹ gẹgẹbi oluṣakoso iṣẹ akanṣe. Nigbamii, a fun akọọlẹ ni iraye si ibi ipamọ github ti ile-iṣẹ rẹ ati ṣẹda ibi ipamọ ikọkọ tuntun pẹlu orukọ kan bii AmazingAppMatch.

3. Eto soke Fastlane ati baramu IwUlO

Ṣii ebute kan, lọ si folda pẹlu iṣẹ akanṣe naa ki o bẹrẹ fastlane bi a ti tọka si osise Afowoyi. Lẹhin titẹ aṣẹ naa

$ fastlane init

Iwọ yoo ti ọ lati yan awọn atunto lilo to wa. Yan awọn kẹrin aṣayan - Afowoyi ise agbese setup.

A nṣiṣẹ awọn idanwo ohun elo ni Firebase Test Lab. Apá 1: iOS ise agbese

Ise agbese na ni fastlane itọsọna tuntun, eyiti o ni awọn faili meji - Appfile ati Fastfile. Ni kukuru, a tọju data iṣẹ ni Appfile, ati kọ awọn iṣẹ ni Fastfile, ti a pe ni awọn ọna ni awọn ọrọ-ọrọ Fastlane. Mo ṣeduro kika iwe aṣẹ naa: igba, meji.

Ṣii Appfile ninu olootu ọrọ ayanfẹ rẹ ki o mu wa si fọọmu atẹle:

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

A pada si ebute naa ati ni ibamu si itọnisọna osise a bẹrẹ lati tunto baramu.

$ fastlane match init
$ fastlane match development

Nigbamii, tẹ data ti o beere sii - ibi ipamọ, akọọlẹ, ọrọ igbaniwọle, ati bẹbẹ lọ.

Pataki: Nigbati o ba kọkọ ṣe ifilọlẹ IwUlO baramu, ao beere lọwọ rẹ lati tẹ ọrọ igbaniwọle sii lati yo ibi ipamọ naa. O ṣe pataki pupọ lati ṣafipamọ ọrọ igbaniwọle yii; a yoo nilo rẹ nigbati o ba ṣeto olupin CI!

Faili tuntun ti han ninu folda fastlane - Matchfile. Ṣi i ni olootu ọrọ ayanfẹ rẹ ki o ṣe afihan bi eleyi:

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

A fọwọsi ni deede ni ọna yii ti a ba fẹ lati lo baramu ni ọjọ iwaju lati forukọsilẹ fun ifihan ni Crashlytics ati/tabi AppStore, iyẹn ni, lati fowo si ID lapapo ti ohun elo rẹ.

Ṣugbọn, bi a ṣe ranti, a ṣẹda ID Wildcard pataki kan lati fowo si kikọ idanwo naa. Nitorinaa, ṣii Fastfile ki o tẹ ọna tuntun sii:

lane :testing_build_for_firebase do

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

end

Fipamọ ati tẹ sinu ebute naa

fastlane testing_build_for_firebase

ati pe a rii bii fastlane ṣe ṣẹda iwe-ẹri tuntun kan ati fi sii sinu ibi ipamọ naa. Nla!

Ṣii XCode. Bayi a ni profaili ipese pataki ti fọọmu Match Development com.company.*, eyiti o gbọdọ wa ni pato ni apakan profaili Ipese fun awọn ibi-afẹde AmazingApp ati AmazingAppUITests.

A nṣiṣẹ awọn idanwo ohun elo ni Firebase Test Lab. Apá 1: iOS ise agbese

O wa lati ṣafikun ọna fun apejọ awọn idanwo. Jẹ ki a lọ si ibi ipamọ ohun itanna ise agbese fun fastlane ti o mu ki o rọrun lati ṣeto soke okeere to Firebase igbeyewo Lab ki o si tẹle awọn ilana.

Jẹ ki a daakọ-lẹẹmọ lati apẹẹrẹ atilẹba ki ọna test_build_for_firebase wa pari ni wiwo bi eleyi:


 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

Fun alaye pipe nipa siseto fastlane ni CircleCI, Mo ṣeduro kika iwe aṣẹ osise lẹẹkan, meji.

Maṣe gbagbe lati ṣafikun iṣẹ-ṣiṣe tuntun si config.yml wa:

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. Kini nipa ibujoko idanwo wa? Ṣiṣeto Firebase.

Jẹ ki a sọkalẹ lọ si ohun ti a kọ nkan naa fun.

Boya ohun elo rẹ nlo Firebase lori ero ọfẹ, tabi boya kii ṣe rara. Ko si iyatọ pataki rara, nitori fun awọn iwulo idanwo a le ṣẹda iṣẹ akanṣe lọtọ pẹlu ọdun kan ti lilo ọfẹ (itura, otun?)

A wọle si akọọlẹ amayederun wa (tabi eyikeyi miiran, ko ṣe pataki), ati lọ si Firebase console iwe. Ṣẹda iṣẹ akanṣe tuntun ti a npè ni AmazingAppUITests.

Pataki: Ni igbesẹ ti tẹlẹ ninu Fastfile ni ọna firebase_test_lab_ios_xctest paramita gcp_project yẹ ki o baamu orukọ iṣẹ akanṣe naa.

A nṣiṣẹ awọn idanwo ohun elo ni Firebase Test Lab. Apá 1: iOS ise agbese

Awọn eto aiyipada ba wa ni ibamu daradara.

Maṣe pa taabu naa, forukọsilẹ labẹ akọọlẹ kanna ni Gcloud - Eyi jẹ iwọn pataki, nitori ibaraẹnisọrọ pẹlu Firebase waye ni lilo wiwo console gcloud.

Google n fun $ 300 fun ọdun kan, eyiti o wa ni ipo ti ṣiṣe awọn adaṣe adaṣe jẹ deede si ọdun kan ti lilo ọfẹ ti iṣẹ naa. A tẹ alaye isanwo rẹ sii, duro fun debiti idanwo ti $1 ati gba $300 si akọọlẹ rẹ. Lẹhin ọdun kan, iṣẹ naa yoo gbe lọ laifọwọyi si ero idiyele ọfẹ, nitorinaa ko si ye lati ṣe aniyan nipa pipadanu owo ti o ṣeeṣe.

Jẹ ki a pada si taabu pẹlu iṣẹ akanṣe Firebase ki o gbe lọ si ero idiyele Blaze - ni bayi a ni nkan lati sanwo ti opin naa ba kọja.

Ni wiwo gcloud, yan iṣẹ akanṣe Firebase wa, yan ohun akojọ aṣayan akọkọ “Itọsọna” ki o ṣafikun API Idanwo Awọsanma ati Abajade API Awọn irinṣẹ Awọsanma.

A nṣiṣẹ awọn idanwo ohun elo ni Firebase Test Lab. Apá 1: iOS ise agbese

Lẹhinna lọ si ohun akojọ aṣayan “IAM ati iṣakoso” -> Awọn iroyin iṣẹ -> Ṣẹda akọọlẹ iṣẹ. A fun awọn ẹtọ lati satunkọ ise agbese na.

A nṣiṣẹ awọn idanwo ohun elo ni Firebase Test Lab. Apá 1: iOS ise agbese

Ṣẹda bọtini API ni ọna kika JSON

A nṣiṣẹ awọn idanwo ohun elo ni Firebase Test Lab. Apá 1: iOS ise agbese

A yoo nilo JSON ti a ṣe igbasilẹ ni diẹ diẹ, ṣugbọn fun bayi a yoo gbero iṣeto Lab Idanwo ti pari.

5. Eto CircleCI

Ibeere ti o ni oye waye - kini lati ṣe pẹlu awọn ọrọ igbaniwọle? Ẹrọ oniyipada ayika ti ẹrọ kikọ wa yoo ṣe iranlọwọ fun wa ni aabo awọn ọrọ igbaniwọle wa ati data ifura miiran. Ninu awọn eto iṣẹ akanṣe CircleCI, yan Awọn oniyipada Ayika

A nṣiṣẹ awọn idanwo ohun elo ni Firebase Test Lab. Apá 1: iOS ise agbese
Ati ṣeto awọn oniyipada wọnyi:

  • bọtini: GOOGLE_APPLICATION_CREDENTIALS
    iye: awọn akoonu inu faili json ti bọtini akọọlẹ iṣẹ gcloud
  • bọtini: MATCH_PASSWORD
    iye: ọrọ igbaniwọle fun sisọ ibi ipamọ github pẹlu awọn iwe-ẹri
  • bọtini: FASTLANE_PASSWORD
    iye: Apple Developer Portal amayederun iroyin ọrọigbaniwọle

A fipamọ awọn ayipada, ṣẹda PR ati firanṣẹ si itọsọna ẹgbẹ wa fun atunyẹwo.

Awọn esi

Bi abajade ti awọn ifọwọyi ti o rọrun wọnyi, a gba iduro iṣẹ ti o dara, iduroṣinṣin pẹlu agbara lati ṣe igbasilẹ fidio lori iboju ẹrọ ni akoko idanwo. Ninu apẹẹrẹ idanwo, Mo ṣalaye awoṣe ẹrọ iPhone X, ṣugbọn oko pese yiyan ọlọrọ lati apapo awọn awoṣe oriṣiriṣi ati awọn ẹya iOS.

Apa keji yoo jẹ iyasọtọ si iṣeto-igbesẹ-igbesẹ ti Lab Idanwo Firebase fun iṣẹ akanṣe Android kan.

orisun: www.habr.com

Fi ọrọìwòye kun