Nama saya Dmitry, saya bekerja sebagai penguji di syarikat itu
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.
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
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.
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.
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.
Pada ketika ini, kami telah selesai bekerja dengan developer.apple.com, tetapi kami tidak akan meminimumkan tetingkap penyemak imbas. Mari pergi ke
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
$ fastlane init
Anda akan digesa untuk memilih konfigurasi penggunaan yang tersedia. Pilih pilihan keempat - persediaan projek manual.
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:
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.
Ia kekal untuk menambah lorong untuk ujian pemasangan. Mari pergi ke
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
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
Penting: Dalam langkah sebelumnya dalam Fastfile dalam lorong firebase_test_lab_ios_xctest parameter gcp_project hendaklah sepadan dengan nama projek.
Tetapan lalai sesuai dengan kami dengan baik.
Jangan tutup tab, daftar di bawah akaun yang sama di
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.
Kemudian pergi ke item menu "IAM dan pentadbiran" -> Akaun perkhidmatan -> Buat akaun perkhidmatan. Kami memberikan hak untuk mengedit projek.
Buat kunci API dalam format JSON
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
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