Siapkan peluncuran otomatis uji UI aplikasi Android melalui TeamCity

Cepat atau lambat, setiap penguji yang mengembangkan praktik swa-uji menghadapi masalah pelaksanaan otonom dari pengujian mereka. Selain itu, jika spesialis berpengalaman, maka ia mencoba untuk menangani ini sedini mungkin. Jadi saya, setelah autotest pertama yang berhasil dijalankan secara lokal, memutuskan untuk segera mengkonfigurasi peluncuran di TeamCity.

Saya perhatikan bahwa di perusahaan kami praktis tidak ada keahlian dalam peluncuran jarak jauh tes instrumental Android, jadi saya harus google keras, tapi saya juga tidak menemukan panduan terperinci di sana. Karena itu, saya memutuskan untuk membaca instruksi ini.

Di pintu masuk kami memiliki:

  • tes berhasil dijalankan secara lokal
  • menjalankan server TeamCity
  • server pada debian dengan KVM dan X

Penafian segera tentang server tempat peluncuran akan dilakukan: menyiapkan OS, virtualisasi perangkat keras, dan shell grafis bukan subjek dari artikel ini dan akan dihapus.

Instal dan konfigurasikan agen TeamCity


Mari kita mulai dengan Java. Hal utama di sini adalah memilih versi yang tepat. Saya memiliki 3 dependensi: tes sendiri, alat android, dan agen tim. Saya berhenti di versi 8 untuk menggunakan satu JVM untuk semua orang. Jika Anda kurang beruntung dan akan ada konflik, Anda harus mengkonfigurasi penggunaan beberapa versi Java pada mesin yang sama. Satu lagi catatan: jika Anda memiliki debian, maka pertama-tama Anda perlu menambahkan repositori webupd8team (google sangat cepat).

sudo apt-get install oracle-java8-installer sudo apt-get install oracle-java8-set-default 

Selanjutnya, buat pengguna di mana agen akan diluncurkan dan, sesuai, segalanya. Jangan lupa untuk mengatur kata sandi.

 sudo useradd -d /home/tc_agent -s /bin/bash -m tc_agent sudo passwd tc_agent 

Distribusi agen dapat diambil di antarmuka web dari tim Anda. Untuk melakukan ini, buka bagian Agen dan klik tautan Instal Agen Build di kanan atas. Unduh dan unzip ke folder yang diinginkan di server (saya sarankan folder home pengguna kami - /home/tc_agent ). Selanjutnya, tambahkan hak untuk menjalankan semua skrip:

 sudo chmod +x /home/tc_agent/BuildAgent/bin/* 

Jika versi teamcity Anda mendukung Agent Push, maka itu masih lebih mudah. Cukup buka tab yang sesuai di antarmuka web, klik tombol Instal Agen ... dan ikuti instruksi.

Kami mengonfigurasi konfigurasi. Jika Anda menggunakan instalasi jarak jauh, maka itu telah dibuat dan Anda hanya perlu menentukan nama agen di dalamnya. Jika tidak, buat:

 cd /home/tc_agent/BuildAgent/conf cp buildAgent.dist.properties buildAgent.properties nano buildAgent.properties 

serverUrl= alamat antarmuka web server, dan name= nama unik agen. Jika Anda memiliki beberapa agen atau port default (9090) sedang sibuk, maka atur sendiri menggunakan parameter ownPort= .

Kita /home/tc_agent/BuildAgent/bin/agent.sh start perintah /home/tc_agent/BuildAgent/bin/agent.sh start . Jika semuanya dikonfigurasi dengan benar, maka kita akan melihat agen kami di tab Tidak Sah . Kami mengizinkan dan Anda dapat menggunakan.

Untuk memulai agen secara otomatis, buat skrip /etc/init.d/teamcity_agent dengan konten berikut:

 #!/bin/bash BINARY="/home/tc_agent/BuildAgent/bin/agent.sh" RUNAS="tc_agent" LOGFILE="/home/tc_agent/BuildAgent/logs/start.log" CMD="$BINARY $1 $2" runuser - "$RUNAS" -c "$CMD > $LOGFILE" cat $LOGFILE 

Tambahkan hak untuk menjalankan sudo chmod +x /etc/init.d/teamcity_agent dan tambahkan baris /etc/init.d/teamcity_agent start dari file /etc/rc.local .

Kontrol reboot, agen telah meningkat, kami melanjutkan.

Instal Android SDK dan emulator


Unduh alat SDK Android (hanya alat baris perintah) dan buka paket itu ke direktori yang diinginkan. Buat direktori untuk menyimpan gambar AVD di masa depan (harus ada ruang yang cukup). Bagi saya, admin telah menghubungkan repositori utama ke direktori /var, dan saya akan meletakkan semuanya di sana. Selanjutnya, kami mengubah pemilik file menjadi pengguna kami dan langkah selanjutnya paling baik dilakukan di bawahnya.

 sudo chown tc_agent -R /var/opt/android-sdk sudo mkdir /var/opt/.android sudo chown tc_agent /var/opt/.android 

Tambahkan variabel lingkungan. Buka file /home/tc_agent/.bash_profile untuk mengedit dan menulis:

 export ANDROID_HOME=/var/opt/android-sdk export ANDROID_AVD_HOME=/var/opt/.android/avd export PATH=$ANDROID_HOME/platform-tools:$PATH export PATH=$ANDROID_HOME/tools:$PATH 

Kami memulai ulang dan memverifikasi bahwa variabel ditampilkan dengan benar di antarmuka web teamcity pada tab Parameter Agen .

Kami mencoba menjalankan sdkmanager: perintah $ANDROID_HOME/tools/bin/sdkmanager --list daftar harus mencantumkan paket yang diinstal dan tersedia. Jika Anda mendapatkan kesalahan seperti Exception in thread "main" java.lang.NoClassDefFoundError , kemudian coba solusi ini .

Instal alat yang diperlukan dan gambar mesin virtual.

 $ANDROID_HOME/tools/bin/sdkmanager emulator platform-tools tools $ANDROID_HOME/tools/bin/sdkmanager 'system-images;android-25;google_apis;x86' 

Buat dan jalankan AVD


Jadi, kami mengunduh gambar 'system-images;android-25;google_apis;x86' (Android 7.1.1), buat perangkat virtual berdasarkan itu. Saya tidak akan masuk ke rincian semua parameter yang mungkin dari utilitas avdmanager, saya akan menunjukkannya pada jumlah minimum yang mungkin:

 $ANDROID_HOME/tools/bin/avdmanager create avd -n avd_name -k "system-images;android-25;google_apis;x86" 

Kami mentransfer nama dan gambar asli (harus diunduh terlebih dahulu melalui sdkmanager). Jika kesalahan dikembalikan, tambahkan tanda -v untuk melihat teks.

Kami lolos ke emulator. Pertama, periksa emulator, platform, platform-tools, folder gambar sistem di direktori SDK. Saya membuat platform dengan tangan saya, sisanya dibuat ketika menginstal paket melalui sdkmanager. Selanjutnya, periksa akselerasi perangkat keras. Seharusnya ada jawaban seperti itu.

 $ANDROID_HOME/emulator/emulator -accel-check accel: 0 KVM (version 12) is installed and usable. accel 

Jika ada kesalahan saat mengakses /dev/kvm , maka tambahkan haknya:

 addgroup kvm usermod -a -G kvm tc_agent chown root:kvm /dev/kvm 

Plus, saya masih perlu menginstal QEMU: sudo apt-get install qemu-kvm
Buat relogon dan periksa lagi emulator.

Jika semuanya baik-baik saja, maka coba jalankan. Untuk melihat melalui mata, sambungkan ke server melalui vnc. Dan jalankan emulator:

 $ANDROID_HOME/emulator/emulator @avd_name 

Jendela berikut akan muncul:


Selama uji coba, kami akan berjalan tanpa gambar, jadi kami akan menambahkan parameter -no-window .

Konfigurasikan build di TeamCity


Kami lolos ke tahap akhir - menyiapkan peluncuran tes kami secara otonom. Saya membangun 4 langkah.

1. Mulai emulator

 nohup /var/opt/android-sdk/emulator/emulator @avd_name -no-snapshot-save -no-boot-anim -no-window -snapshot clean_snap_1 > start_emulator.log 2>&1& 

Karena emulator "mengunci" terminal, Anda perlu membuka ikatan proses menggunakan utilitas nohup (Anda dapat melakukannya dengan cara lain - Anda memutuskan). Untuk berjaga-jaga, simpan log emulator ke file start_emulator.log . Untuk menjalankan tes, saya membuat snapshot bersih (lihat di sini tentang cara melakukan ini ) dan menambahkan tombol -no-snapshot-save sehingga tidak akan ditimpa.

2. Menunggu perangkat untuk boot.

 adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed) ]]; do sleep 1; done;' 

Pertama, kita menunggu status wait-for-device , kemudian dalam loop kita menunggu ketika variabel sys.boot_completed mengembalikan 1.

3. Menjalankan tes. Semuanya individual di sini, inilah contoh saya:

 ./gradlew clean connectedAndroidTest 

4. Tutup emulator. Di sini sejauh ini saya telah membuat penghentian proses yang sederhana.

 kill -s 2 `pgrep qemu-system` 

Tetapi lebih baik, tentu saja, untuk mengingat ID proses saat membuat emulator. Ini akan diperlukan ketika kita mulai menjalankan tes di beberapa utas, yang secara tidak sengaja “membunuh” proses yang salah.

Itu saja, terima kasih sudah membaca. Jika ada komentar dari kolega yang lebih berpengalaman, maka saya dengan senang hati akan melakukan perubahan pada manual.

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


All Articles