Selama pengujian VTS, perintah shell digunakan untuk mengeksekusi biner
pengujian sisi target, untuk mendapatkan/menetapkan properti, variabel lingkungan, dan informasi sistem,
serta untuk memulai/menghentikan framework Android. Anda dapat menjalankan perintah shell
perangkat VTS menggunakan perintah adb shell
atau driver shell VTS
yang berjalan di perangkat (direkomendasikan).
Menggunakan shell ADB
Pengujian yang memerlukan penonaktifan port USB atau memulai ulang perangkat selama
pengujian harus menggunakan shell ADB karena driver shell VTS tidak tersedia tanpa
koneksi USB yang persisten. Anda dapat memanggil shell ADB dari
objek AndroidDevice
dalam skrip pengujian Python. Contoh:
- Mendapatkan objek perangkat Android:
self.device = self.android_devices[0]
- Berikan satu perintah shell:
result = self.device.adb.shell(‘ls')
Menggunakan driver shell VTS
Driver shell VTS adalah biner agen yang berjalan di perangkat dan menjalankan
perintah shell. Secara default, VTS menggunakan driver shell jika driver berjalan
di perangkat karena metode ini memiliki latensi yang lebih rendah daripada menggunakan perintah adb
shell
.
Framework VTS mendukung pengujian multiperangkat dengan setiap perangkat Android direpresentasikan sebagai objek AndroidDevice di runner dasar. Secara default, framework VTS akan mendorong agen VTS dan biner driver shell VTS ke setiap perangkat Android dan membuat koneksi TCP ke agen VTS di perangkat tersebut.
Untuk mengeksekusi perintah shell, skrip Python sisi host membuat panggilan fungsi ke objek ShellMirror di dalam objek AndroidDevice. Objek ShellMirror memaketkan teks perintah shell ke dalam pesan protobuf dan mengirimkannya (melalui saluran TCP) ke agen VTS di perangkat Android. Agen yang berjalan di perangkat kemudian meneruskan perintah shell ke driver shell VTS melalui soket Unix.
Saat menerima perintah shell, driver shell VTS akan mengeksekusi perintah
melalui nohup di
shell perangkat untuk mencegah error. Stdout, stderr, dan kode return kemudian
diambil dari nohup
dan dikirim kembali ke agen VTS. Terakhir, agen
akan membalas host dengan menggabungkan hasil perintah ke dalam
pesan protobuf
.
Kelebihan
Keuntungan menggunakan driver shell VTS, bukan adb
shell
, meliputi:
- Keandalan. Driver shell VTS menggunakan
nohup
untuk mengeksekusi perintah pada setelan default. Karena pengujian VTS sebagian besar adalah pengujian kernel dan HAL level rendah,nohup
memastikan perintah shell tidak berhenti berfungsi selama eksekusi. - Performa. Meskipun perintah
adb shell
menyimpan cache beberapa hasil (seperti mencantumkan file dalam direktori), perintah ini memiliki overhead koneksi saat melakukan tugas seperti menjalankan biner pengujian. Driver shell VTS mempertahankan koneksi aktif selama pengujian sehingga satu-satunya overhead adalah komunikasi USB. Dalam pengujian kami, menggunakan driver shell VTS untuk mengeksekusi perintah dengan 100 panggilan ke biner gtest kosong sekitar 20 persen lebih cepat daripada menggunakanadb shell
; perbedaan sebenarnya lebih besar karena komunikasi shell VTS memiliki logging yang ekstensif. - Pemeliharaan status. Driver shell VTS mempertahankan sesi terminal untuk setiap nama terminal (nama terminal default adalah default). Variabel lingkungan yang ditetapkan dalam satu sesi terminal hanya tersedia untuk perintah berikutnya dalam sesi yang sama.
- Dapat diperluas. Komunikasi perintah shell antara framework VTS dan driver perangkat digabungkan dalam protobuf untuk memungkinkan potensi kompresi, remote, enkripsi, dll. di masa mendatang. Kemungkinan lain untuk meningkatkan performa juga tersedia, termasuk penguraian hasil sisi perangkat saat overhead komunikasi menjadi lebih besar daripada penguraian string hasil.
Kekurangan
Kekurangan menggunakan driver shell VTS, bukan adb
shell
, meliputi:
- Biner tambahan. File agen VTS harus dikirim ke perangkat dan dibersihkan setelah eksekusi pengujian.
- Memerlukan koneksi aktif. Jika koneksi TCP antara
host dan agen terputus selama pengujian (karena pemutusan koneksi USB, penonaktifan port,
error perangkat, dll.) baik secara sengaja maupun tidak sengaja, perintah shell
tidak dapat dikirim ke agen VTS. Meskipun dengan pengalihan otomatis ke
adb shell
, hasil dan status perintah sebelum pemutusan koneksi 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 satu perintah shell:
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
kunci stdouts
, stderrs
, dan return_codes
.
Terlepas dari apakah perintah shell diberikan sebagai string tunggal atau daftar
string perintah, setiap nilai kamus hasil selalu berupa daftar.
Untuk memverifikasi kode yang ditampilkan dari daftar perintah, skrip pengujian harus memeriksa indeks. 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')