Biz Firebase test laboratoriyasida instrumental testlarni o'tkazamiz. 1-qism: iOS loyihasi

Biz Firebase test laboratoriyasida instrumental testlarni o'tkazamiz. 1-qism: iOS loyihasi

Mening ismim Dmitriy, men kompaniyada sinovchi bo'lib ishlayman MEL fani. Yaqinda men nisbatan yangi xususiyat bilan ishlashni tugatdim Firebase sinov laboratoriyasi — yaʼni, XCUITest mahalliy test tizimi yordamida iOS ilovalarini instrumental sinovdan oʻtkazish bilan.

Bundan oldin, men allaqachon Android uchun Firebase Test Laboratoriyasini sinab ko'rdim va hamma narsa juda yoqdi, shuning uchun men loyihaning iOS test infratuzilmasini bir xil asosda qo'yishga qaror qildim. Men Google'ga juda ko'p bo'lishim kerak edi va hamma narsa birinchi marta ishlamadi, shuning uchun men hali ham kurashayotganlar uchun o'quv maqolasini yozishga qaror qildim.

Shunday qilib, agar sizda iOS loyihasida UI testlari bo'lsa, ularni bugungi kunda Good Corporation tomonidan taqdim etilgan haqiqiy qurilmalarda ishga tushirishga urinib ko'rishingiz mumkin. Qiziqqanlar uchun mushukka xush kelibsiz.

Hikoyada men ba'zi bir dastlabki ma'lumotlarga - GitHub va CircleCI qurish tizimidagi shaxsiy omborga asoslanishga qaror qildim. Ilova nomi AmazingApp, bundleID com.company.amazingapp. Keyingi chalkashliklarni kamaytirish uchun men ushbu ma'lumotlarni darhol taqdim etaman.

Agar siz loyihangizda muayyan echimlarni boshqacha tarzda amalga oshirgan bo'lsangiz, sharhlarda tajribangizni o'rtoqlashing.

1. Sinovlarning o'zi

UI testlari uchun yangi loyiha filialini yarating:

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

Keling, loyihani XCode-da ochamiz va UI testlari bilan yangi Target yaratamiz [XCode -> File -> New -> Target -> iOS Testing Bundle] va unga AmazingAppUITests o'z-o'zidan tushunarli nomini beramiz.

Biz Firebase test laboratoriyasida instrumental testlarni o'tkazamiz. 1-qism: iOS loyihasi

Yaratilgan Nishonning Qurilish bosqichlari bo'limiga o'ting va Maqsadga bog'liqlik mavjudligini tekshiring - AmazingApp, Kompilyatsiya manbalarida - AmazingAppUITests.swift.

Yaxshi amaliyot turli xil qurish variantlarini alohida sxemalarga ajratishdir. Biz UI testlarimiz uchun sxemani yaratamiz [XCode -> Product -> Scheme -> New Scheme] va unga bir xil nom beramiz: AmazingAppUITests.

Yaratilgan sxemaning tuzilishi asosiy ilovaning Targetini o'z ichiga olishi kerak - AmazingApp va Target UI testlari - AmazingAppUITests - skrinshotga qarang

Biz Firebase test laboratoriyasida instrumental testlarni o'tkazamiz. 1-qism: iOS loyihasi

Keyinchalik, biz UI testlari uchun yangi konfiguratsiyani yaratamiz. XCode-da loyiha faylini bosing va Ma'lumot bo'limiga o'ting. “+” tugmasini bosing va yangi konfiguratsiya yarating, masalan, XCtest. Bu kodni imzolashda daf bilan raqsga tushmaslik uchun kelajakda bizga kerak bo'ladi.

Biz Firebase test laboratoriyasida instrumental testlarni o'tkazamiz. 1-qism: iOS loyihasi

Loyihangizda kamida uchta Maqsad mavjud: asosiy dastur, birlik testlari (axir, ular mavjud, shunday emasmi?) va biz yaratgan Target UI testlari.

Target AmazingApp, Build Settings yorlig'i, Code Signing Identity bo'limiga o'ting. XCtest konfiguratsiyasi uchun iOS Developer-ni tanlang. Kodni imzolash uslubi bo'limida Manual-ni tanlang. Biz hozircha provayder profilini yaratmadik, lekin birozdan keyin albatta qaytamiz.

Target AmazingAppUITests uchun biz xuddi shunday qilamiz, lekin Mahsulotlar to'plami identifikatori ustuniga com.company.amazingappuitests kiritamiz.

2. Apple Developer dasturida loyihani sozlash

Apple Developer dasturi sahifasiga o'ting, Sertifikatlar, identifikatorlar va profillar bo'limiga, so'ngra Identifikatorlar elementining Ilova identifikatorlari ustuniga o'ting. AmazingAppUITests va bundleID com.company.amazingappuitests deb nomlangan yangi ilova identifikatorini yarating.

Biz Firebase test laboratoriyasida instrumental testlarni o'tkazamiz. 1-qism: iOS loyihasi

Endi bizda testlarimizni alohida sertifikat bilan imzolash imkoniyati bor, lekin... Sinov uchun konstruksiyani yig‘ish tartibi ilovaning o‘zini yig‘ish va test yuguruvchisini yig‘ishni o‘z ichiga oladi. Shunga ko'ra, biz ikkita to'plam identifikatorini bitta provayder profili bilan imzolash muammosiga duch kelamiz. Yaxshiyamki, oddiy va oqlangan yechim bor - Wildcard App ID. Biz yangi ilova identifikatorini yaratish tartibini takrorlaymiz, lekin aniq ilova identifikatori o'rniga skrinshotdagi kabi Wildcard ilova identifikatorini tanlang.

Biz Firebase test laboratoriyasida instrumental testlarni o'tkazamiz. 1-qism: iOS loyihasi

Ayni paytda biz developer.apple.com bilan ishlashni tugatdik, lekin brauzer oynasini minimallashtirmaymiz. Keling, boraylik Fastlane hujjatlar sayti va Match yordam dasturi haqida boshidan oxirigacha o'qing.

Diqqatli o'quvchi ushbu yordam dasturidan foydalanish uchun bizga shaxsiy ombor va Apple Developer dasturi va Github-ga kirish huquqiga ega hisob qaydnomasi kerakligini payqadi. Biz shaklning hisobini yaratamiz (agar birdaniga bunday narsa bo'lmasa). [elektron pochta bilan himoyalangan], kuchli parolni o'ylab toping, uni developer.apple.com saytida ro'yxatdan o'tkazing va uni loyiha administratori sifatida tayinlang. Keyinchalik, hisob qaydnomangizga kompaniyangizning github omboriga kirish huquqini beramiz va AmazingAppMatch kabi nomli yangi shaxsiy omborni yaratamiz.

3. Fastlane va match yordam dasturini sozlash

Terminalni oching, loyiha bilan jildga o'ting va yuqorida ko'rsatilgandek fastlane-ni ishga tushiring rasmiy qo'llanma. Buyruqni kiritgandan so'ng

$ fastlane init

Sizdan mavjud foydalanish konfiguratsiyalarini tanlashingiz so'raladi. To'rtinchi variantni tanlang - loyihani qo'lda sozlash.

Biz Firebase test laboratoriyasida instrumental testlarni o'tkazamiz. 1-qism: iOS loyihasi

Loyihada ikkita faylni o'z ichiga olgan yangi fastlane katalogi mavjud - Appfile va Fastfile. Xulosa qilib aytganda, biz Appfile-da xizmat ma'lumotlarini saqlaymiz va Fastlane terminologiyasida chiziqlar deb ataladigan Fastfile-da ishlarni yozamiz. Men rasmiy hujjatlarni o'qishni tavsiya qilaman: vaqt, два.

Sevimli matn muharririda Appfile-ni oching va uni quyidagi shaklga keltiring:

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

Biz terminalga qaytamiz va rasmiy qo'llanmaga muvofiq biz moslikni sozlashni boshlaymiz.

$ fastlane match init
$ fastlane match development

Keyin so'ralgan ma'lumotlarni kiriting - ombor, hisob, parol va boshqalar.

Bu uchun muhim ahamiyatga ega: Match yordam dasturini birinchi marta ishga tushirganingizda, sizdan ombor shifrini ochish uchun parolni kiritishingiz so'raladi. Ushbu parolni saqlash juda muhim, bu bizga CI serverini o'rnatishda kerak bo'ladi!

Fastlane papkasida yangi fayl paydo bo'ldi - Matchfile. Uni sevimli matn muharririda oching va uni quyidagicha ko'rsating:

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

Kelajakda Crashlytics va/yoki AppStore’da ko‘rsatish uchun tuzilmalarni imzolash, ya’ni ilovangiz to‘plami identifikatoriga imzo chekish uchun matchdan foydalanmoqchi bo‘lsak, uni aynan shu tarzda to‘ldiramiz.

Ammo, biz eslaganimizdek, biz sinov tuzilishini imzolash uchun maxsus Wildcard ID yaratdik. Shuning uchun, Fastfile-ni oching va yangi qatorga kiring:

lane :testing_build_for_firebase do

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

end

Saqlash va terminalga kiring

fastlane testing_build_for_firebase

va biz fastlane qanday qilib yangi sertifikat yaratganini va uni omborga qo'yganini ko'ramiz. Ajoyib!

XCode-ni oching. Endi bizda AmazingApp va AmazingAppUITests maqsadlari uchun Ta'minlash profili bo'limida ko'rsatilishi kerak bo'lgan Match Development com.company.* shaklining kerakli ta'minot profili mavjud.

Biz Firebase test laboratoriyasida instrumental testlarni o'tkazamiz. 1-qism: iOS loyihasi

Sinovlarni yig'ish uchun qator qo'shish qoladi. Keling, boraylik ombori fastlane uchun plagin loyihasi Firebase test laboratoriyasiga eksport qilishni osonlashtiradi va ko'rsatmalarga rioya qiling.

Keling, asl misoldan nusxa ko'chiring va bizning lane testing_build_for_firebase quyidagi ko'rinishga ega bo'ladi:


 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-da fastlane-ni o'rnatish haqida to'liq ma'lumot olish uchun men rasmiy hujjatlarni o'qishni maslahat beraman marta, два.

Bizning config.yml ga yangi vazifa qo'shishni unutmang:

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. Bizning test stendimiz haqida nima deyish mumkin? Firebase sozlanmoqda.

Keling, maqola nima uchun yozilganiga to'xtalamiz.

Ehtimol, sizning ilovangiz Firebase-dan bepul rejada foydalanadi yoki umuman yo'q. Mutlaqo hech qanday asosiy farq yo'q, chunki sinov ehtiyojlari uchun biz bir yillik bepul foydalanish bilan alohida loyiha yaratishimiz mumkin (ajoyib, to'g'rimi?)

Biz infratuzilma hisobimizga kiramiz (yoki boshqasi, bu muhim emas) va o'tamiz Firebase konsol sahifasi. AmazingAppUITests nomli yangi loyiha yarating.

Bu uchun muhim ahamiyatga ega: Firebase_test_lab_ios_xctest qatoridagi Fastfile-ning oldingi bosqichida gcp_project parametri loyiha nomiga mos kelishi kerak.

Biz Firebase test laboratoriyasida instrumental testlarni o'tkazamiz. 1-qism: iOS loyihasi

Standart sozlamalar bizga juda mos keladi.

Yorliqni yopmang, xuddi shu hisob ostida ro'yxatdan o'ting Gcloud - bu zarur chora, chunki Firebase bilan aloqa gcloud konsol interfeysi yordamida amalga oshiriladi.

Google bir yil uchun 300 dollar beradi, bu avtotestlarni o'tkazish kontekstida xizmatdan bir yillik bepul foydalanishga teng. Biz sizning toʻlov maʼlumotlaringizni kiritamiz, $1 test debetini kutamiz va hisobingizga $300 olamiz. Bir yil o'tgach, loyiha avtomatik ravishda bepul tarif rejasiga o'tkaziladi, shuning uchun pul yo'qotishi mumkinligi haqida tashvishlanishning hojati yo'q.

Keling, Firebase loyihasi bilan yorlig'iga qaytaylik va uni Blaze tarif rejasiga o'tkazamiz - endi chegara oshib ketgan bo'lsa, to'lashimiz kerak.

Gcloud interfeysida Firebase loyihamizni tanlang, “Katalog” asosiy menyu bandini tanlang va Cloud Testing API va Cloud Tools Result API qo‘shing.

Biz Firebase test laboratoriyasida instrumental testlarni o'tkazamiz. 1-qism: iOS loyihasi

Keyin menyu bandiga o'ting "IAM va ma'muriyat" -> Xizmat hisoblari -> Xizmat qayd yozuvini yaratish. Biz loyihani tahrirlash huquqini beramiz.

Biz Firebase test laboratoriyasida instrumental testlarni o'tkazamiz. 1-qism: iOS loyihasi

JSON formatida API kalitini yarating

Biz Firebase test laboratoriyasida instrumental testlarni o'tkazamiz. 1-qism: iOS loyihasi

Yuklab olingan JSON bizga birozdan keyin kerak bo'ladi, ammo hozircha Test Laboratoriyasini sozlash tugallangan deb hisoblaymiz.

5. CircleCI ni sozlash

O'rtacha savol tug'iladi - parollar bilan nima qilish kerak? Qurilish mashinamizning atrof-muhit o'zgaruvchan mexanizmi bizga parollarimiz va boshqa nozik ma'lumotlarni xavfsiz saqlashga yordam beradi. CircleCI loyihasi sozlamalarida Atrof-muhit o'zgaruvchilari-ni tanlang

Biz Firebase test laboratoriyasida instrumental testlarni o'tkazamiz. 1-qism: iOS loyihasi
Va quyidagi o'zgaruvchilarni o'rnating:

  • kalit: GOOGLE_APPLICATION_CREDENTIALS
    qiymat: gcloud xizmat hisobi kalitining json faylining mazmuni
  • kalit: MATCH_PASSWORD
    qiymat: sertifikatlar bilan github omborini shifrlash uchun parol
  • kalit: FASTLANE_PASSWORD
    qiymat: Apple Developer Portal infratuzilma hisobi paroli

Biz o'zgarishlarni saqlaymiz, PR yaratamiz va uni ko'rib chiqish uchun jamoamiz rahbariga yuboramiz.

natijalar

Ushbu oddiy manipulyatsiyalar natijasida biz sinov vaqtida qurilma ekranida video yozib olish imkoniyatiga ega yaxshi, barqaror ishlaydigan stend oldik. Sinov misolida men iPhone X qurilma modelini ko'rsatdim, ammo ferma turli modellar va iOS versiyalarining kombinatsiyasidan boy tanlovni taqdim etadi.

Ikkinchi qism Android loyihasi uchun Firebase test laboratoriyasini bosqichma-bosqich sozlashga bag'ishlanadi.

Manba: www.habr.com

a Izoh qo'shish