Kami menjalankan ujian instrumental dalam Firebase Test Lab. Bahagian 1: Projek iOS

Kami menjalankan ujian instrumental dalam Firebase Test Lab. Bahagian 1: Projek iOS

Nama saya Dmitry, saya bekerja sebagai penguji di syarikat itu Sains MEL. Baru-baru ini saya selesai berurusan dengan ciri yang agak baru dari Makmal Ujian Firebase β€” iaitu, dengan ujian instrumental aplikasi iOS menggunakan rangka kerja ujian asli XCUITest.

Sebelum ini, saya telah pun mencuba Firebase Test Lab untuk Android dan sangat menyukai segala-galanya, jadi saya memutuskan untuk cuba meletakkan infrastruktur ujian iOS projek pada kedudukan yang sama. Saya terpaksa Google banyak dan tidak semuanya berjaya pada kali pertama, jadi saya memutuskan untuk menulis artikel tutorial untuk mereka yang masih bergelut.

Oleh itu, jika anda mempunyai ujian UI pada projek iOS, anda sudah boleh mencuba menjalankannya pada peranti sebenar hari ini, yang disediakan oleh Good Corporation. Bagi yang berminat, selamat datang ke kucing.

Dalam cerita itu, saya memutuskan untuk membina beberapa data awal - repositori peribadi pada GitHub dan sistem binaan CircleCI. Nama aplikasi ialah AmazingApp, bundleID ialah com.company.amazingapp. Saya membentangkan data ini dengan segera untuk mengurangkan kekeliruan seterusnya.

Jika anda melaksanakan penyelesaian tertentu dalam projek anda secara berbeza, kongsi pengalaman anda dalam ulasan.

1. Ujian itu sendiri

Buat cawangan projek baharu untuk ujian UI:

$ git checkout develop
$ git pull
$ git checkout -b β€œfeature/add-ui-tests”

Mari buka projek dalam XCode dan buat Sasaran baharu dengan ujian UI [XCode -> File -> New -> Target -> iOS Testing Bundle], memberikannya nama penjelasan sendiri AmazingAppUITests.

Kami menjalankan ujian instrumental dalam Firebase Test Lab. Bahagian 1: Projek iOS

Pergi ke bahagian Fasa Binaan pada Sasaran yang dibuat dan semak kehadiran Ketergantungan Sasaran - AmazingApp, dalam Sumber Kompilasi - AmazingAppUITests.swift.

Amalan yang baik ialah memisahkan pilihan binaan yang berbeza ke dalam Skim yang berasingan. Kami mencipta skema untuk ujian UI kami [XCode -> Product -> Scheme -> New Scheme] dan memberikannya nama yang sama: AmazingAppUITests.

Binaan skema yang dibuat mesti termasuk Sasaran aplikasi utama - AmazingApp dan ujian UI Target - AmazingAppUITests - lihat tangkapan skrin

Kami menjalankan ujian instrumental dalam Firebase Test Lab. Bahagian 1: Projek iOS

Seterusnya, kami mencipta konfigurasi binaan baharu untuk ujian UI. Dalam XCode, klik pada fail projek dan pergi ke bahagian Maklumat. Klik pada β€œ+” dan buat konfigurasi baharu, contohnya XCtest. Kami akan memerlukan ini pada masa hadapan untuk mengelakkan menari dengan rebana apabila ia datang untuk menandatangani kod.

Kami menjalankan ujian instrumental dalam Firebase Test Lab. Bahagian 1: Projek iOS

Terdapat sekurang-kurangnya tiga Sasaran dalam projek anda: aplikasi utama, ujian unit (lagipun, ia wujud, bukan?) dan ujian UI Sasaran yang kami buat.

Pergi ke Sasaran AmazingApp, tab Tetapan Bina, bahagian Identiti Penandatanganan Kod. Untuk konfigurasi XCtest, pilih Pembangun iOS. Dalam bahagian Gaya Menandatangani Kod, pilih Manual. Kami belum menjana profil peruntukan lagi, tetapi kami pasti akan kembali kepadanya sedikit kemudian.

Untuk Target AmazingAppUITests kami melakukan perkara yang sama, tetapi dalam lajur Product Bundle Identifier kami masukkan com.company.amazingappuitests.

2. Menyediakan projek dalam Program Pembangun Apple

Pergi ke halaman Program Pembangun Apple, pergi ke bahagian Sijil, Pengecam & Profil dan kemudian ke lajur App ID item Pengecam. Buat ID Apl baharu yang dipanggil AmazingAppUITests dan bundleID com.company.amazingappuitests.

Kami menjalankan ujian instrumental dalam Firebase Test Lab. Bahagian 1: Projek iOS

Kini kami mempunyai peluang untuk menandatangani ujian kami dengan sijil yang berasingan, tetapi... Prosedur untuk memasang binaan untuk ujian melibatkan pemasangan aplikasi itu sendiri dan memasang pelari ujian. Sehubungan itu, kami berhadapan dengan masalah menandatangani dua ID berkas dengan satu profil peruntukan. Nasib baik, terdapat penyelesaian yang mudah dan elegan - Wildcard App ID. Kami mengulangi prosedur untuk membuat ID Apl baharu, tetapi bukannya ID Apl Eksplisit, pilih ID Apl Kad Liar seperti dalam tangkapan skrin.

Kami menjalankan ujian instrumental dalam Firebase Test Lab. Bahagian 1: Projek iOS

Pada ketika ini, kami telah selesai bekerja dengan developer.apple.com, tetapi kami tidak akan meminimumkan tetingkap penyemak imbas. Mari pergi ke Tapak dokumentasi Fastlane dan baca tentang utiliti Padanan dari muka depan ke muka.

Pembaca yang penuh perhatian menyedari bahawa untuk menggunakan utiliti ini, kami memerlukan repositori peribadi dan akaun dengan akses kepada kedua-dua Program Pembangun Apple dan Github. Kami membuat (jika tiba-tiba tiada perkara seperti itu) akaun borang [e-mel dilindungi], buat kata laluan yang kukuh, daftarkannya dengan developer.apple.com, dan lantik ia sebagai pentadbir projek. Seterusnya, kami memberikan akses akaun kepada repositori github syarikat anda dan mencipta repositori peribadi baharu dengan nama seperti AmazingAppMatch.

3. Menyediakan Fastlane dan utiliti perlawanan

Buka terminal, pergi ke folder dengan projek dan mulakan fastlane seperti yang ditunjukkan dalam manual rasmi. Selepas memasukkan arahan

$ fastlane init

Anda akan digesa untuk memilih konfigurasi penggunaan yang tersedia. Pilih pilihan keempat - persediaan projek manual.

Kami menjalankan ujian instrumental dalam Firebase Test Lab. Bahagian 1: Projek iOS

Projek ini mempunyai laluan cepat direktori baharu, yang mengandungi dua fail - Appfile dan Fastfile. Secara ringkasnya, kami menyimpan data perkhidmatan dalam Appfile, dan menulis kerja dalam Fastfile, dipanggil lorong dalam terminologi Fastlane. Saya mengesyorkan membaca dokumentasi rasmi: masa, Π΄Π²Π°.

Buka Appfile dalam editor teks kegemaran anda dan bawa ke borang berikut:

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

Kami kembali ke terminal dan mengikut manual rasmi kami mula mengkonfigurasi perlawanan.

$ fastlane match init
$ fastlane match development

Seterusnya, masukkan data yang diminta - repositori, akaun, kata laluan, dsb.

Penting: Apabila anda mula-mula melancarkan utiliti perlawanan, anda akan diminta memasukkan kata laluan untuk menyahsulit repositori. Adalah sangat penting untuk menyimpan kata laluan ini; kami akan memerlukannya semasa menyediakan pelayan CI!

Fail baharu telah muncul dalam folder fastlane - Matchfile. Bukanya dalam editor teks kegemaran anda dan paparkannya seperti ini:

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

Kami mengisinya dengan cara ini jika kami ingin menggunakan padanan pada masa hadapan untuk menandatangani binaan untuk paparan dalam Crashlytics dan/atau AppStore, iaitu, untuk menandatangani ID himpunan aplikasi anda.

Tetapi, seperti yang kami ingat, kami mencipta ID Kad Liar khas untuk menandatangani binaan ujian. Oleh itu, buka Fastfile dan masukkan lorong baharu:

lane :testing_build_for_firebase do

    match(
      type: "development",
      readonly: true,
      app_identifier: "com.company.*",
      git_branch: "uitests"  # создаСм ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π±Ρ€Π°Π½Ρ‡ для development сСртификата для подписи тСстовой сборки.
    )

end

Simpan dan masuk ke dalam terminal

fastlane testing_build_for_firebase

dan kita melihat bagaimana fastlane mencipta sijil baharu dan meletakkannya dalam repositori. Hebat!

Buka XCode. Kini kami mempunyai profil peruntukan yang diperlukan untuk borang Match Development com.company.*, yang mesti dinyatakan dalam bahagian Profil Provisioning untuk sasaran AmazingApp dan AmazingAppUITests.

Kami menjalankan ujian instrumental dalam Firebase Test Lab. Bahagian 1: Projek iOS

Ia kekal untuk menambah lorong untuk ujian pemasangan. Mari pergi ke repositori projek pemalam untuk fastlane yang memudahkan anda menyediakan eksport ke Firebase Test Lab dan ikut arahan.

Mari salin-tampal daripada contoh asal supaya lorong testing_build_for_firebase kami akhirnya kelihatan seperti ini:


 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

Untuk maklumat lengkap tentang menyediakan laluan cepat dalam CircleCI, saya syorkan membaca dokumentasi rasmi masa, Π΄Π²Π°.

Jangan lupa untuk menambah tugas baharu pada config.yml kami:

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. Bagaimana pula dengan bangku ujian kami? Menyediakan Firebase.

Mari kita ke bawah untuk apa artikel itu ditulis.

Mungkin apl anda menggunakan Firebase pada pelan percuma, atau mungkin tidak sama sekali. Sama sekali tidak ada perbezaan asas, kerana untuk keperluan ujian kita boleh membuat projek berasingan dengan penggunaan percuma selama setahun (sejuk, kan?)

Kami log masuk ke akaun infrastruktur kami (atau yang lain, tidak mengapa), dan pergi ke Halaman konsol Firebase. Buat projek baharu bernama AmazingAppUITests.

Penting: Dalam langkah sebelumnya dalam Fastfile dalam lorong firebase_test_lab_ios_xctest parameter gcp_project hendaklah sepadan dengan nama projek.

Kami menjalankan ujian instrumental dalam Firebase Test Lab. Bahagian 1: Projek iOS

Tetapan lalai sesuai dengan kami dengan baik.

Jangan tutup tab, daftar di bawah akaun yang sama di Gcloud - ini adalah langkah yang perlu, kerana komunikasi dengan Firebase berlaku menggunakan antara muka konsol gcloud.

Google memberi $300 untuk setahun, yang dalam konteks melaksanakan autotest adalah bersamaan dengan penggunaan percuma perkhidmatan selama setahun. Kami memasukkan maklumat pembayaran anda, tunggu debit ujian sebanyak $1 dan terima $300 ke akaun anda. Selepas setahun, projek itu akan dipindahkan secara automatik ke pelan tarif percuma, jadi tidak perlu risau tentang kemungkinan kehilangan wang.

Mari kembali ke tab dengan projek Firebase dan pindahkannya ke pelan tarif Blaze - kini kami mempunyai sesuatu yang perlu dibayar jika melebihi had.

Dalam antara muka gcloud, pilih projek Firebase kami, pilih item menu utama "Direktori" dan tambahkan Cloud Testing API dan Cloud Tools Result API.

Kami menjalankan ujian instrumental dalam Firebase Test Lab. Bahagian 1: Projek iOS

Kemudian pergi ke item menu "IAM dan pentadbiran" -> Akaun perkhidmatan -> Buat akaun perkhidmatan. Kami memberikan hak untuk mengedit projek.

Kami menjalankan ujian instrumental dalam Firebase Test Lab. Bahagian 1: Projek iOS

Buat kunci API dalam format JSON

Kami menjalankan ujian instrumental dalam Firebase Test Lab. Bahagian 1: Projek iOS

Kami memerlukan JSON yang dimuat turun sedikit kemudian, tetapi buat masa ini kami akan mempertimbangkan persediaan Test Lab selesai.

5. Menyediakan CircleCI

Timbul persoalan yang munasabah - apa yang perlu dilakukan dengan kata laluan? Mekanisme pembolehubah persekitaran mesin bina kami akan membantu kami menyimpan kata laluan kami dan data sensitif yang lain dengan selamat. Dalam tetapan projek CircleCI, pilih Pembolehubah Persekitaran

Kami menjalankan ujian instrumental dalam Firebase Test Lab. Bahagian 1: Projek iOS
Dan sediakan pembolehubah berikut:

  • kunci: GOOGLE_APPLICATION_CREDENTIALS
    nilai: kandungan fail json kunci akaun perkhidmatan gcloud
  • kunci: MATCH_PASSWORD
    nilai: kata laluan untuk menyahsulit repositori github dengan sijil
  • kunci: FASTLANE_PASSWORD
    nilai: kata laluan akaun infrastruktur Portal Pembangun Apple

Kami menyimpan perubahan, membuat PR dan menghantarnya kepada ketua pasukan kami untuk semakan.

Keputusan

Hasil daripada manipulasi mudah ini, kami menerima pendirian kerja yang baik dan stabil dengan keupayaan untuk merakam video pada skrin peranti pada masa ujian. Dalam contoh ujian, saya menyatakan model peranti iPhone X, tetapi ladang menyediakan pilihan yang kaya daripada gabungan model yang berbeza dan versi iOS.

Bahagian kedua akan ditumpukan kepada persediaan langkah demi langkah Firebase Test Lab untuk projek Android.

Sumber: www.habr.com

Tambah komen