Jalankan pengujian instrumental di Firebase Test Lab. Bagian 1: proyek iOS

Jalankan pengujian instrumental di Firebase Test Lab. Bagian 1: proyek iOS

Nama saya Dmitry, saya bekerja sebagai penguji di sebuah perusahaan Ilmu MEL. Baru-baru ini, saya selesai berurusan dengan fitur yang relatif baru dari Lab Uji Firebase - yaitu, dengan pengujian instrumental aplikasi iOS menggunakan kerangka pengujian asli XCUITest.

Sebelumnya, saya sudah mencoba Firebase Test Lab untuk Android dan saya sangat menyukai semuanya, jadi saya memutuskan untuk mencoba menempatkan infrastruktur pengujian iOS proyek di jalur yang sama. Saya harus banyak google dan tidak semuanya berhasil pertama kali, jadi saya memutuskan untuk menulis artikel tutorial untuk mereka yang masih harus melakukannya.

Jadi, jika Anda memiliki tes UI pada proyek iOS, Anda sudah dapat mencoba menjalankannya di perangkat nyata hari ini, yang disediakan oleh Good Corporation. Tertarik - selamat datang di bawah kucing.

Dalam ceritanya, saya memutuskan untuk membangun beberapa data sumber - repositori pribadi di GitHub dan sistem build CircleCI. Nama aplikasinya adalah AmazingApp, bundleID adalah com.company.amazingapp. Saya mengutip data ini segera, untuk mengurangi kebingungan selanjutnya.

Jika Anda menerapkan solusi tertentu dalam proyek Anda secara berbeda, bagikan pengalaman Anda di komentar.

1. Tes itu sendiri

Buat cabang proyek baru untuk pengujian UI:

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

Mari kita buka proyek di XCode dan buat Target baru dengan tes UI [XCode -> File -> New -> Target -> iOS Testing Bundle], beri nama AmazingAppUITests.

Jalankan pengujian instrumental di Firebase Test Lab. Bagian 1: proyek iOS

Buka bagian Build Phases dari Target yang dibuat dan periksa Target Dependencies - AmazingApp, di Compile Sources - AmazingAppUITests.swift.

Merupakan praktik yang baik untuk memisahkan berbagai opsi build ke dalam Skema terpisah. Kami membuat skema untuk pengujian UI kami [XCode -> Produk -> Skema -> Skema Baru] dan beri nama yang sama: AmazingAppUITests.

Pembuatan skema yang dibuat harus menyertakan Target aplikasi utama - Tes AmazingApp dan Target UI - AmazingAppUITests - lihat tangkapan layar

Jalankan pengujian instrumental di Firebase Test Lab. Bagian 1: proyek iOS

Selanjutnya, kita membuat konfigurasi build baru untuk pengujian UI. Di XCode, klik pada file proyek dan buka bagian Info. Klik β€œ+” dan buat konfigurasi baru, misalnya XCtest. Kita akan membutuhkan ini di masa depan untuk menghindari menari dengan rebana saat penandatanganan kode.

Jalankan pengujian instrumental di Firebase Test Lab. Bagian 1: proyek iOS

Setidaknya ada tiga Target dalam proyek Anda: aplikasi utama, pengujian unit (ada beberapa, bukan?) dan UI Target dari pengujian yang kami buat.

Buka Target AmazingApp, tab Build Settings, bagian Code Signing Identity. Untuk konfigurasi XCtest, pilih Pengembang iOS. Di bagian Gaya Penandatanganan Kode, pilih Manual. Kami belum membuat profil penyediaan, tetapi kami pasti akan kembali lagi nanti.

Untuk Target AmazingAppUITests, kami melakukan hal yang sama, tetapi masukkan com.company.amazingappuitests di kolom Product Bundle Identifier.

2. Menyiapkan proyek di Program Pengembang Apple

Buka halaman Program Pengembang Apple, buka bagian Sertifikat, Pengidentifikasi & Profil, lalu ke kolom ID Aplikasi pada item Pengidentifikasi. Buat ID Aplikasi baru bernama AmazingAppUITests dan bundleID com.company.amazingappuitests.

Jalankan pengujian instrumental di Firebase Test Lab. Bagian 1: proyek iOS

Sekarang kami memiliki kesempatan untuk menandatangani pengujian kami dengan sertifikat terpisah, tetapi ... Prosedur pembuatan untuk pengujian melibatkan pembuatan aplikasi itu sendiri dan pembuatan pelari pengujian. Oleh karena itu, kami menghadapi masalah dalam menandatangani dua bundel ID dengan satu profil penyediaan. Untungnya, ada solusi sederhana dan elegan - Wildcard App ID. Kami mengulangi prosedur untuk membuat ID Aplikasi baru, tetapi alih-alih ID Aplikasi Eksplisit, pilih ID Aplikasi Wildcard seperti pada tangkapan layar.

Jalankan pengujian instrumental di Firebase Test Lab. Bagian 1: proyek iOS

Pada titik ini, kita sudah selesai dengan developer.apple.com, tetapi kita tidak akan memperkecil jendela browser. Mari pergi ke situs dengan dokumentasi di Fastlane dan baca tentang utilitas Cocokkan dari sampul ke sampul.

Pembaca yang penuh perhatian telah memperhatikan bahwa untuk menggunakan utilitas ini, kami memerlukan repositori pribadi dan akun yang memiliki akses ke Program Pengembang Apple dan Github. Kami membuat (jika tiba-tiba tidak ada) akun formulir [email dilindungi], buat kata sandi yang kuat, daftarkan ke developer.apple.com, dan tunjuk sebagai administrator proyek. Selanjutnya, kami memberikan akses akun ke repositori github perusahaan Anda dan membuat repositori pribadi baru dengan nama seperti AmazingAppMatch.

3. Menyiapkan Fastlane dan utilitas pertandingan

Buka terminal, buka folder dengan proyek dan inisialisasi fastlane seperti yang ditunjukkan di manual resmi. Setelah memasukkan perintah

$ fastlane init

Anda akan diminta untuk memilih konfigurasi penggunaan yang tersedia. Kami memilih item keempat - konfigurasi proyek secara manual.

Jalankan pengujian instrumental di Firebase Test Lab. Bagian 1: proyek iOS

Direktori fastlane baru telah muncul di proyek, di mana ada dua file - Appfile dan Fastfile. Singkatnya - di Appfile kami menyimpan data layanan, dan di Fastfile kami menulis pekerjaan, dalam terminologi Fastlane disebut jalur. Saya sarankan membaca dokumentasi resmi: waktu, Π΄Π²Π°.

Buka Appfile di editor teks favorit Anda dan bawa ke formulir 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, menurut manual resmi, mulai menyiapkan pertandingan.

$ fastlane match init
$ fastlane match development

Selanjutnya, masukkan data yang diminta - repositori, akun, kata sandi, dll.

Penting: pertama kali Anda menjalankan utilitas pencocokan, ia akan meminta Anda memasukkan kata sandi untuk mendekripsi repositori. Sangat penting untuk menyimpan kata sandi ini, kami akan membutuhkannya pada tahap menyiapkan server CI!

File baru telah muncul di folder fastlane - Matchfile. Buka di editor teks favorit Anda dan bawa ke formulir:

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 pencocokan di masa mendatang untuk menandatangani build untuk diunggah ke Crashlytics dan/atau AppStore, yaitu untuk menandatangani ID bundel aplikasi Anda.

Namun, seingat kami, kami membuat ID Wildcard khusus untuk menandatangani test build. Oleh karena itu, buka Fastfile dan masuk ke jalur baru:

lane :testing_build_for_firebase do

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

end

Simpan, masuk ke terminal

fastlane testing_build_for_firebase

dan lihat bagaimana fastlane membuat sertifikat baru dan memasukkannya ke dalam repositori. Besar!

Buka XCode. Sekarang kita memiliki profil penyediaan yang diperlukan dari jenis com.company.* Pengembangan Pertandingan, yang harus ditentukan di bagian Profil penyediaan untuk target AmazingApp dan AmazingAppUITests.

Jalankan pengujian instrumental di Firebase Test Lab. Bagian 1: proyek iOS

Tetap menambah jalur untuk membangun tes. Mari pergi ke gudang proyek plugin fastlane yang memudahkan penyiapan ekspor ke Firebase Test Lab dan ikuti petunjuknya.

Salin-tempel dari contoh asli sehingga jalur kita testing_build_for_firebase terlihat 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 informasi lengkap pengaturan fastlane di CircleCI, saya sarankan untuk membaca dokumentasi resminya kali, Π΄Π²Π°.

Jangan lupa untuk menambahkan tugas baru ke 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 dengan bangku tes kita? Menyiapkan Firebase.

Mari kita lanjutkan, sebenarnya, untuk apa artikel itu ditulis.

Aplikasi Anda mungkin menggunakan Firebase dengan paket gratis, atau mungkin tidak menggunakan Firebase sama sekali. Sama sekali tidak ada perbedaan yang mendasar, karena untuk kebutuhan testing kita bisa membuat project tersendiri dengan pemakaian gratis selama setahun (keren ya?)

Kami masuk ke akun infrastruktur kami (atau yang lain, tidak masalah), dan pergi ke halaman konsol firebase. Buat proyek baru bernama AmazingAppUITests.

Penting: Pada langkah sebelumnya, pada Fastfile di lane firebase_test_lab_ios_xctest, parameter gcp_project harus sesuai dengan nama project.

Jalankan pengujian instrumental di Firebase Test Lab. Bagian 1: proyek iOS

Pengaturan default cocok untuk kita.

Kami tidak menutup tab, kami mendaftar dengan akun yang sama di gcloud adalah tindakan yang diperlukan, karena komunikasi dengan Firebase dilakukan menggunakan antarmuka gcloud console.

Google memberikan $300 selama setahun, yang dalam konteks melakukan tes otomatis setara dengan satu tahun penggunaan layanan secara gratis. Kami memasukkan data pembayaran, menunggu penghapusan percobaan sebesar $1 dan mendapatkan $300 ke akun. Setelah satu tahun, proyek akan secara otomatis dialihkan ke paket tarif gratis, jadi Anda tidak perlu khawatir tentang kemungkinan kehilangan uang.

Mari kembali ke tab dengan proyek Firebase dan mentransfernya ke paket tarif Blaze - sekarang kita memiliki sesuatu untuk dibayar jika batas terlampaui.

Di antarmuka gcloud, pilih proyek Firebase kami, pilih item menu utama "Katalog" dan tambahkan Cloud Testing API dan Cloud Tools Result API.

Jalankan pengujian instrumental di Firebase Test Lab. Bagian 1: proyek iOS

Lalu buka item menu "IAM dan administrasi" -> Akun layanan -> Buat akun layanan. Berikan izin untuk mengedit proyek.

Jalankan pengujian instrumental di Firebase Test Lab. Bagian 1: proyek iOS

Buat kunci API dalam format JSON

Jalankan pengujian instrumental di Firebase Test Lab. Bagian 1: proyek iOS

Kami akan membutuhkan JSON yang diunduh nanti, tetapi untuk saat ini kami akan mempertimbangkan penyiapan Test Lab selesai.

5. Pengaturan CircleCI

Sebuah pertanyaan yang masuk akal sedang muncul - apa yang harus dilakukan dengan kata sandi? Untuk menjaga keamanan kata sandi dan data sensitif lainnya, mekanisme variabel lingkungan dari mesin build kami akan membantu kami. Di pengaturan proyek CircleCI, pilih Variabel Lingkungan

Jalankan pengujian instrumental di Firebase Test Lab. Bagian 1: proyek iOS
Dan atur variabel berikut:

  • kunci: GOOGLE_APPLICATION_CREDENTIALS
    nilai: konten file json kunci akun layanan gcloud
  • kunci: MATCH_PASSWORD
    nilai: kata sandi untuk mendekripsi repositori github dengan sertifikat
  • kunci: FASTLANE_PASSWORD
    nilai: Kata sandi akun infrastruktur Portal Pengembang Apple

Kami menyimpan perubahan, membuat PR, dan mengirimkannya ke pimpinan tim kami untuk ditinjau.

Hasil

Sebagai hasil dari manipulasi sederhana ini, kami mendapatkan dudukan kerja yang bagus dan stabil dengan kemampuan merekam video di layar perangkat pada saat pengujian. Dalam kasus pengujian, saya menentukan model perangkat iPhone X, tetapi tambak menyediakan banyak pilihan dari kombinasi berbagai model dan versi iOS.

Bagian kedua akan dikhususkan untuk menyiapkan Firebase Test Lab untuk proyek Android langkah demi langkah.

Sumber: www.habr.com

Tambah komentar