Бид Firebase Test Lab дээр багажийн туршилт хийдэг. 1-р хэсэг: iOS төсөл

Бид Firebase Test Lab дээр багажийн туршилт хийдэг. 1-р хэсэг: iOS төсөл

Намайг Дмитрий гэдэг, би компанид шалгагчаар ажилладаг MEL шинжлэх ухаан. Саяхан би харьцангуй саяхан гарсан онцлогтой харьцаж дууслаа 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 тестийн багц], түүнд 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 төсөл

Таны төсөлд дор хаяж гурван Зорилтот зорилт байна: үндсэн програм, нэгж тестүүд (эцсийн эцэст тэдгээр нь байдаг, тийм ээ?) болон бидний үүсгэсэн Зорилтот UI тестүүд.

Target AmazingApp, Build Settings таб, Code Signing Identity хэсэг рүү очно уу. XCtest тохиргооны хувьд iOS хөгжүүлэгчийг сонгоно уу. Код гарын үсэг зурах хэв маяг хэсгээс Гараар сонгоно уу. Бид нөөцийн профайлыг хараахан үүсгээгүй байгаа ч хэсэг хугацааны дараа үүн рүү буцах нь гарцаагүй.

Target AmazingAppUITests-ийн хувьд бид ижил зүйлийг хийдэг боловч Бүтээгдэхүүний багц танигч баганад com.company.amazingappuitests оруулна.

2. Apple-ийн хөгжүүлэгчийн хөтөлбөрт төсөл тохируулах

Apple-ийн хөгжүүлэгчийн програмын хуудас руу орж, Сертификат, танигч, профайл хэсэг рүү, дараа нь "Таниулагч" зүйлийн "Аппликешны ID" багана руу очно уу. AmazingAppUITests болон bundleID com.company.amazingappuitests нэртэй шинэ Апп ID үүсгээрэй.

Бид Firebase Test Lab дээр багажийн туршилт хийдэг. 1-р хэсэг: iOS төсөл

Одоо бид тестүүддээ тусдаа гэрчилгээтэй гарын үсэг зурах боломж байгаа боловч ... Туршилтанд зориулж бүтээцийг угсрах журам нь програмыг өөрөө угсарч, туршилтын гүйгчийг угсардаг. Үүний дагуу бид нэг провизийн профайлтай хоёр багц ID-д гарын үсэг зурах асуудалтай тулгарч байна. Аз болоход, энгийн бөгөөд гоёмсог шийдэл байдаг - Wildcard App ID. Бид шинэ Апп ID үүсгэх процедурыг давтах боловч Exlicit App ID-ийн оронд дэлгэцийн агшин дээрх шиг Wildcard App ID-г сонгоно уу.

Бид Firebase Test Lab дээр багажийн туршилт хийдэг. 1-р хэсэг: iOS төсөл

Энэ үед бид developer.apple.com-той ажиллаж дууссан ч хөтчийн цонхыг багасгахгүй. Руу явцгаая Fastlane баримт бичгийн сайт мөн Match хэрэгслийн талаар эхнээс нь дуустал уншина уу.

Анхааралтай уншигч энэ хэрэгслийг ашиглахын тулд бидэнд хувийн хадгалах газар, Apple Developer Program болон Github-д хандах боломжтой данс хэрэгтэй болно гэдгийг анзаарсан. Бид маягтын дансыг (хэрэв гэнэт ийм зүйл байхгүй бол) үүсгэдэг [имэйлээр хамгаалагдсан], хүчтэй нууц үг олоод developer.apple.com сайтад бүртгүүлээд төслийн админаар томилно. Дараа нь бид дансанд танай компанийн github репозитор руу нэвтрэх эрхийг олгож, AmazingAppMatch гэх мэт нэртэй шинэ хувийн репозитор үүсгэнэ.

3. Fastlane болон тохирох хэрэгслийг тохируулах

Терминал нээгээд төсөлтэй хавтас руу орж, заасны дагуу fastlane-г эхлүүлнэ үү албан ёсны гарын авлага. Командыг оруулсны дараа

$ fastlane init

Танаас ашиглах боломжтой тохиргоог сонгохыг хүсэх болно. Дөрөв дэх сонголтыг сонгоно уу - төслийн гараар тохируулах.

Бид Firebase Test Lab дээр багажийн туршилт хийдэг. 1-р хэсэг: iOS төсөл

Төсөл нь Appfile болон Fastfile гэсэн хоёр файл агуулсан шинэ лавлах fastlane-тэй болсон. Товчхондоо, бид үйлчилгээний өгөгдлийг 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-д үзүүлэх бүтээцэд гарын үсэг зурах, өөрөөр хэлбэл таны аппликешны багцын ID-д гарын үсэг зурахдаа match ашиглахыг хүсвэл үүнийг яг ингэж бөглөнө.

Гэхдээ бидний санаж байгаагаар бид туршилтын бүтцэд гарын үсэг зурах тусгай 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 туршилтын лабораторид экспорт хийх, зааврыг дагахад хялбар болгодог.

Анхны жишээн дээрээс хуулж буулгаад, бидний 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-ийг алхам алхмаар тохируулахад зориулагдсан болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх