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

gambar

Nama saya Dmitry, saya bekerja sebagai penguji di MEL Science . Baru-baru ini, saya akhirnya berurusan dengan fitur yang relatif baru dari Firebase Test Lab - yaitu, dengan pengujian instrumental aplikasi iOS menggunakan kerangka kerja pengujian XCUITest asli.

Sebelum itu, saya sudah mencoba Firebase Test Lab untuk Android dan saya sangat menyukai semuanya, jadi saya memutuskan untuk mencoba meletakkan infrastruktur pengujian proyek iOS di jalur yang sama. Saya harus banyak google dan tidak semuanya bekerja dengan benar pertama kali, jadi saya memutuskan untuk menulis artikel tutorial untuk mereka yang masih harus.

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

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

Jika Anda menerapkan solusi berbeda dalam proyek Anda secara berbeda - bagikan pengalaman Anda dalam komentar.

1. Tes itu sendiri


Buat cabang proyek baru untuk pengujian UI:

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

Buka proyek dalam Xcode dan buat Target baru dengan tes UI [XCode -> File -> New -> Target -> iOS Testing Bundle], berikan nama yang berbicara AmazingAppUITests.

gambar

Buka bagian Bangun Fase dari Target yang dibuat dan periksa keberadaan Ketergantungan Target - AmazingApp, di Sumber Kompilasi - AmazingAppUITests.swift.

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

Membangun skema yang dibuat harus mencakup Target aplikasi utama - tes AmazingApp dan UI Target - AmazingAppUITests - lihat tangkapan layar

gambar

Selanjutnya, buat konfigurasi bangunan baru untuk pengujian UI. Di Xcode, klik pada file proyek, buka bagian Info. Klik "+" dan buat konfigurasi baru, misalnya XCtest. Kami akan membutuhkan ini di masa depan untuk menghindari menari dengan rebana ketika datang ke penandatanganan kode.

gambar

Proyek Anda memiliki setidaknya tiga Target: aplikasi utama, tes unit (karena benar, kan?) Dan tes Target UI yang kami buat.

Pergi ke Target AmazingApp, tab Bangun Pengaturan, bagian Identitas Penandatanganan Kode. Untuk mengkonfigurasi XCtest, pilih Pengembang iOS. Di bagian Gaya Penandatanganan Kode, pilih Manual. Kami belum membuat profil Penyediaan, tetapi beberapa saat kemudian kami pasti akan kembali ke sana.

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

2. Menyiapkan proyek di Program Pengembang Apple


Kami pergi ke halaman Program Pengembang Apple, pergi ke bagian Sertifikat, Identifiers & Profil dan kemudian ke kolom ID Aplikasi dari item Pengidentifikasi. Buat ID Aplikasi baru bernama AmazingAppUITests dan bundleID com.company.amazingappuitests.

gambar

Sekarang kami memiliki kesempatan untuk menandatangani tes kami dengan sertifikat terpisah, tetapi ... Prosedur pembuatan untuk pengujian melibatkan pembuatan aplikasi itu sendiri dan membangun pelari pengujian. Oleh karena itu, kami dihadapkan dengan masalah penandatanganan 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 Wildcard App ID seperti pada tangkapan layar.

gambar

Kami selesai bekerja dengan developer.apple.com pada saat ini, tetapi kami tidak akan memperkecil jendela peramban. Kami pergi ke situs dengan dokumentasi tentang Fastlane dan membaca tentang utilitas Match dari depan ke belakang.

Pembaca yang penuh perhatian memperhatikan bahwa untuk menggunakan utilitas ini kita akan memerlukan repositori pribadi dan akun yang memiliki akses ke Program Pengembang Apple dan Github. Kami membuat (jika tiba-tiba ini bukan) akun dari bentuk InfrastructureAccount@your.company.domain, buat kata sandi yang kuat, daftarkan di developer.apple.com, dan tunjuk administrator proyek. Selanjutnya, berikan akses akun Anda ke repositori github perusahaan Anda dan buat repositori pribadi baru dengan nama seperti AmazingAppMatch.

3. Mengkonfigurasi Fastlane dan utilitas pertandingan


Buka terminal, buka folder proyek dan inisialisasi fastlane sebagaimana ditunjukkan dalam manual resmi . Setelah memasukkan perintah

 $ fastlane init 

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

gambar

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 yang disebut jalur. Saya sarankan membaca dokumentasi resmi: satu , dua .

Buka Appfile di editor teks favorit Anda dan bawa ke formulir berikut:

 app_identifier "com.company.amazingapp" # Bundle ID apple_dev_portal_id "infrastructureaccount@your.company.domain" #   ,     iOS   Apple Developer Program. team_id "LSDY3IFJAY9" # Your Developer Portal Team ID 

Kami kembali ke terminal dan sesuai dengan manual resmi kami mulai mengkonfigurasi pertandingan.

 $ fastlane match init $ fastlane match development 

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

Penting: pertama kali Anda memulai utilitas yang cocok, Anda akan diminta memasukkan kata sandi untuk mendekripsi repositori. Sangat penting untuk menyimpan kata sandi ini, pada tahap pengaturan server CI akan bermanfaat bagi kami!

File baru 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("infrastructureaccount@your.company.domain") # Your Infrastructure account Apple Developer Portal username 

Kami mengisinya dengan cara ini jika kami ingin menggunakan korek api untuk menandatangani build untuk posting di Crashlytics dan / atau AppStore, mis. Untuk menandatangani bundel ID aplikasi Anda.

Tetapi, seingat kami, untuk membuat test build kami membuat Wildcard ID khusus. Oleh karena itu, buka Fastfile dan masukkan jalur baru:

 lane :testing_build_for_firebase do match( type: "development", readonly: true, app_identifier: "com.company.*", git_branch: "uitests" #     development     . ) end 

Simpan, masukkan di terminal

 fastlane testing_build_for_firebase 

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

Buka Xcode. Sekarang kami memiliki profil penyediaan yang diperlukan dari perusahaan Match Match. * Type, yang harus ditentukan di bagian profil Penyediaan untuk target AmazingApp dan AmazingAppUITests.

gambar

Masih menambah jalur untuk membangun tes. Kami pergi ke repositori proyek plugin untuk fastlane, yang memfasilitasi konfigurasi ekspor ke Firebase Test Lab dan mengikuti instruksi.

Salin dari contoh asli sehingga jalur kami testing_build_for_firebase akhirnya 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 tentang mengkonfigurasi fastlane di CircleCI, saya sarankan membaca dokumentasi resmi satu, dua .

Jangan lupa untuk menambahkan config.yml kami dengan tugas baru:

 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. Tapi bagaimana dengan bangku tes kami? Konfigurasikan Firebase.


Kami melanjutkan, pada kenyataannya, untuk apa artikel itu ditulis.

Mungkin aplikasi Anda menggunakan Firebase pada paket tarif gratis, mungkin tidak menggunakannya sama sekali. Sama sekali tidak ada perbedaan mendasar, karena untuk kebutuhan pengujian kita dapat membuat proyek terpisah dengan tahun penggunaan gratis (keren, kan?)

Masuk ke akun infrastruktur kami (atau yang lain, tidak ada perbedaan), dan buka halaman Firebase console . Buat proyek baru yang disebut AmazingAppUITests.

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

gambar

Pengaturan defaultnya cukup baik bagi kami.

Kami tidak menutup tab, di bawah akun yang sama dengan yang kami daftarkan di Gcloud - ini adalah langkah yang perlu , karena komunikasi dengan Firebase dilakukan menggunakan antarmuka konsol gcloud.

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

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

Di antarmuka gcloud, pilih proyek Firebase kami, pilih item menu utama "Katalog" dan tambahkan API Pengujian Cloud dan API Hasil Alat Cloud.

gambar

Lalu buka item menu "IAM dan Administrasi" -> Akun layanan -> Buat akun layanan. Kami memberikan hak untuk mengedit proyek.

gambar

Buat kunci API dalam format JSON

gambar

Kami akan membutuhkan JSON yang diunduh sedikit kemudian, tetapi untuk sekarang, kami akan mempertimbangkan pengaturan Lab Uji selesai.

5. Konfigurasikan CircleCI


Sebuah pertanyaan masuk akal sedang dibuat - apa yang harus dilakukan dengan kata sandi? Aman menyimpan kata sandi kami dan data sensitif lainnya akan membantu kami mekanisme variabel lingkungan mesin-build kami. Dalam pengaturan proyek CircleCI, pilih Variabel Lingkungan

gambar
Dan mulai variabel-variabel berikut:

  • kunci: GOOGLE_APPLICATION_CREDENTIALS
    nilai: file kunci akun layanan gcloud json
  • kunci: MATCH_PASSWORD
    value: kata sandi untuk mendekripsi repositori github dengan sertifikat
  • kunci: FASTLANE_PASSWORD
    nilai: Sandi Akun Infrastruktur Portal Pengembang Apple

Kami menyimpan perubahan, membuat PR, dan mengirimkannya untuk meninjau pemimpin tim kami.

Ringkasan


Sebagai hasil dari melakukan manipulasi sederhana ini, kami mendapat posisi kerja yang baik dan stabil dengan kemampuan untuk merekam video di layar perangkat pada saat pengujian. Dalam sebuah test case, saya menentukan model perangkat iPhone X, tetapi farm menyediakan berbagai pilihan kombinasi berbagai model dan versi iOS.

Bagian kedua akan dikhususkan untuk konfigurasi langkah demi langkah Lab Uji Firebase untuk proyek Android.

Source: https://habr.com/ru/post/id451786/


All Articles