Mengintegrasikan Test Lab ke dalam sistem CI/CD

1. Pengantar

Terakhir diperbarui: 07-04-2022

Cara menjalankan pengujian seluler dengan sistem CI/CD

Menjalankan pengujian seluler bisa jadi sulit: banyak aplikasi berjalan di berbagai platform, perangkat, dan versi API. Developer aplikasi ingin menguji sebanyak mungkin konfigurasi untuk menemukan masalah sebelum penggunanya melakukannya. Namun, keterbatasan biaya dan resource membatasi jumlah perangkat pengujian dan jumlah pemeliharaan manual yang dapat diinvestasikan oleh setiap developer. Saat proses pengembangan meningkatkan skala, terutama untuk sistem continuous integration/continuous development (CI/CD), proses pengujian harus diotomatiskan sekaligus meminimalkan biaya dan upaya pemeliharaan.

Untuk membantu Anda memahami performa aplikasi di perangkat pengguna, Firebase Test Lab menghosting berbagai perangkat fisik dan virtual seluler di pusat data kami. Kami juga menyediakan Google Cloud CLI, alat command line independen platform yang mengatur proses menjalankan pengujian pada perangkat di pusat data kami. Gcloud CLI memudahkan pengintegrasian solusi pengujian berbasis cloud Test Lab ke dalam alur kerja CI/CD yang sudah ada.

Dukungan lintas platform

Test Lab memberikan solusi pengujian untuk aplikasi Android dan iOS serta dukungan khusus untuk game seluler seperti Unity. Opsi pengujian mencakup kerangka kerja pengujian populer seperti Android Espresso, UI Automator, dan iOS XCTest. Dengan menggunakan crawler otomatis kami, Robo, Test Lab bahkan dapat menjalankan pengujian tanpa kode pengujian apa pun.

Tidak ada persyaratan hardware

Test Lab menghosting perangkat fisik di pusat data Google, dan menghosting perangkat virtual di Google Cloud. Anda hanya perlu mengirimkan pengujian ke Test Lab dan menunggu hasilnya.

Cepat dan andal

Menjalankan banyak kasus pengujian secara bersamaan dapat memakan waktu lama, sehingga memblokir proses CI/CD. Dengan Test Lab, Anda dapat dengan mudah melakukan sharding pengujian dan menjalankannya di beberapa perangkat secara paralel. Anda juga dapat mendeteksi kegagalan, titik masalah pengujian seluler umum.

Yang akan Anda pelajari

  • Cara membangun artefak pengujian
  • Cara menjalankan pengujian seluler menggunakan gcloud CLI
  • Cara menyiapkan Jenkins CI
  • Cara menjalankan pengujian seluler menggunakan Jenkins CI
  • Cara mengonfigurasi pengujian untuk meningkatkan skala dengan sistem CI

Codelab ini berfokus pada menjalankan pengujian. Konsep dan blok kode yang tidak-relevan akan dibahas sekilas dan disediakan sehingga Anda cukup menyalin dan menempelkannya.

Yang Anda butuhkan

Jika lebih suka membangun sesuatu dari awal, Anda memerlukan Android Studio untuk menjalankan pengujian Android, atau XCode untuk menjalankan pengujian iOS. Atau cukup bawa diri Anda sendiri dan kami akan menyediakan artefaknya.

2. Menjalankan pengujian dengan gcloud CLI

Membuat APK aplikasi Android dan APK pengujian

Untuk menjalankan pengujian dengan Test Lab, mulailah dengan membangun APK aplikasi Android dan APK pengujian, yang berisi uji instrumentasi untuk dijalankan pada perangkat keras atau emulator. Jika sudah memiliki codebase yang berfungsi, Anda dapat mem-build APK sendiri atau menggunakan BasicSample for Espresso.

Untuk membuat APK menggunakan perintah Gradle, Anda harus menginstal Android SDK. Jika Android Studio tidak terinstal di komputer, instal Android Studio dan Android SDK, lalu setel lingkungan ANDROID_HOME dengan direktori Android SDK Anda. Misalnya, di file ~/.bash_profile Anda, tambahkan baris berikut:

export ANDROID_HOME=~/Android/Sdk # For linux
export ANDROID_HOME=~/Library/Android/sdk  # For MacOS

Kemudian, jalankan perintah berikut untuk meng-clone kode dan mem-build APK:

git clone https://github.com/android/testing-samples.git
cd testing-samples/ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

Setelah menjalankan perintah clone dan build, Anda dapat menemukan APK aplikasi dan APK pengujian di lokasi berikut:

app/build/outputs/apk/debug/app-debug.apk
app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

Atau, Anda dapat menggunakan opsi berikut untuk mendapatkan pengujian dan APK aplikasi:

  • Untuk membuat APK di Android Studio, ikuti petunjuk dalam Pengujian di Android Studio.
  • Download contoh aplikasi Notepad. Gunakan file biner app-debug-unaligned.apk dan file uji instrumentasi app-debug-test-unaligned.apk, yang terletak di NotePad/app/build/outputs/apk/.

Jika memiliki kode sumber yang berfungsi untuk aplikasi iOS, Anda dapat menulis XCTest dan membuat file zip dari aplikasi dan pengujian.

Menggunakan gcloud CLI untuk menjalankan pengujian dengan Test Lab

Di bagian ini, Anda akan membuat project Firebase dan mengonfigurasi lingkungan Google Cloud SDK lokal. Untuk mempelajari lebih lanjut, baca Memulai pengujian dengan gcloud CLI .

Menyiapkan gcloud CLI

  1. Download Google Cloud SDK, yang mencakup alat gcloud CLI.
  2. Pastikan penginstalan Anda sudah yang terbaru:
gcloud components update
  1. Login ke gcloud CLI menggunakan Akun Google Anda:
gcloud auth login
  1. Tetapkan project Firebase Anda di gcloud CLI, dengan PROJECT_ID sebagai project ID Firebase Anda. Anda dapat menemukan project ID di URL Firebase Console, yang mengikuti konvensi penamaan ini: https://console.firebase.google.com/project/[PROJECT_ID]/...
gcloud config set project PROJECT_ID

Jika Anda tidak memiliki project Firebase, buat di Firebase Console.

Menjalankan pengujian menggunakan APK yang telah dibangun

Di bagian ini, Anda akan menjalankan uji instrumentasi pada perangkat default Test Lab, yaitu Pixel 3 dengan API level 28. Jika Anda ingin menggunakan perangkat lain, periksa perangkat yang tersedia.

Dengan menggunakan APK aplikasi dan pengujian yang Anda build di Build APK aplikasi Android dan APK pengujian, jalankan uji Instrumentasi Android menggunakan perintah berikut:

gcloud firebase test android run \
  --type instrumentation \
  --app app/build/outputs/apk/debug/app-debug.apk \
  --test app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

Menganalisis hasil pengujian

Anda dapat menganalisis hasil pengujian menggunakan salah satu opsi berikut:

  • gcloud summary - saat pengujian selesai, gcloud CLI akan mencetak ringkasan dasar hasil pengujian Anda.
  • gcloud exit code - setelah pengujian selesai, perintah akan keluar dengan 0 jika pengujian lulus. Jika pengujian gagal, perintah akan keluar dengan kode keluar bukan nol.
  • Firebase Console - gcloud CLI mencetak link ke Firebase Console. Link ini mengikuti konvensi penamaan https://console.firebase.google.com/project/PROJECT_ID/testlab/... Untuk mempelajari lebih lanjut, lihat Menafsirkan hasil dari eksekusi uji tunggal.
  • File XML JUnit - gcloud CLI mencetak perintah berikut:
Raw results will be stored in your Cloud Storage bucket at [https://console.developers.google.com/storage/browser/test-lab-xxxxx/xxxxx/]

test-lab-xxxxx/xxxxx adalah bucket Cloud Storage yang menyimpan artefak dan hasil pengujian. Untuk menemukan file XML JUnit yang berisi hasil pengujian, buka link dan buka blueline-28-en-portrait/test_result_1.xml.

3. Menyiapkan dengan Jenkins CI

Di bagian ini, Anda menggunakan Jenkins CI, sistem CI populer, untuk menjalankan pengujian dengan Test Lab. Jika Anda ingin menggunakan sistem CI lain, lihat Praktik terbaik lanjutan untuk menjalankan rangkaian pengujian besar serta dokumentasi untuk sistem CI lainnya seperti Bitrise dan Circle CI. Anda dapat menggunakan Flank sebagai alternatif gcloud CLI.

Mengaktifkan gcloud CLI untuk Jenkins

Sebelum dapat menggunakan Test Lab dengan Jenkins, Anda harus mengaktifkan API yang diperlukan dan menyiapkan akun layanan yang dapat digunakan Jenkins untuk melakukan autentikasi dengan gcloud CLI.

Menambahkan akun layanan Google Cloud untuk Jenkins

Akun layanan adalah akun terbatas yang ditujukan untuk integrasi layanan. Akun-akun ini menawarkan kontrol terperinci untuk layanan tertentu dan tidak tunduk pada pemeriksaan spam atau perintah CSE, yang dapat memblokir build CI Anda.

Untuk membuat akun layanan, ikuti langkah-langkah berikut:

  1. Buka halaman Service Accounts di Google Cloud Console.
  2. Klik Buat akun layanan, tambahkan Nama dan Deskripsi, lalu klik Buat dan lanjutkan.
  3. Dari dropdown Select a role, pilih Basic, lalu pilih Editor.
  4. Klik Continue, lalu klik Done.

Selanjutnya, Anda akan membuat dan mendownload kunci autentikasi yang dapat digunakan Jenkins untuk melakukan autentikasi sebagai akun layanan yang Anda buat.

Untuk membuat dan mendownload kunci akun layanan, ikuti langkah-langkah berikut:

  1. Dari halaman Service Accounts di Google Cloud Console, klik email yang terkait dengan akun yang Anda buat.
  2. Pilih Keys, lalu klik Add key dan Create new key.
  3. Pilih JSON, lalu klik Buat.
  4. Saat Anda diminta untuk mendownload file, klik Oke. Download file ke tempat yang aman di komputer Anda. Anda memerlukan file ini nanti saat mengonfigurasi Jenkins.

Untuk mempelajari lebih lanjut cara membuat akun layanan, lihat Membuat akun layanan.

Aktifkan Google Cloud API yang diperlukan

Cloud Testing API memungkinkan Anda menjalankan pengujian pada infrastruktur Google. Anda telah mengaktifkan API ini setelah selesai Menjalankan pengujian dengan gcloud CLI. Cloud Tool Results API memungkinkan Anda mengakses hasil pengujian secara terprogram.

  1. Buka Library API Google Developers Console.
  2. Di kotak penelusuran di bagian atas Firebase Console, masukkan nama setiap API yang diperlukan ( Cloud Testing API dan Cloud Tool Results API). Halaman ringkasan untuk API yang diminta akan muncul.
  3. Klik Enable API di halaman ringkasan setiap API.

Menginstal dan menyiapkan Jenkins

Anda dapat menginstal dan menyiapkan Jenkins CI di Linux, macOS, Windows, dan banyak lingkungan lainnya. Detail tertentu dari codelab ini khusus untuk menginstal dan menjalankan Jenkins CI di Linux, termasuk penggunaan garis miring (/) di jalur file.

Untuk mendownload dan menginstal Jenkins di komputer yang menjalankan Linux atau Windows, ikuti petunjuk untuk menginstal Jenkins. Setelah Anda menginstal Jenkins, ikuti petunjuk penginstalan Jenkins yang sama untuk menyelesaikan penyiapan dan mengakses dasbor Jenkins menggunakan http://localhost:8080.

Memverifikasi plugin yang diinstal

Jenkins mendukung berbagai sistem kontrol versi. Dalam codelab ini, Anda akan menggunakan Git untuk menjalankan pengujian sebelumnya. Dan untuk mendapatkan pengalaman yang lebih baik dalam menjalankan gcloud CLI, Anda perlu menginstal Plugin GCloud SDK.

  1. Di dasbor Jenkins, klik Manage Jenkins, lalu klik Manage Plugins.
  2. Cari plugin Git dan GCloud SDK, lalu instal (jika belum diinstal).

Mengonfigurasi lokasi Android dan Google Cloud SDK

Sekarang Anda memberi tahu Jenkins tempat menemukan Google Cloud SDK dan Android SDK.

Untuk mengonfigurasi Google Cloud SDK dan Android SDK untuk Jenkins, ikuti langkah-langkah berikut:

  1. Di dasbor Jenkins, klik Manage Jenkins, lalu klik Global Tool Configuration.
  2. Di bagian Google Cloud SDK, klik Add Google Cloud SDK.
  3. Di kolom Name, masukkan nama untuk instance Google Cloud SDK yang mudah diingat, misalnya GCloud-SDK.
  4. Masukkan direktori beranda Google Cloud SDK Anda, misalnya, /opt/google-cloud-sdk.
  5. Klik Save.
  6. Konfigurasikan properti seluruh sistem untuk Android dan Google Cloud SDK dengan membuka Dashboard > Manage Jenkins > Configure System.
  7. Centang kotak Variabel lingkungan, lalu klik Tambahkan.
  8. Di kolom Name, masukkan ANDROID_HOME. Di kolom Value, masukkan lokasi Android SDK Anda, misalnya, /opt/Android/Sdk.
  9. Klik kotak centang Tool Locations, lalu klik Add. Dari menu dropdown Name, pilih nama instance Google Cloud SDK yang Anda tambahkan di Global Tool Configuration.
  10. Di kolom Home, masukkan lokasi Google Cloud SDK, misalnya /opt/google-cloud-sdk.
  11. Klik Save.

Menambahkan kredensial akun layanan ke Jenkins

Sekarang, tambahkan kredensial akun layanan gcloud CLI ke Jenkins sehingga Jenkins dapat mengautentikasi dan menjalankan perintah gcloud CLI dengan sukses.

  1. Di dasbor Jenkins, klik Manage Jenkins, lalu klik Manage Credentials.
  2. Di bagian Stores Coverage to Jenkins, klik link domain (global), lalu klik Add Credentials.
  3. Dari menu drop-down Kind, pilih Google Service Account from private key.
  4. Di kolom Project Name, masukkan nama project Firebase Anda.
  5. Pilih kunci JSON, lalu klik Jelajahi dan jelajahi ke lokasi tempat Anda menyimpan kunci akun layanan.
  6. Klik Create.

Sekarang Anda dapat mengonfigurasi build otomatis Jenkins untuk Test Lab.

4. Menjalankan pengujian Test Lab dengan Jenkins CI

Setelah menyiapkan Jenkins, mari kita gabungkan semuanya dan jalankan pengujian yang sama menggunakan Jenkins.

Anda dapat mengonfigurasi Jenkins untuk menjalankan build otomatis dan menjalankan pengujian setiap kali update aplikasi Anda check in. Anda juga dapat mengonfigurasi Jenkins untuk menjalankan build secara berkala. Untuk mempelajari lebih lanjut cara mengonfigurasi build di Jenkins, lihat Mengonfigurasi build otomatis.

Membuat dan mengonfigurasi project Jenkins Anda

Buat project untuk menjalankan pengujian continuous integration aplikasi Anda dengan Test Lab.

Membuat project Jenkins

  1. Buka dasbor Jenkins dengan mengakses http://localhost:8080.
  2. Di dasbor Jenkins, klik New Item.
  3. Masukkan nama untuk project Anda di kolom Item name, lalu klik free project untuk membuat project yang menggunakan konfigurasi build tunggal.
  4. Klik OK. Untuk menyelesaikan konfigurasi project, selesaikan bagian yang tersisa secara berurutan.

Mengonfigurasi pengelolaan kode sumber

  1. Dari tab Source Code Management, pilih Git.
  2. Masukkan https://github.com/android/testing-samples.git di kolom Repository URL.

Mengonfigurasi lingkungan build

Bagian Lingkungan Build memungkinkan Anda mengonfigurasi karakteristik build. Aktifkan autentikasi Google Cloud dengan mengikuti langkah-langkah berikut:

  1. Di tab Build Environment, centang kotak Autentikasi GCloud SDK lalu pilih nama penginstalan yang Anda pilih saat menambahkan informasi penginstalan Google Cloud.
  2. Dari dropdown Google Credentials, pilih kredensial akun layanan yang telah Anda konfigurasi.

Menambahkan langkah-langkah build Gradle untuk mem-build ulang paket APK

  1. Scroll ke bawah ke bagian Build, klik Add build step, lalu pilih Execute shell.
  2. Tambahkan langkah build untuk menjalankan perintah berikut di direktori utama aplikasi Anda:
cd ui/espresso/BasicSample/
./gradlew assembleDebug  # for generating app apk
./gradlew assembleDebugAndroidTest # for generating testing apk

Menambahkan langkah build gcloud CLI ke Jenkins

Sekarang Anda siap menambahkan langkah build ke Jenkins untuk menjalankan Test Lab menggunakan command line gcloud CLI.

Untuk menambahkan langkah build gcloud CLI, tambahkan langkah build Execute shell baru dan masukkan perintah berikut:

gcloud config set project PROJECT_ID
gcloud firebase test android run \
--app ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/debug/app-debug.apk
--test ${WORKSPACE}/ui/espresso/BasicSample/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk

Setelah menyelesaikan penyiapan project, scroll ke bagian bawah halaman dan simpan konfigurasi. Anda akan dialihkan ke halaman beranda project baru.

Menjalankan pengujian dengan Jenkins

Sekarang Anda siap untuk membangun project Jenkins dan menjalankan pengujian seperti pengujian manual yang dijalankan dengan gcloud CLI.

Untuk menjalankan pengujian dengan Jenkins, ikuti langkah-langkah berikut:

  1. Untuk memicu build secara manual, klik Build Now.
  2. Periksa progres dan hasilnya dengan mengklik build baru > Output Konsol.

Jika Anda tidak melihat {i>error<i}, selamat! Anda baru saja menyiapkan project dan menjalankan pengujian di perangkat Pixel 2 dengan sekali klik. Jika Anda mengalami error, lihat Pemecahan masalah.

5. Praktik terbaik lanjutan untuk menjalankan rangkaian pengujian besar

Jika Anda ingin menjalankan banyak pengujian secara bersamaan, ikuti praktik terbaik ini untuk memastikan pengujian Anda berjalan cepat dan andal.

Meningkatkan cakupan pada beberapa konfigurasi perangkat

Anda dapat dengan mudah menambahkan beberapa perangkat ke langkah build gcloud CLI. Anda juga dapat memeriksa serta memilih perangkat, versi, lokal, dan orientasi yang tersedia. Misalnya, perintah berikut menjalankan pengujian di dua perangkat:

  • Google Pixel 2 virtual dengan API level 30 dalam orientasi potret dan bahasa Inggris
  • Samsung Galaxy S20 fisik dengan API level 29 dalam orientasi lanskap dan bahasa Prancis
gcloud firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --device model=Pixel2,version=30,locale=en,orientation=portrait  \
  --device model=x1q,version=29,locale=fr,orientation=landscape

Menggunakan file konfigurasi YAML gcloud CLI

Jika Anda lebih suka mengelola argumen di satu tempat atau dengan sistem kontrol sumber, Anda bisa menetapkan argumen ini dalam file argumen berformat YAML. Untuk mempelajari cara menggunakan fitur ini, jalankan gcloud topic arg-files.

Lakukan sharding pengujian untuk dijalankan secara paralel

Sharding pengujian membagi satu set pengujian menjadi sejumlah subgrup (shard) yang masing-masing berjalan secara terpisah. Test Lab otomatis menjalankan setiap shard secara paralel menggunakan beberapa perangkat, sehingga Test Lab dapat menyelesaikan seluruh rangkaian pengujian dengan lebih cepat. Untuk mengetahui informasi selengkapnya, lihat Mengaktifkan sharding.

Untuk mengaktifkan sharding, gunakan saluran gcloud beta, lalu tambahkan flag –num-uniform-shard atau –test-targets-for-shard ke langkah build gcloud CLI. Misalnya, untuk melakukan sharding pengujian menjadi lima eksekusi dan berjalan secara paralel, jalankan perintah berikut:

gcloud beta firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --num-uniform-shards 5

Aktifkan deteksi kegagalan

Pengujian seluler sering kali tidak stabil. Terkadang pengujian lulus, dan di lain waktu, pengujian bisa gagal, meskipun dengan penyiapan yang sama. Anda dapat mendeteksi apakah pengujian yang gagal tidak stabil dengan menggunakan flag gcloud CLI –num-flaky-test-attempts. Flag ini menentukan berapa kali eksekusi uji harus dicoba ulang jika satu atau beberapa kasus pengujian gagal karena alasan apa pun.

Misalnya, untuk menjalankan kembali kasus pengujian yang gagal tiga kali lagi setelah kegagalan awal dijalankan, tentukan hal berikut:

gcloud beta firebase test android run \
  --type instrumentation \
  --app app-debug.apk \
  --test app-debug-test.apk \
  --num-flaky-test-attempts 3

6. Selamat

Selamat, Anda berhasil menjalankan pengujian Test Lab pertama dengan sistem CI.

Anda telah membuat aplikasi dan menguji APK, serta menjalankan uji instrumentasi dengan Test Lab menggunakan gcloud CLI. Anda juga menyiapkan project Jenkins untuk mengotomatiskan pengujian yang sama.

Sekarang Anda sudah mengetahui langkah-langkah utama untuk mengintegrasikan Test Lab ke dalam sistem CI/CD.

Apa langkah selanjutnya?

Lihat Cara menyiapkan CI menggunakan Firebase Emulator Suite

Bacaan lebih lanjut

Dokumen referensi