Firebase Test Laboratoriyasında instrumental testlər keçiririk. 1-ci hissə: iOS layihəsi

Firebase Test Laboratoriyasında instrumental testlər keçiririk. 1-ci hissə: iOS layihəsi

Mənim adım Dmitri, mən şirkətdə tester kimi işləyirəm MEL Elmləri. Bu yaxınlarda mən nisbətən yeni bir xüsusiyyət ilə məşğul oldum Firebase Test Laboratoriyası — yəni, XCUITest yerli test çərçivəsindən istifadə edərək iOS proqramlarının instrumental sınağı ilə.

Bundan əvvəl mən artıq Android üçün Firebase Test Laboratoriyasını sınamışdım və hər şeyi çox bəyəndim, ona görə də layihənin iOS test infrastrukturunu eyni əsasda qoymağa cəhd etmək qərarına gəldim. Google-da çox işləməli oldum və hər şey ilk dəfə alınmadı, buna görə də hələ də mübarizə aparanlar üçün dərslik məqaləsi yazmağa qərar verdim.

Beləliklə, əgər iOS layihəsində UI testləriniz varsa, onları Good Corporation tərəfindən təqdim olunan real cihazlarda işə salmağa cəhd edə bilərsiniz. Maraqlananlar üçün pişiyə xoş gəlmisiniz.

Hekayədə mən bəzi ilkin məlumatlara - GitHub və CircleCI qurma sistemində özəl depoya əsaslanmaq qərarına gəldim. Tətbiqin adı AmazingApp, bundleID com.company.amazingapp-dır. Sonrakı çaşqınlığı azaltmaq üçün bu məlumatları dərhal təqdim edirəm.

Layihənizdə müəyyən həlləri fərqli şəkildə tətbiq etmisinizsə, təcrübənizi şərhlərdə paylaşın.

1. Testlərin özləri

UI testləri üçün yeni layihə filialı yaradın:

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

Gəlin layihəni XCode-da açaq və UI testləri ilə yeni Hədəf yaradaq [XCode -> Fayl -> Yeni -> Hədəf -> iOS Test Paketi] və ona AmazingAppUITests özünü izah edən adını verərək.

Firebase Test Laboratoriyasında instrumental testlər keçiririk. 1-ci hissə: iOS layihəsi

Yaradılmış Hədəfin Quraşdırma Mərhələləri bölməsinə keçin və Compile Sources - AmazingAppUITests.swift-də Hədəf Asılılıqlarının - AmazingApp-ın mövcudluğunu yoxlayın.

Yaxşı təcrübə müxtəlif qurma variantlarını ayrı-ayrı Sxemlərə ayırmaqdır. Biz UI testlərimiz üçün sxem yaradırıq [XCode -> Product -> Scheme -> New Scheme] və ona eyni adı veririk: AmazingAppUITests.

Yaradılmış sxemin qurulmasına əsas tətbiqin Hədəfi daxil edilməlidir - AmazingApp və Target UI testləri - AmazingAppUITests - ekran görüntüsünə baxın

Firebase Test Laboratoriyasında instrumental testlər keçiririk. 1-ci hissə: iOS layihəsi

Sonra, UI testləri üçün yeni quruluş konfiqurasiyası yaradırıq. XCode-da layihə faylına klikləyin və Məlumat bölməsinə keçin. “+” üzərinə klikləyin və yeni konfiqurasiya yaradın, məsələn, XCtest. Kodun imzalanmasına gəldikdə, qavalla rəqs etməmək üçün gələcəkdə buna ehtiyacımız olacaq.

Firebase Test Laboratoriyasında instrumental testlər keçiririk. 1-ci hissə: iOS layihəsi

Layihənizdə ən azı üç Hədəf var: əsas proqram, vahid testləri (hər şeydən sonra onlar mövcuddur, elə deyilmi?) və yaratdığımız Hədəf UI testləri.

Hədəf AmazingApp, Quraşdırma Parametrləri sekmesine, Kod İmzalama Şəxsiyyəti bölməsinə keçin. XCtest konfiqurasiyası üçün iOS Developer seçin. Code Signing Style bölməsində Manual seçin. Təminat profilini hələ yaratmamışıq, lakin bir az sonra mütləq ona qayıdacağıq.

Hədəf AmazingAppUITests üçün biz eyni şeyi edirik, lakin Məhsul Paketi İdentifikatoru sütununda biz com.company.amazingappuitests daxil oluruq.

2. Apple Developer Proqramında layihənin qurulması

Apple Developer Proqramı səhifəsinə keçin, Sertifikatlar, İdentifikatorlar və Profillər bölməsinə və sonra İdentifikatorlar elementinin Tətbiq İdentifikatorları sütununa keçin. AmazingAppUITests və bundleID com.company.amazingappuitests adlı yeni Tətbiq ID-si yaradın.

Firebase Test Laboratoriyasında instrumental testlər keçiririk. 1-ci hissə: iOS layihəsi

İndi testlərimizi ayrıca sertifikatla imzalamaq imkanımız var, lakin... Sınaq üçün konstruksiyanın yığılması proseduru proqramın özünün yığılmasını və test aparatının yığılmasını nəzərdə tutur. Müvafiq olaraq, bir təminat profili ilə iki paket identifikatorunun imzalanması problemi ilə qarşılaşırıq. Xoşbəxtlikdən, sadə və zərif bir həll var - Wildcard App ID. Yeni Tətbiq İdentifikatorunun yaradılması prosedurunu təkrar edirik, lakin Açıq Tətbiq İD-si əvəzinə ekran görüntüsündə olduğu kimi Wildcard Tətbiq İD-ni seçin.

Firebase Test Laboratoriyasında instrumental testlər keçiririk. 1-ci hissə: iOS layihəsi

Bu nöqtədə biz developer.apple.com ilə işi bitirdik, lakin biz brauzer pəncərəsini minimuma endirməyəcəyik. Gəlin gedək Fastlane sənədləşmə saytı və başdan ayağa Match yardım proqramı haqqında oxuyun.

Diqqətli oxucu qeyd etdi ki, bu yardım proqramından istifadə etmək üçün bizə özəl depo və həm Apple Developer Proqramına, həm də Github-a çıxışı olan hesab lazımdır. Formanın hesabını (birdən belə bir şey yoxdursa) yaradırıq [e-poçt qorunur], güclü parol tapın, onu developer.apple.com saytında qeydiyyatdan keçirin və onu layihə administratoru kimi təyin edin. Sonra, hesaba şirkətinizin github repozitoriyasına giriş veririk və AmazingAppMatch kimi adla yeni şəxsi repozitoriya yaradırıq.

3. Fastlane və uyğunluq yardım proqramının qurulması

Terminal açın, layihə ilə qovluğa gedin və göstərildiyi kimi fastlane-i işə salın rəsmi təlimat. Komandanı daxil etdikdən sonra

$ fastlane init

Sizdən mövcud istifadə konfiqurasiyalarını seçmək istəniləcək. Dördüncü seçimi seçin - layihənin əl ilə qurulması.

Firebase Test Laboratoriyasında instrumental testlər keçiririk. 1-ci hissə: iOS layihəsi

Layihədə iki fayl - Appfile və Fastfile olan yeni qovluq fastlane var. Bir sözlə, biz xidmət məlumatlarını Appfile-də saxlayırıq və Fastlane terminologiyasında zolaqlar adlanan Fastfile-də işləri yazırıq. Rəsmi sənədləri oxumağı məsləhət görürəm: vaxt, два.

Sevimli mətn redaktorunuzda Appfile-i açın və onu aşağıdakı formaya gətirin:

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

Terminala qayıdırıq və rəsmi təlimata uyğun olaraq uyğunluğu konfiqurasiya etməyə başlayırıq.

$ fastlane match init
$ fastlane match development

Sonra, tələb olunan məlumatları daxil edin - depo, hesab, parol və s.

Mühüm: Uyğunluq proqramını ilk dəfə işə saldığınız zaman sizdən deponun şifrəsini açmaq üçün parol daxil etməyiniz xahiş olunacaq. Bu parolu saxlamaq çox vacibdir, CI serverini qurarkən bizə lazım olacaq!

Fastlane qovluğunda yeni fayl meydana çıxdı - Matchfile. Onu sevimli mətn redaktorunuzda açın və bu şəkildə göstərin:

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

Gələcəkdə Crashlytics və/və ya AppStore-da yerləşdirmə üçün konstruksiyaları imzalamaq, yəni tətbiqinizin paket identifikatorunu imzalamaq üçün uyğunluqdan istifadə etmək istəsək, onu məhz bu şəkildə doldururuq.

Ancaq xatırladığımız kimi, test quruluşunu imzalamaq üçün xüsusi Wildcard ID yaratdıq. Buna görə də, Fastfile açın və yeni zolağa daxil olun:

lane :testing_build_for_firebase do

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

end

Yadda saxlayın və terminala daxil olun

fastlane testing_build_for_firebase

və biz fastlane-nin necə yeni sertifikat yaratdığını və onu depoya qoyduğunu görürük. Əla!

XCode-u açın. İndi bizdə Match Development com.company.* formasının lazımi təminat profili var ki, bu da AmazingApp və AmazingAppUITests hədəfləri üçün Təminat profili bölməsində göstərilməlidir.

Firebase Test Laboratoriyasında instrumental testlər keçiririk. 1-ci hissə: iOS layihəsi

Testləri yığmaq üçün zolaq əlavə etmək qalır. Gəlin gedək anbar Firebase Test Laboratoriyasına ixracı qurmağı və təlimatlara əməl etməyi asanlaşdıran fastlane üçün plagin layihəsi.

Gəlin orijinal nümunədən kopyalayıb yapışdıraq ki, bizim zolaq testing_build_for_firebase belə görünsün:


 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-də fastlane qurmaq haqqında tam məlumat üçün rəsmi sənədləri oxumağı məsləhət görürəm dəfə, два.

config.yml-ə yeni tapşırıq əlavə etməyi unutmayın:

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. Bəs bizim sınaq stendimiz? Firebase quraşdırılır.

Gəlin məqalənin nə üçün yazıldığına keçək.

Ola bilsin ki, tətbiqiniz Firebase-dən pulsuz planda istifadə edir və ya bəlkə də heç istifadə etmir. Heç bir prinsipial fərq yoxdur, çünki sınaq ehtiyacları üçün bir il pulsuz istifadə ilə ayrıca bir layihə yarada bilərik (sərin, elə deyilmi?)

İnfrastruktur hesabımıza daxil oluruq (və ya hər hansı başqa, fərq etməz) və gedirik Firebase konsol səhifəsi. AmazingAppUITests adlı yeni layihə yaradın.

Mühüm: Firebase_test_lab_ios_xctest zolağında Fastfile-də əvvəlki addımda gcp_project parametri layihə adına uyğun olmalıdır.

Firebase Test Laboratoriyasında instrumental testlər keçiririk. 1-ci hissə: iOS layihəsi

Standart parametrlər bizə çox uyğun gəlir.

Nişanı bağlamayın, eyni hesabda qeydiyyatdan keçin Gcloud - bu zəruri tədbirdir, çünki Firebase ilə əlaqə gcloud konsol interfeysindən istifadə etməklə baş verir.

Google bir il üçün 300 dollar verir ki, bu da avtotestlərin aparılması kontekstində xidmətdən bir illik pulsuz istifadəyə bərabərdir. Ödəniş məlumatlarınızı daxil edirik, 1 ABŞ dolları məbləğində test debetini gözləyirik və hesabınıza 300 dollar alırıq. Bir ildən sonra layihə avtomatik olaraq pulsuz tarif planına keçəcək, buna görə də mümkün pul itkisindən narahat olmaq lazım deyil.

Firebase layihəsi ilə nişana qayıdaq və onu Blaze tarif planına köçürək - indi limit aşıldığında ödəməli olduğumuz bir şey var.

gcloud interfeysində Firebase layihəmizi seçin, "Kataloq" əsas menyu elementini seçin və Bulud Testi API və Bulud Alətləri Nəticə API-ni əlavə edin.

Firebase Test Laboratoriyasında instrumental testlər keçiririk. 1-ci hissə: iOS layihəsi

Sonra "IAM və administrasiya" menyusuna keçin -> Xidmət hesabları -> Xidmət hesabı yaradın. Biz layihəni redaktə etmək hüququnu veririk.

Firebase Test Laboratoriyasında instrumental testlər keçiririk. 1-ci hissə: iOS layihəsi

JSON formatında API açarı yaradın

Firebase Test Laboratoriyasında instrumental testlər keçiririk. 1-ci hissə: iOS layihəsi

Yüklənmiş JSON-a bir az sonra ehtiyacımız olacaq, lakin hələlik Test Laboratoriyasının quraşdırılmasını tamamlanmış hesab edəcəyik.

5. CircleCI-nin qurulması

Ağlabatan bir sual yaranır - parollarla nə etmək lazımdır? Quraşdırma maşınımızın mühit dəyişən mexanizmi bizə parollarımızı və digər həssas məlumatları təhlükəsiz saxlamağa kömək edəcək. CircleCI layihə parametrlərində Mühit Dəyişənləri seçin

Firebase Test Laboratoriyasında instrumental testlər keçiririk. 1-ci hissə: iOS layihəsi
Və aşağıdakı dəyişənləri qurun:

  • açar: GOOGLE_APPLICATION_CREDENTIALS
    dəyər: gcloud xidmət hesabı açarının json faylının məzmunu
  • açar: MATCH_PASSWORD
    dəyər: sertifikatlarla github deposunun şifrəsini açmaq üçün parol
  • açar: FASTLANE_PASSWORD
    dəyər: Apple Developer Portal infrastruktur hesab parolu

Dəyişiklikləri saxlayırıq, PR yaradırıq və onu nəzərdən keçirmək üçün komanda rəhbərimizə göndəririk.

Nəticələri

Bu sadə manipulyasiyalar nəticəsində biz sınaq zamanı cihazın ekranında video yazmaq imkanı olan yaxşı, sabit işləyən stend əldə etdik. Test nümunəsində mən iPhone X cihaz modelini göstərdim, lakin ferma müxtəlif modellərin və iOS versiyalarının birləşməsindən zəngin seçim təqdim edir.

İkinci hissə Android layihəsi üçün Firebase Test Laboratoriyasının addım-addım qurulmasına həsr olunacaq.

Mənbə: www.habr.com

Добавить комментарий