Selama pengujian VTS, perintah shell digunakan untuk menjalankan pengujian sisi target
biner, untuk mendapatkan/menetapkan properti, variabel lingkungan, dan informasi sistem,
dan untuk memulai/menghentikan framework Android. Anda dapat menjalankan shell perangkat VTS
menggunakan perintah adb shell
atau driver shell VTS
yang berjalan di perangkat (direkomendasikan).
Menggunakan shell ADB
Pengujian yang mengharuskan untuk mematikan port USB atau memulai ulang perangkat selama
pengujian harus menggunakan ADB shell karena driver shell VTS tidak tersedia tanpa
koneksi USB yang persisten. Anda dapat memanggil ADB shell dari
AndroidDevice
dalam skrip pengujian Python. Contoh:
- Mendapatkan objek perangkat Android:
self.device = self.android_devices[0]
- Berikan perintah shell tunggal:
result = self.device.adb.shell(‘ls')
Menggunakan driver shell VTS
Driver shell VTS adalah biner agen yang berjalan di perangkat dan dieksekusi
menggunakan perintah shell. Secara default, VTS menggunakan {i>
shell<i} jika {i>driver<i} sedang berjalan
di perangkat karena metode ini memiliki latensi lebih rendah daripada menggunakan perintah adb
shell
.
Framework VTS mendukung pengujian multiperangkat di mana setiap perangkat Android direpresentasikan sebagai objek AndroidDevice dalam base runner. Secara default, VTS framework mengirim biner agen VTS dan driver shell VTS ke setiap perangkat Android dan membuat koneksi TCP ke agen VTS di perangkat tersebut.
Untuk menjalankan perintah shell, skrip Python sisi host membuat sebuah fungsi ke objek ShellMirror di dalam objek AndroidDevice. Kepitia objek memaketkan teks perintah shell ke dalam protobuf dan mengirimkannya (melalui saluran TCP) ke agen VTS di Android perangkat seluler. Agen yang berjalan di perangkat kemudian meneruskan perintah shell ke VTS shell {i>driver<i} melalui soket Unix.
Saat driver shell VTS menerima perintah shell, driver akan mengeksekusi perintah tersebut
melalui nohup di
{i>shell<i} perangkat agar tidak menggantung. Stdout, {i>stderr<i}, dan kode
{i>return<i} kemudian akan
diambil dari nohup
dan dikirim kembali ke agen VTS. Terakhir, agen
membalas {i>host<i} dengan menggabungkan hasil perintah ke dalam
protobuf
pesan.
Kelebihan
Keuntungan menggunakan driver shell VTS dibandingkan adb
shell
meliputi:
- Keandalan. {i>Driver<i} VTS {i>shell<i} menggunakan
nohup
untuk menjalankan perintah pada setelan default. Seperti pengujian VTS sebagian besar pengujian HAL dan kernel tingkat rendah,nohup
memastikan shell tidak macet selama eksekusi. - Performa. Meskipun perintah
adb shell
meng-cache beberapa hasil (misalnya membuat daftar file dalam direktori) setelah memiliki koneksi overhead saat melakukan tugas-tugas seperti mengeksekusi biner pengujian. Driver shell VTS mempertahankan koneksi aktif sepanjang pengujian sehingga satu-satunya {i>overhead<i} adalah USB komunikasi antarlayanan. Dalam pengujian kita, menggunakan {i>driver<i} {i> shell<i} VTS untuk menjalankan perintah dengan 100 panggilan ke biner gtest kosong sekitar 20 persen lebih cepat daripada menggunakanadb shell
; perbedaan yang sebenarnya lebih besar karena {i>shell VTS<i} komunikasi memiliki {i>logging<i} yang ekstensif. - Penyimpanan status. {i>Driver<i} VTS {i>shell<i} VTS mengelola terminal untuk setiap nama terminal (nama terminal default adalah default). Variabel lingkungan yang ditetapkan dalam satu sesi terminal adalah hanya tersedia untuk perintah berikutnya dalam sesi yang sama.
- Dapat Diperpanjang. Komunikasi perintah shell antara VTS framework dan driver perangkat dibungkus dalam protobuf untuk memungkinkan kompresi, jarak jauh, enkripsi, dll. di masa depan. Kemungkinan lain untuk peningkatan performa juga tersedia, termasuk penguraian hasil sisi perangkat saat overhead komunikasi menjadi lebih besar daripada penguraian string hasil.
Kekurangan
Kekurangan menggunakan driver shell VTS dibandingkan adb
shell
meliputi:
- Biner tambahan. File agen VTS harus dikirim ke perangkat dan dibersihkan setelah pelaksanaan uji coba.
- Memerlukan koneksi aktif. Jika koneksi TCP antara
host dan agen hilang selama pengujian (karena koneksi USB terputus, porta dimatikan,
error perangkat, dll.) baik sengaja maupun tidak, perintah shell
tidak dapat dikirimkan ke agen VTS. Bahkan dengan pengalihan otomatis ke
adb shell
, hasil dan status perintah sebelum koneksi terputus tidak akan diketahui.
Contoh
Contoh penggunaan perintah shell dalam skrip pengujian Python sisi host VTS:
- Mendapatkan objek perangkat Android:
self.device = self.android_devices[0]
- Dapatkan objek shell untuk perangkat yang dipilih:
self.shell = self.device.shell
- Berikan perintah shell tunggal:
results = self.shell.Execute(‘ls')
- Berikan daftar perintah shell:
results = self.shell.Execute([‘cd /data/local/tmp', ‘ls'])
Objek hasil perintah
Objek yang ditampilkan dari eksekusi perintah shell adalah kamus yang berisi
tombol stdouts
, stderrs
, dan return_codes
.
Terlepas dari apakah perintah shell disediakan sebagai string tunggal atau daftar
dari {i>string<i} perintah, setiap nilai kamus hasil
selalu berupa daftar.
Untuk memverifikasi kode pengembalian dari daftar perintah, skrip pengujian harus memeriksa indeks tersebut. Contoh:
asserts.assertFalse(any(results[‘return_codes']), ‘some command failed.')
Atau, skrip dapat memeriksa setiap indeks perintah satu per satu. Contoh:
asserts.assertEqual(results[‘return_codes'][0], 0, ‘first command failed')
asserts.assertEqual(results[‘return_codes'][1], 0, ‘second command failed')