Nama saya Dmitry, saya bekerja sebagai penguji di sebuah perusahaan
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.
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
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.
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.
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.
Pada titik ini, kita sudah selesai dengan developer.apple.com, tetapi kita tidak akan memperkecil jendela browser. Mari pergi ke
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
$ fastlane init
Anda akan diminta untuk memilih konfigurasi penggunaan yang tersedia. Kami memilih item keempat - konfigurasi proyek secara 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 disebut jalur. Saya sarankan membaca dokumentasi resmi:
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.
Tetap menambah jalur untuk membangun tes. Mari pergi ke
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
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
Penting: Pada langkah sebelumnya, pada Fastfile di lane firebase_test_lab_ios_xctest, parameter gcp_project harus sesuai dengan nama project.
Pengaturan default cocok untuk kita.
Kami tidak menutup tab, kami mendaftar dengan akun yang sama di
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.
Lalu buka item menu "IAM dan administrasi" -> Akun layanan -> Buat akun layanan. Berikan izin untuk mengedit proyek.
Buat kunci API dalam format JSON
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
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