Мо дар озмоишгоҳи Firebase озмоишҳои инструменталӣ мегузаронем. Қисми 1: Лоиҳаи iOS

Мо дар озмоишгоҳи Firebase озмоишҳои инструменталӣ мегузаронем. Қисми 1: Лоиҳаи iOS

Номи ман Дмитрий, ман дар ширкат ҳамчун озмоишгар кор мекунам Илм MEL. Ба наздикӣ ман кор карданро бо як хусусияти нисбатан ба наздикӣ анҷом додам Лабораторияи озмоишии Firebase — маҳз бо санҷиши асбобии замимаҳои iOS бо истифода аз чаҳорчӯбаи санҷиши ватании XCUITest.

Пеш аз ин, ман аллакай Firebase Test Lab-ро барои Android санҷида будам ва ҳама чиз дар ҳақиқат маъқул буд, аз ин рӯ ман қарор додам, ки инфрасохтори озмоишии лоиҳаро дар ҳамон замина гузорам. Ман маҷбур будам, ки ба Google бисёр кор кунам ва бори аввал на ҳама чиз кор кард, аз ин рӯ ман қарор додам, ки барои онҳое, ки ҳоло ҳам мубориза мебаранд, мақолаи дарсӣ нависам.

Ҳамин тавр, агар шумо дар як лоиҳаи iOS санҷишҳои UI дошта бошед, шумо аллакай метавонед онҳоро дар дастгоҳҳои воқеӣ иҷро кунед, ки аз ҷониби Good Corporation пешниҳод шудааст. Барои онҳое, ки таваҷҷӯҳ доранд, ба гурба хуш омадед.

Дар ҳикоя, ман қарор додам, ки ба баъзе маълумоти ибтидоӣ - як анбори хусусӣ дар GitHub ва системаи сохтани CircleCI бунёд кунам. Номи барнома AmazingApp, bundleID com.company.amazingapp аст. Ман ин маълумотро фавран пешниҳод мекунам, то нофаҳмиҳои минбаъдаро кам кунад.

Агар шумо қарорҳои муайянро дар лоиҳаи худ ба таври дигар амалӣ карда бошед, таҷрибаи худро дар шарҳҳо мубодила кунед.

1. Худи санҷишҳо

Барои санҷишҳои UI як филиали нави лоиҳа эҷод кунед:

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

Биёед лоиҳаро дар XCode кушоем ва бо санҷишҳои UI Ҳадафи нав созем [XCode -> File -> New -> Target -> Bundle Testing iOS] ва ба он номи худфаҳмо AmazingAppUITests дода шавад.

Мо дар озмоишгоҳи Firebase озмоишҳои инструменталӣ мегузаронем. Қисми 1: Лоиҳаи iOS

Ба бахши Сохтани Марҳилаҳои Ҳадафи сохташуда равед ва мавҷудияти вобастагии Ҳадаф - AmazingApp, дар маҷмӯаи манбаъҳо - AmazingAppUITests.swift -ро тафтиш кунед.

Таҷрибаи хуб ин аст, ки вариантҳои гуногуни сохтмонро ба схемаҳои алоҳида ҷудо кунед. Мо нақшаеро барои санҷишҳои UI-и худ эҷод мекунем [XCode -> Маҳсулот -> Схема -> Схемаи нав] ва ба он ҳамон ном медиҳем: AmazingAppUITests.

Сохтани схемаи сохташуда бояд Ҳадафи барномаи асосиро дар бар гирад - AmazingApp ва Target UI санҷишҳо - AmazingAppUITests - дидани скриншот

Мо дар озмоишгоҳи Firebase озмоишҳои инструменталӣ мегузаронем. Қисми 1: Лоиҳаи iOS

Минбаъд, мо конфигуратсияи нави сохтмонро барои санҷишҳои UI эҷод мекунем. Дар XCode, файли лоиҳаро клик кунед ва ба бахши Маълумот гузаред. "+" -ро клик кунед ва конфигуратсияи нав эҷод кунед, масалан XCtest. Мо дар оянда ба ин лозим меояд, то ки ҳангоми имзои код аз рақс бо танбур канорагирӣ кунем.

Мо дар озмоишгоҳи Firebase озмоишҳои инструменталӣ мегузаронем. Қисми 1: Лоиҳаи iOS

Дар лоиҳаи шумо ҳадди аққал се Ҳадаф мавҷуд аст: барномаи асосӣ, санҷишҳои воҳидҳо (дар ниҳоят, онҳо вуҷуд доранд, дуруст?) ва санҷишҳои UI Ҳадаф, ки мо офаридаем.

Ба Target AmazingApp, ҷадвали Сохтани Танзимот, фасли рамзи имзои ҳувият гузаред. Барои конфигуратсияи XCtest, iOS Developer -ро интихоб кунед. Дар қисмати услуби имзои код, Дастӣ-ро интихоб кунед. Мо то ҳол профили таъминкуниро эҷод накардаем, аммо мо ҳатман ба он каме дертар бармегардем.

Барои Target AmazingAppUITests мо ҳамин тавр мекунем, аммо дар сутуни Идентификатори бастаи маҳсулот мо com.company.amazingappuitests ворид мекунем.

2. Ташкили лоиҳа дар Барномаи Developer Apple

Ба саҳифаи Барномаи таҳиягари Apple гузаред, ба қисмати Сертификатҳо, идентификаторҳо ва профилҳо ва сипас ба сутуни ID-и барнома дар ҷузъи Идентификаторҳо гузаред. ID-и нави барнома бо номи AmazingAppUITests ва bundleID com.company.amazingappuitests эҷод кунед.

Мо дар озмоишгоҳи Firebase озмоишҳои инструменталӣ мегузаронем. Қисми 1: Лоиҳаи iOS

Ҳоло мо имкон дорем, ки санҷишҳои худро бо шаҳодатномаи алоҳида имзо кунем, аммо... Тартиби монтажи конструксия барои санҷиш васл кардани худи барнома ва васл кардани давандаи санҷиширо дар бар мегирад. Бинобар ин, мо бо мушкилоти имзои ду ID-и баста бо як профили таъминкунанда дучор мешавем. Хушбахтона, як ҳалли оддӣ ва шево вуҷуд дорад - Wildcard App ID. Мо тартиби эҷоди ID-и нави барномаро такрор мекунем, аммо ба ҷои ID App Exlicit, Wildcard App ID-ро тавре ки дар скриншот нишон дода шудааст, интихоб кунед.

Мо дар озмоишгоҳи Firebase озмоишҳои инструменталӣ мегузаронем. Қисми 1: Лоиҳаи iOS

Дар ин лаҳза, мо кор бо developer.apple.com ба анҷом расидем, аммо мо равзанаи браузерро кам намекунем. Биёед ба Сайти ҳуҷҷатгузории Fastlane ва дар бораи утилитаи Match аз сар то сар хонед.

Хонандаи бодиққат пай бурд, ки барои истифодаи ин утилита ба мо як анбори хусусӣ ва ҳисобе лозим аст, ки дастрасӣ ба Барномаи Developer Apple ва Github дорад. Мо ҳисоби формаро эҷод мекунем (агар ногаҳон чунин чизе набошад). [почтаи электронӣ ҳифз карда шудааст], пароли қавӣ пайдо кунед, онро дар developer.apple.com сабти ном кунед ва онро ҳамчун мудири лоиҳа таъин кунед. Баъдан, мо ба ҳисоб ба анбори github-и ширкати шумо дастрасӣ медиҳем ва анбори нави хусусиро бо ном ба монанди AmazingAppMatch эҷод мекунем.

3. Насб кардани Fastlane ва утилитаи мувофиқ

Терминалро кушоед, ба ҷузвдони лоиҳа равед ва fastlane-ро тавре, ки дар нишон дода шудааст, оғоз кунед дастури расмӣ. Пас аз ворид кардани фармон

$ fastlane init

Аз шумо хоҳиш карда мешавад, ки конфигуратсияҳои дастраси истифодаро интихоб кунед. Варианти чорумро интихоб кунед - насби дастӣ лоиҳа.

Мо дар озмоишгоҳи Firebase озмоишҳои инструменталӣ мегузаронем. Қисми 1: Лоиҳаи iOS

Лоиҳа феҳристи нави fastlane дорад, ки ду файлро дар бар мегирад - Appfile ва Fastfile. Хулоса, мо маълумоти хадамотро дар Appfile нигоҳ медорем ва дар Fastfile корҳо менависем, ки хатҳоро бо истилоҳоти Fastlane меноманд. Ман тавсия медиҳам, ки ҳуҷҷатҳои расмӣ хонед: вақтҳо, два.

Appfile -ро дар муҳаррири матнии дӯстдоштаи худ кушоед ва онро ба шакли зерин оваред:

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

Мо ба терминал бармегардем ва мувофиқи дастури расмӣ мо ба танзим кардани мувофиқат шурӯъ мекунем.

$ fastlane match init
$ fastlane match development

Баъдан, маълумоти дархостшударо ворид кунед - анбор, ҳисоб, парол ва ғайра.

Ин ба муҳим аст: Вақте ки шумо бори аввал утилитаи мувофиқро оғоз мекунед, аз шумо хоҳиш карда мешавад, ки паролро барои рамзкушоӣ кардани анбор ворид кунед. Нигоҳ доштани ин парол хеле муҳим аст; ҳангоми насб кардани сервери CI ба мо он лозим мешавад!

Дар папкаи fastlane файли нав пайдо шуд - Matchfile. Онро дар муҳаррири матнии дӯстдоштаи худ кушоед ва онро чунин намоиш диҳед:

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

Мо онро маҳз ҳамин тавр пур мекунем, агар мо хоҳем, ки дар оянда мувофиқатро барои имзои сохтмонҳо барои намоиш дар Crashlytics ва/ё AppStore истифода барем, яъне барои имзои ID бастаи замимаи шумо.

Аммо, тавре ки мо дар ёд дорем, мо барои имзои сохтани санҷиш як ID-и махсуси Wildcard эҷод кардем. Аз ин рӯ, Fastfile -ро кушоед ва хати навро ворид кунед:

lane :testing_build_for_firebase do

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

end

Захира кунед ва ба терминал ворид шавед

fastlane testing_build_for_firebase

ва мо мебинем, ки чӣ тавр fastlane шаҳодатномаи нав эҷод кардааст ва онро дар репозиторий ҷойгир кардааст. Аҷоиб!

XCode-ро кушоед. Ҳоло мо профили зарурии таъминоти шакли Match Development com.company.* дорем, ки он бояд дар бахши таъминот барои ҳадафҳои AmazingApp ва AmazingAppUITests муайян карда шавад.

Мо дар озмоишгоҳи Firebase озмоишҳои инструменталӣ мегузаронем. Қисми 1: Лоиҳаи iOS

Илова кардани хат барои васл кардани санҷишҳо боқӣ мемонад. Биёед ба анбор лоиҳаи плагин барои fastlane, ки танзими содиротро ба Firebase Test Lab осонтар мекунад ва дастурҳоро иҷро мекунад.

Биёед аз мисоли аслӣ нусхабардорӣ кунем, то lane testing_build_for_firebase мо чунин ба анҷом расад:


 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

Барои маълумоти пурра дар бораи насб кардани fastlane дар CircleCI, ман тавсия медиҳам, ки ҳуҷҷатҳои расмиро хонед борҳо, два.

Фаромӯш накунед, ки ба 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. Дар бораи курсии санҷишии мо чӣ гуфтан мумкин аст? Танзими Firebase.

Биёед ба он гузарем, ки мақола барои чӣ навишта шудааст.

Эҳтимол барномаи шумо Firebase-ро дар нақшаи ройгон истифода мебарад ё шояд умуман не. Мутлақо ҳеҷ тафовути бунёдӣ вуҷуд надорад, зеро барои эҳтиёҷоти санҷиш мо метавонем як лоиҳаи алоҳидаро бо истифодаи яксолаи ройгон эҷод кунем (хуш, дуруст?)

Мо ба ҳисоби инфрасохтори худ ворид мешавем (ё ягон чизи дигар, муҳим нест) ва ба он меравем Саҳифаи консолии Firebase. Лоиҳаи нав бо номи AmazingAppUITests эҷод кунед.

Ин ба муҳим аст: Дар қадами қаблӣ дар Fastfile дар lane firebase_test_lab_ios_xctest параметри gcp_project бояд ба номи лоиҳа мувофиқат кунад.

Мо дар озмоишгоҳи Firebase озмоишҳои инструменталӣ мегузаронем. Қисми 1: Лоиҳаи iOS

Танзимоти пешфарз ба мо хеле мувофиқанд.

Варақаро напӯшед, дар ҳамон ҳисоб сабти ном кунед Gcloud - ин тадбири зарурист, зеро муошират бо Firebase бо истифода аз интерфейси консолии gcloud сурат мегирад.

Google барои як сол 300 доллар медиҳад, ки дар заминаи гузаронидани санҷишҳо ба як соли истифодаи ройгони хидмат баробар аст. Мо маълумоти пардохти шуморо ворид мекунем, дебети санҷишии $1-ро интизор мешавем ва ба ҳисоби шумо $300 мегирем. Пас аз як сол, лоиҳа ба таври худкор ба тарофаҳои ройгон гузаронида мешавад, бинобар ин дар бораи талафоти эҳтимолии пул хавотир шудан лозим нест.

Биёед ба ҷадвал бо лоиҳаи Firebase баргардем ва онро ба нақшаи тарофавии Blaze интиқол диҳем - ҳоло мо чизе дорем, ки агар аз меъёр зиёд бошад, пардохт кунем.

Дар интерфейси gcloud, лоиҳаи Firebase-и моро интихоб кунед, банди асосии менюи "Директория" -ро интихоб кунед ва API-и абрии Testing ва API Tools Result -ро илова кунед.

Мо дар озмоишгоҳи Firebase озмоишҳои инструменталӣ мегузаронем. Қисми 1: Лоиҳаи iOS

Пас ба менюи "IAM ва маъмурият" -> Ҳисобҳои хидматӣ -> Эҷоди ҳисоби хидматрасонӣ гузаред. Мо барои таҳрири лоиҳа ҳуқуқ медиҳем.

Мо дар озмоишгоҳи Firebase озмоишҳои инструменталӣ мегузаронем. Қисми 1: Лоиҳаи iOS

Калиди API дар формати JSON эҷод кунед

Мо дар озмоишгоҳи Firebase озмоишҳои инструменталӣ мегузаронем. Қисми 1: Лоиҳаи iOS

Мо каме дертар ба JSON-и зеркашидашуда ниёз дорем, аммо ҳоло мо танзимоти озмоишии озмоиширо ба анҷом мерасонем.

5. Насб кардани CircleCI

Саволи оқилона ба миён меояд - бо паролҳо чӣ бояд кард? Механизми тағирёбандаи муҳити зисти мошини сохтани мо ба мо кӯмак мекунад, ки паролҳо ва дигар маълумоти ҳассосро ҳифз кунем. Дар танзимоти лоиҳаи CircleCI, тағирёбандаҳои муҳити атрофро интихоб кунед

Мо дар озмоишгоҳи Firebase озмоишҳои инструменталӣ мегузаронем. Қисми 1: Лоиҳаи iOS
Ва тағирёбандаҳои зеринро насб кунед:

  • калид: GOOGLE_APPLICATION_CREDENTIALS
    арзиш: мундариҷаи файли json калиди ҳисоби хидмати gcloud
  • калид: MATCH_PASSWORD
    арзиш: парол барои кушодани анбори github бо сертификатҳо
  • калид: FASTLANE_PASSWORD
    арзиш: пароли ҳисоби инфрасохтори Портали Developer Apple

Мо тағиротро захира мекунем, PR эҷод мекунем ва онро барои баррасӣ ба роҳбари дастаи мо мефиристем.

Натиҷаҳо

Дар натиҷаи ин амалҳои оддӣ, мо стенди хуб ва устувори корӣ бо қобилияти сабт кардани видео дар экрани дастгоҳ ҳангоми санҷиш ба даст овардем. Дар мисоли санҷиш, ман модели дастгоҳи iPhone X-ро муайян кардам, аммо ферма интихоби бойро аз омезиши моделҳои гуногун ва версияҳои iOS таъмин мекунад.

Қисми дуюм ба марҳила ба марҳила насб кардани озмоишгоҳи Firebase Test Lab барои лоиҳаи Android бахшида мешавад.

Манбаъ: will.com

Илова Эзоҳ