
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.

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

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.

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.

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.

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.

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"
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")
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"
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.

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',
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
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.

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.

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

Buat kunci API dalam format JSON

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

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.