Провеждаме инструментални тестове в Firebase Test Lab. Част 1: iOS проект

Провеждаме инструментални тестове в Firebase Test Lab. Част 1: iOS проект

Казвам се Дмитрий, работя като тестер в компанията MEL наука. Съвсем наскоро приключих работа с една сравнително скорошна функция от Тестова лаборатория на Firebase — а именно с инструментално тестване на приложения за iOS, използвайки собствената рамка за тестване XCUITest.

Преди това вече бях пробвал Firebase Test Lab за Android и много ми хареса всичко, така че реших да опитам да поставя тестовата инфраструктура на iOS на проекта на същата основа. Трябваше да търся много в Google и не всичко се получи от първия път, затова реших да напиша статия с уроци за тези, които все още се борят.

Така че, ако имате UI тестове на проект за iOS, вече можете да опитате да ги стартирате на реални устройства днес, любезно предоставени от Good Corporation. За тези, които се интересуват, добре дошли в кат.

В историята реших да надградя върху някои първоначални данни - частно хранилище в GitHub и системата за изграждане CircleCI. Името на приложението е AmazingApp, bundleID е com.company.amazingapp. Представям тези данни веднага, за да намаля последващото объркване.

Ако сте внедрили определени решения във вашия проект по различен начин, споделете опита си в коментарите.

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

Създайте нов клон на проекта за UI тестове:

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

Нека отворим проекта в XCode и създадем нов Target с UI тестове [XCode -> File -> New -> Target -> iOS Testing Bundle], като му дадем разбиращото се име AmazingAppUITests.

Провеждаме инструментални тестове в Firebase Test Lab. Част 1: iOS проект

Отидете в раздела Build Phases на създадената цел и проверете за наличието на Target Dependencies - AmazingApp, в Compile Sources - AmazingAppUITests.swift.

Добра практика е да отделите различни опции за изграждане в отделни схеми. Ние създаваме схема за нашите UI тестове [XCode -> Product -> Scheme -> New Scheme] и ѝ даваме същото име: AmazingAppUITests.

Изграждането на създадената схема трябва да включва целта на основното приложение - AmazingApp и тестове за целеви потребителски интерфейс - AmazingAppUITests - вижте екранната снимка

Провеждаме инструментални тестове в Firebase Test Lab. Част 1: iOS проект

След това създаваме нова конфигурация на компилация за UI тестове. В XCode щракнете върху файла на проекта и отидете в секцията Информация. Кликнете върху „+“ и създайте нова конфигурация, например XCtest. Ще имаме нужда от това в бъдеще, за да избегнем танците с тамбура, когато става въпрос за подписване на кодове.

Провеждаме инструментални тестове в Firebase Test Lab. Част 1: iOS проект

Във вашия проект има поне три Target: основното приложение, модулни тестове (в края на краищата те съществуват, нали?) и Target UI тестове, които създадохме.

Отидете на Target AmazingApp, раздел Настройки за компилация, раздел Самоличност за подписване на код. За конфигурацията на XCtest изберете iOS Developer. В секцията Стил на подписване на код изберете Ръчно. Все още не сме генерирали профил за осигуряване, но определено ще се върнем към него малко по-късно.

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

2. Създаване на проект в програмата за разработчици на Apple

Отидете на страницата на програмата за разработчици на Apple, отидете на секцията Сертификати, идентификатори и профили и след това на колоната Идентификационни номера на приложения на елемента Идентификатори. Създайте нов идентификатор на приложение, наречен AmazingAppUITests и bundleID com.company.amazingappuitests.

Провеждаме инструментални тестове в Firebase Test Lab. Част 1: iOS проект

Сега имаме възможност да подписваме нашите тестове с отделен сертификат, но... Процедурата за сглобяване на компилация за тестване включва асемблиране на самото приложение и асемблиране на тестовия инструмент. Съответно сме изправени пред проблема с подписването на два идентификатора на пакет с един профил за осигуряване. За щастие има просто и елегантно решение - Wildcard App ID. Повтаряме процедурата за създаване на нов App ID, но вместо Explicit App 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 с заместващ символ, за да подпишем тестовата компилация. Затова отворете 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 и следвайте инструкциите.

Нека копираме-поставим от оригиналния пример, така че нашата лента 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 в лентата firebase_test_lab_ios_xctest параметърът gcp_project трябва да съответства на името на проекта.

Провеждаме инструментални тестове в Firebase Test Lab. Част 1: iOS проект

Настройките по подразбиране ни устройват доста добре.

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

Google дава $300 за една година, което в контекста на извършване на автотестове е еквивалентно на една година безплатно използване на услугата. Ние въвеждаме вашата информация за плащане, изчакваме тестовия дебит от $1 и получаваме $300 по вашата сметка. След една година проектът автоматично ще бъде прехвърлен към безплатен тарифен план, така че няма нужда да се притеснявате за възможна загуба на пари.

Нека се върнем в раздела с проекта Firebase и го прехвърлим в тарифния план Blaze - сега имаме какво да платим, ако лимитът бъде надвишен.

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

Провеждаме инструментални тестове в Firebase Test Lab. Част 1: iOS проект

След това отидете на елемента от менюто „IAM и администрация“ -> Акаунти за услуги -> Създаване на акаунт за услуги. Предоставяме права за редакция на проекта.

Провеждаме инструментални тестове в Firebase Test Lab. Част 1: iOS проект

Създайте API ключ във формат JSON

Провеждаме инструментални тестове в Firebase Test Lab. Част 1: iOS проект

Изтегленият JSON ще ни трябва малко по-късно, но засега ще считаме настройката на Test Lab за завършена.

5. Настройка на CircleCI

Възниква разумен въпрос - какво да правя с паролите? Механизмът за променливи на средата на нашата компилираща машина ще ни помогне да съхраняваме сигурно нашите пароли и други чувствителни данни. В настройките на проекта CircleCI изберете Променливи на средата

Провеждаме инструментални тестове в Firebase Test Lab. Част 1: iOS проект
И задайте следните променливи:

  • ключ: GOOGLE_APPLICATION_CREDENTIALS
    стойност: съдържанието на json файла на ключа на акаунта на услугата gcloud
  • ключ: MATCH_PASSWORD
    стойност: парола за дешифриране на хранилището на github със сертификати
  • ключ: FASTLANE_PASSWORD
    стойност: парола за акаунт в инфраструктурата на портала за разработчици на Apple

Ние запазваме промените, създаваме PR и го изпращаме на нашия ръководител на екипа за преглед.

Резултати от

В резултат на тези прости манипулации получихме добра, стабилна работеща стойка с възможност за запис на видео на екрана на устройството по време на тестването. В тестовия пример посочих модела на устройството iPhone X, но фермата предоставя богат избор от комбинация от различни модели и версии на iOS.

Втората част ще бъде посветена на стъпка по стъпка настройка на Firebase Test Lab за Android проект.

Източник: www.habr.com

Добавяне на нов коментар