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:
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.