Биз Firebase Test Lab'да инструменталдык сыноолорду жүргүзөбүз. 1-бөлүк: iOS долбоору

Биз Firebase Test Lab'да инструменталдык сыноолорду жүргүзөбүз. 1-бөлүк: iOS долбоору

Менин атым Дмитрий, мен компанияда тестиер болуп иштейм MEL Science. Жакында мен салыштырмалуу жаңы функция менен иштөөнү аяктадым Firebase сыноо лабораториясы — тактап айтканда, XCUITest жергиликтүү тестирлөө алкагын колдонуу менен iOS тиркемелерин инструменталдык тестирлөө менен.

Буга чейин мен Android үчүн Firebase Test Lab программасын сынап көргөм жана бардыгы абдан жакты, ошондуктан долбоордун iOS тесттик инфраструктурасын ошол эле негизде коюуну чечтим. Мен 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 -> Файл -> Жаңы -> Максат -> iOS Testing Bundle], ага AmazingAppUITests өзүн-өзү түшүндүрүүчү аталышты берели.

Биз Firebase Test Lab'да инструменталдык сыноолорду жүргүзөбүз. 1-бөлүк: iOS долбоору

Түзүлгөн Максаттын Build Phases бөлүмүнө өтүңүз жана Compile Sources - AmazingAppUITests.swift ичинде Максаттуу көз карандылыктардын бар-жоктугун текшериңиз - AmazingApp.

Ар кандай куруу варианттарын өзүнчө схемаларга бөлүү жакшы практика болуп саналат. Биз UI сыноолорубуз үчүн схеманы түзөбүз [XCode -> Продукт -> Схема -> Жаңы схема] жана ага ошол эле атты беребиз: AmazingAppUITests.

Түзүлгөн схеманын түзүлүшү негизги колдонмонун Максатын камтышы керек - AmazingApp жана Target UI тесттери - AmazingAppUITests - скриншотту караңыз

Биз Firebase Test Lab'да инструменталдык сыноолорду жүргүзөбүз. 1-бөлүк: iOS долбоору

Андан кийин, UI сыноолору үчүн жаңы конфигурацияны түзөбүз. XCodeде долбоордун файлын чыкылдатып, маалымат бөлүмүнө өтүңүз. "+" баскычын чыкылдатып, жаңы конфигурацияны түзүңүз, мисалы XCtest. Кодго кол коюуга келгенде дап менен бийлебеш үчүн бул бизге келечекте керек болот.

Биз Firebase Test Lab'да инструменталдык сыноолорду жүргүзөбүз. 1-бөлүк: iOS долбоору

Долбооруңузда жок дегенде үч Максат бар: негизги тиркеме, бирдик тесттери (анткени, алар бар, туурабы?) жана биз түзгөн Target UI тесттери.

Target AmazingApp, Build Орнотуулар өтмөгүнө, Code Signing Identity бөлүмүнө өтүңүз. XCtest конфигурациясы үчүн iOS Иштеп чыгуучусун тандаңыз. Кодго кол коюу стили бөлүмүндө Кол менен тандаңыз. Биз азырынча провизия профилин түзө элекпиз, бирок ага бир аздан кийин сөзсүз кайрылабыз.

Target AmazingAppUITests үчүн биз да ушундай кылабыз, бирок Продукт пакетинин идентификатор тилкесинде com.company.amazingappuitests киребиз.

2. Apple Developer программасында долбоорду орнотуу

Apple Иштеп чыгуучу программасынын барагына өтүп, Сертификаттар, Идентификаторлор жана Профильдер бөлүмүнө, андан кийин Идентификаторлор пунктунун Колдонмо ID'лери тилкесине өтүңүз. AmazingAppUITests жана bundleID com.company.amazingappuitests деп аталган жаңы Колдонмо ID түзүңүз.

Биз Firebase Test Lab'да инструменталдык сыноолорду жүргүзөбүз. 1-бөлүк: iOS долбоору

Эми биз тесттерибизге өзүнчө сертификат менен кол коюуга мүмкүнчүлүгүбүз бар, бирок... Сыноо үчүн конструкцияны чогултуу процедурасы тиркеменин өзүн чогултууну жана тесттик жөө күлүктү чогултууну камтыйт. Демек, биз бир камсыздоо профили менен эки таңгак идентификаторуна кол коюу көйгөйүнө туш болуп жатабыз. Бактыга жараша, жөнөкөй жана жарашыктуу чечим бар - Wildcard App ID. Жаңы Колдонмо ID түзүү процедурасын кайталайбыз, бирок Ачык Колдонмонун ID ордуна скриншоттогудай Wildcard Колдонмо ID тандаңыз.

Биз Firebase Test Lab'да инструменталдык сыноолорду жүргүзөбүз. 1-бөлүк: iOS долбоору

Бул учурда, биз developer.apple.com менен иштеп бүттүк, бирок биз браузердин терезесин кичирейтпейбиз. баралы Fastlane документация сайты жана Match утилитасы жөнүндө башынан аягына чейин окуңуз.

Кунт коюп окурман бул утилитаны колдонуу үчүн бизге жеке репозиторий жана Apple Developer программасына жана Githubга кирүү мүмкүнчүлүгү бар каттоо эсеби керек болорун байкады. Биз форманын эсебин түзөбүз (эгерде күтүлбөгөн жерден андай нерсе жок болсо). [электрондук почта корголгон], күчтүү сырсөз таап, аны developer.apple.com сайтында каттаңыз жана аны долбоордун администратору катары дайындаңыз. Андан кийин, каттоо эсебиңизге компанияңыздын github репозиторийине кирүү мүмкүнчүлүгүн беребиз жана AmazingAppMatch сыяктуу ат менен жаңы жеке репозиторийди түзөбүз.

3. Fastlane жана матч утилитасын орнотуу

Терминалды ачып, долбоор менен папкага өтүңүз жана көрсөтүлгөндөй fastlane инициализациялаңыз расмий колдонмо. Буйрук киргенден кийин

$ fastlane init

Сизден жеткиликтүү колдонуу конфигурацияларын тандоо сунушталат. Төртүнчү жолду тандаңыз - долбоорду кол менен орнотуу.

Биз Firebase Test Lab'да инструменталдык сыноолорду жүргүзөбүз. 1-бөлүк: iOS долбоору

Долбоордо эки файлды камтыган жаңы каталогдун fastlane бар - Appfile жана Fastfile. Кыскача айтканда, биз кызмат маалыматтарын Appfileде сактайбыз жана Fastlane терминологиясында тилкелер деп аталган Fastfileде тапшырмаларды жазабыз. Мен расмий документтерди окууну сунуштайм: убакыт, два.

Сүйүктүү текст редакторуңузда 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де көрсөтүү үчүн түзмөлөргө кол коюу үчүн дал келүүнү колдонууну кааласак, аны дал ушул жол менен толтурабыз, башкача айтканда, колдонмоңуздун таңгак идентификаторуна кол коюу үчүн.

Бирок, эсибизде болгондой, биз сыноо түзүүгө кол коюу үчүн атайын Wildcard ID түздүк. Ошондуктан, 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 Test Lab'да инструменталдык сыноолорду жүргүзөбүз. 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

CircleCIде fastlane орнотуу жөнүндө толук маалымат алуу үчүн мен расмий документтерди окууну сунуштайм убакыт, два.

Биздин 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 аттуу жаңы долбоорду түзүңүз.

Ал үчүн абдан маанилүү болуп саналат: Firebase_test_lab_ios_xctest тилкесинде Fastfile ичиндеги мурунку кадамда gcp_project параметри долбоордун атына дал келиши керек.

Биз Firebase Test Lab'да инструменталдык сыноолорду жүргүзөбүз. 1-бөлүк: iOS долбоору

Демейки орнотуулар бизге абдан ылайыктуу.

Өтмөктү жаппаңыз, ошол эле аккаунтка катталыңыз Gcloud - бул зарыл чара, анткени Firebase менен байланыш gcloud консолунун интерфейси аркылуу ишке ашат.

Google бир жылга 300 доллар берип жатат, бул автотесттерди өткөрүү контекстинде кызматты бир жылдык бекер колдонууга барабар. Биз сиздин төлөм маалыматыңызды киргизип, $1 тесттик дебетин күтөбүз жана эсебиңизге $300 алабыз. Бир жылдан кийин долбоор автоматтык түрдө бекер тарифтик планга которулат, андыктан акчаны жоготуу мүмкүн деп кооптонуунун кереги жок.

Келгиле, Firebase долбоору менен кошумча таблицага кайрылып, аны Blaze тарифтик планына которолу – эми бизде лимиттен ашып кетсе төлөй турган нерсе бар.

gcloud интерфейсинде Firebase долбоорубузду тандап, "Каталог" негизги менюсун тандап, Cloud Testing API жана Cloud Tools Result API кошуңуз.

Биз Firebase Test Lab'да инструменталдык сыноолорду жүргүзөбүз. 1-бөлүк: iOS долбоору

Андан кийин меню пунктуна өтүңүз "IAM жана администрация" -> Кызмат эсептери -> Кызмат эсебин түзүү. Биз долбоорду түзөтүү укугун беребиз.

Биз Firebase Test Lab'да инструменталдык сыноолорду жүргүзөбүз. 1-бөлүк: iOS долбоору

JSON форматында API ачкычын түзүңүз

Биз Firebase Test Lab'да инструменталдык сыноолорду жүргүзөбүз. 1-бөлүк: iOS долбоору

Жүктөлүп алынган JSON бизге бир аздан кийин керек болот, бирок азыр биз Сыноо лабораториясынын орнотулганын карап чыгабыз.

5. CircleCI орнотуу

Акылга сыярлык суроо туулат - сырсөздөр менен эмне кылуу керек? Куруучу машинабыздын айлана-чөйрөнүн өзгөрмө механизми сырсөздөрүбүздү жана башка купуя маалыматтарыбызды коопсуз сактоого жардам берет. CircleCI долбоорунун жөндөөлөрүнөн Environment Variables тандаңыз

Биз Firebase Test Lab'да инструменталдык сыноолорду жүргүзөбүз. 1-бөлүк: iOS долбоору
Жана төмөнкү өзгөрмөлөрдү орнотуңуз:

  • ачкыч: GOOGLE_APPLICATION_CREDENTIALS
    маани: gcloud кызмат эсеп ачкычынын json файлынын мазмуну
  • ачкыч: MATCH_PASSWORD
    маани: сертификаттар менен github репозиторийин чечмелөө үчүн сырсөз
  • ачкыч: FASTLANE_PASSWORD
    маани: Apple Developer Portal инфраструктуралык эсептин сырсөзү

Биз өзгөрүүлөрдү сактап, PR түзүп, аны биздин команданын жетекчисине карап чыгууга жөнөтөбүз.

натыйжалары

Бул жөнөкөй манипуляциялардын натыйжасында биз тестирлөө учурунда аппараттын экранында видео жазуу мүмкүнчүлүгү бар жакшы, туруктуу жумушчу стенд алдык. Сыноо мисалында мен iPhone X аппаратынын моделин көрсөттүм, бирок чарба ар кандай моделдердин жана iOS версияларынын айкалышынан бай тандоону камсыз кылат.

Экинчи бөлүк Android долбоору үчүн Firebase Test Lab программасын этап-этабы менен орнотууга арналат.

Source: www.habr.com

Комментарий кошуу