Ние спроведуваме инструментални тестови во Firebase Test Lab. Дел 1: проект за iOS

Ние спроведуваме инструментални тестови во Firebase Test Lab. Дел 1: проект за iOS

Јас се викам Дмитриј, работам како тестер во компанијата Наука за МЕЛ. Неодамна завршив да се занимавам со релативно неодамнешна карактеристика од Лабораторија за тестирање на Firebase — имено, со инструментално тестирање на апликации за iOS со користење на домашната рамка за тестирање XCUITest.

Пред ова, веќе ја пробав Firebase Test Lab за Андроид и навистина ми се допадна сè, па решив да се обидам да ја ставам инфраструктурата за тестирање iOS на проектот на иста основа. Морав многу да гуглам и сè не излезе од прв пат, па решив да напишам статија за туторијал за оние кои сè уште се мачат.

Значи, ако имате тестови за интерфејс на проект за iOS, веќе може да се обидете да ги извршите на вистински уреди денес, љубезно обезбедени од Good Corporation. За заинтересираните, добредојдовте во мачка.

Во приказната, решив да изградам некои првични податоци - приватно складиште на GitHub и системот за градење CircleCI. Името на апликацијата е AmazingApp, bundleID е com.company.amazingapp. Ги презентирам овие податоци веднаш за да ја намалам последователната конфузија.

Доколку поинаку имплементиравте одредени решенија во вашиот проект, споделете го вашето искуство во коментарите.

1. Самите тестови

Создадете нова проектна гранка за тестови за кориснички интерфејс:

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

Ајде да го отвориме проектот во XCode и да создадеме нова цел со тестови за интерфејс [XCode -> Датотека -> Ново -> Цел -> Пакет за тестирање на iOS], давајќи ѝ го самообјаснивото име AmazingAppUITests.

Ние спроведуваме инструментални тестови во Firebase Test Lab. Дел 1: проект за iOS

Одете во делот Изградба на фази на креираната цел и проверете дали има Target Dependencies - AmazingApp, во Compile Sources - AmazingAppUITests.swift.

Добра практика е да се одделат различни опции за изградба во посебни шеми. Ние создаваме шема за нашите тестови за интерфејс [XCode -> Product -> Scheme -> New Scheme] и му го даваме истото име: AmazingAppUITests.

Изградбата на креираната шема мора да ја вклучува Целта на главната апликација - тестови AmazingApp и Target UI - AmazingAppUITests - видете ја сликата од екранот

Ние спроведуваме инструментални тестови во Firebase Test Lab. Дел 1: проект за iOS

Следно, создаваме нова конфигурација за градба за тестови за интерфејс. Во XCode, кликнете на проектната датотека и одете во делот Инфо. Кликнете на „+“ и креирајте нова конфигурација, на пример XCtest. Ова ќе ни треба во иднина за да избегнеме танцување со тамбура кога станува збор за потпишување кодови.

Ние спроведуваме инструментални тестови во Firebase Test Lab. Дел 1: проект за iOS

Има најмалку три Цели во вашиот проект: главната апликација, единечни тестови (на крајот на краиштата, тие постојат, нели?) и тестовите на Target UI што ги создадовме.

Одете во Target AmazingApp, табот Build Settings, делот за идентитет за потпишување код. За конфигурацијата XCtest, изберете iOS Developer. Во делот Стил на потпишување код, изберете Рачно. Сè уште немаме генерирано профил за обезбедување, но дефинитивно ќе се вратиме на него малку подоцна.

За Target AmazingAppUITests го правиме истото, но во колоната Product Bundle Identifier внесуваме com.company.amazingappuitests.

2. Поставување проект во Програмата за програмери на Apple

Одете на страницата на Програмата за програмери на Apple, одете во делот Сертификати, идентификатори и профили, а потоа во колоната Идентификатори на апликации од ставката Идентификатори. Создадете нов ID на апликација наречен AmazingAppUITests и bundleID com.company.amazingappuitests.

Ние спроведуваме инструментални тестови во Firebase Test Lab. Дел 1: проект за iOS

Сега имаме можност да ги потпишеме нашите тестови со посебен сертификат, но... Постапката за составување на градба за тестирање вклучува склопување на самата апликација и склопување на тест тркачот. Соодветно на тоа, се соочуваме со проблемот на потпишување на две ИД на пакети со еден профил за обезбедување. За среќа, постои едноставно и елегантно решение - Wildcard App ID. Ја повторуваме постапката за креирање на нов ID на апликацијата, но наместо Експлицитен ID на апликацијата, изберете Wildcard App ID како на сликата од екранот.

Ние спроведуваме инструментални тестови во Firebase Test Lab. Дел 1: проект за iOS

Во овој момент, завршивме со работа со developer.apple.com, но нема да го минимизираме прозорецот на прелистувачот. Ајде да одиме на Веб-страница за документација Fastlane и прочитајте за алатката Match од корица до корица.

Внимателен читател забележа дека за да ја користиме оваа алатка ќе ни треба приватно складиште и сметка со пристап и до Програмата за програмери на Apple и до Github. Ние создаваме (ако одеднаш нема такво нешто) сметка на формата [заштитена по е-пошта], излезе со силна лозинка, регистрирајте ја на developer.apple.com и назначете ја како администратор на проектот. Следно, на сметката и даваме пристап до складиштето github на вашата компанија и создаваме ново приватно складиште со име како AmazingAppMatch.

3. Поставување на Fastlane и алатката за натпревар

Отворете терминал, одете во папката со проектот и иницијализирајте го fastlane како што е наведено во официјален прирачник. По внесувањето на командата

$ fastlane init

Ќе ви биде побарано да изберете достапни конфигурации за користење. Изберете ја четвртата опција - рачно поставување на проектот.

Ние спроведуваме инструментални тестови во Firebase Test Lab. Дел 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

Го пополнуваме токму на овој начин ако сакаме да користиме Match во иднина за да потпишуваме изданија за прикажување во 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 Test Lab. Дел 1: проект за iOS

Останува да се додаде лента за склопување тестови. Ајде да одиме на складиште проект за приклучок за fastlane што го олеснува поставувањето на извоз во Firebase Test Lab и следење на упатствата.

Ајде да направиме copy-paste од оригиналниот пример, така што нашата лента 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 in lane firebase_test_lab_ios_xc, параметарот gcp_project треба да одговара на името на проектот.

Ние спроведуваме инструментални тестови во Firebase Test Lab. Дел 1: проект за iOS

Стандардните поставки доста добро ни одговараат.

Не го затворајте јазичето, регистрирајте се под истата сметка во Gcloud - ова е неопходна мерка, бидејќи комуникацијата со Firebase се јавува со помош на интерфејсот на конзолата gcloud.

Google дава 300 долари за една година, што во контекст на вршење автотестови е еквивалентно на една година бесплатно користење на услугата. Ги внесуваме вашите информации за плаќање, чекаме тест за задолжување од $1 и добиваме $300 на вашата сметка. По една година, проектот автоматски ќе се префрли на бесплатен тарифен план, така што нема потреба да се грижите за можно губење на пари.

Да се ​​вратиме на јазичето со проектот Firebase и да го префрлиме на тарифниот план Блаже - сега имаме што да платиме ако се надмине лимитот.

Во интерфејсот на gcloud, изберете го нашиот проект Firebase, изберете ја главната ставка од менито „Директориум“ и додајте ги API-то за тестирање на облакот и API-то на резултатите од алатките за облак.

Ние спроведуваме инструментални тестови во Firebase Test Lab. Дел 1: проект за iOS

Потоа одете во ставката од менито „IAM и администрација“ -> Сметки за услуги -> Креирај сметка за услуга. Даваме права за уредување на проектот.

Ние спроведуваме инструментални тестови во Firebase Test Lab. Дел 1: проект за iOS

Креирајте клуч API во JSON формат

Ние спроведуваме инструментални тестови во Firebase Test Lab. Дел 1: проект за iOS

Ќе ни треба преземениот JSON малку подоцна, но засега ќе сметаме дека поставувањето на тест лабораторија е завршено.

5. Поставување CircleCI

Се поставува разумно прашање - што да се прави со лозинките? Механизмот на променливата околина на нашата машина за градење ќе ни помогне безбедно да ги складираме нашите лозинки и другите чувствителни податоци. Во поставките на проектот CircleCI, изберете Environment Variables

Ние спроведуваме инструментални тестови во Firebase Test Lab. Дел 1: проект за iOS
И поставете ги следните променливи:

  • клуч: GOOGLE_APPLICATION_CREDENTIALS
    вредност: содржината на датотеката json на клучот за сметката на услугата gcloud
  • клуч: MATCH_PASSWORD
    вредност: лозинка за дешифрирање на складиштето github со сертификати
  • клуч: FASTLANE_PASSWORD
    вредност: лозинка за инфраструктурна сметка на порталот за програмери на Apple

Ги зачувуваме промените, создаваме ПР и го испраќаме до нашиот тим за преглед.

Резултатите од

Како резултат на овие едноставни манипулации, добивме добар, стабилен работен штанд со можност за снимање видео на екранот на уредот за време на тестирањето. Во примерот за тестирање, го наведов моделот на уредот iPhone X, но фармата обезбедува богат избор од комбинација на различни модели и верзии на iOS.

Вториот дел ќе биде посветен на чекор-по-чекор поставување на Firebase Test Lab за проект со Android.

Извор: www.habr.com

Додадете коментар