Perintah shell perangkat

Selama pengujian VTS, perintah shell digunakan untuk mengeksekusi biner pengujian sisi target, untuk mendapatkan/mengatur properti, variabel lingkungan, dan informasi sistem, dan untuk memulai/menghentikan framework Android. Anda dapat menjalankan perintah shell perangkat VTS menggunakan perintah adb shell atau driver shell VTS yang berjalan pada perangkat (disarankan).

Gunakan cangkang ADB

Pengujian yang memerlukan mematikan port USB atau me-reboot 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:

  • Dapatkan objek perangkat Android:
    self.device = self.android_devices[0]
    
  • Keluarkan satu perintah shell:
    result = self.device.adb.shell(‘ls')
    

Gunakan driver shell VTS

Driver shell VTS adalah biner agen yang berjalan pada perangkat dan menjalankan perintah shell. Secara default, VTS menggunakan driver shell jika driver berjalan di perangkat karena metode ini memiliki latensi yang lebih kecil dibandingkan menggunakan perintah adb shell .

Gambar 1. Driver shell VTS.

Kerangka kerja VTS mendukung pengujian multi-perangkat di mana setiap perangkat Android direpresentasikan sebagai objek AndroidDevice di base runner. Secara default, kerangka kerja VTS mendorong 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 panggilan fungsi ke objek ShellMirror di dalam objek AndroidDevice. Objek ShellMirror mengemas teks perintah shell ke dalam pesan protobuf dan mengirimkannya (melalui saluran TCP) ke agen VTS di perangkat Android. Agen yang berjalan pada perangkat kemudian meneruskan perintah shell ke driver shell VTS melalui soket Unix.

Ketika driver shell VTS menerima perintah shell, ia menjalankan perintah melalui nohup pada shell perangkat untuk mencegah hang. Stdout, stderr, dan kode pengembalian kemudian diambil dari nohup dan dikirim kembali ke agen VTS. Terakhir, agen membalas ke host dengan menggabungkan hasil perintah ke dalam pesan protobuf .

Keuntungan

Keuntungan menggunakan driver shell VTS dibandingkan adb shell antara lain:

  • Keandalan. Driver shell VTS menggunakan nohup untuk menjalankan perintah pada pengaturan default. Karena pengujian VTS sebagian besar merupakan pengujian HAL dan kernel tingkat rendah, nohup memastikan perintah shell tidak hang selama eksekusi.
  • Pertunjukan . Meskipun perintah adb shell menyimpan beberapa hasil (seperti membuat daftar 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 menjalankan perintah dengan 100 panggilan ke biner gtest kosong sekitar 20 persen lebih cepat dibandingkan menggunakan adb shell ; perbedaan sebenarnya lebih besar karena komunikasi shell VTS memiliki logging yang luas.
  • Pemeliharaan negara . Driver shell VTS memelihara sesi terminal untuk setiap nama terminal (nama terminal default adalah default ). Variabel lingkungan yang diatur dalam satu sesi terminal hanya tersedia untuk perintah berikutnya dalam sesi yang sama.
  • Dapat diperpanjang . Komunikasi perintah shell antara kerangka VTS dan driver perangkat dibungkus dalam protobuf untuk memungkinkan potensi kompresi, remoting, enkripsi, dll. di masa depan. Kemungkinan lain untuk meningkatkan kinerja juga tersedia, termasuk penguraian hasil di sisi perangkat ketika overhead komunikasi menjadi lebih besar daripada penguraian string hasil.

Kekurangan

Kerugian menggunakan driver shell VTS dibandingkan adb shell antara lain:

  • Biner tambahan . File agen VTS harus dikirim ke perangkat dan dibersihkan setelah eksekusi pengujian.
  • Membutuhkan koneksi aktif . Jika koneksi TCP antara host dan agen hilang selama pengujian (karena pemutusan USB, penutupan port, kerusakan perangkat, dll.) baik secara sengaja atau tidak, perintah shell tidak dapat dikirimkan ke agen VTS. Bahkan dengan peralihan otomatis ke adb shell , hasil dan status perintah sebelum pemutusan sambungan tidak akan diketahui.

Contoh

Contoh penggunaan perintah shell dalam skrip pengujian Python sisi host VTS:

  • Dapatkan objek perangkat Android:
    self.device = self.android_devices[0]
    
  • Dapatkan objek shell untuk perangkat yang dipilih:
    self.shell = self.device.shell
    
  • Keluarkan satu perintah shell:
    results = self.shell.Execute(‘ls')
    
  • Keluarkan daftar perintah shell:
    results = self.shell.Execute([‘cd /data/local/tmp', ‘ls'])
    

Objek hasil perintah

Objek pengembalian dari eksekusi perintah shell adalah kamus yang berisi kunci stdouts , stderrs , dan return_codes . Terlepas dari apakah perintah shell disediakan sebagai string tunggal atau daftar string perintah, setiap nilai kamus hasil selalu berupa daftar.

Untuk memverifikasi kode pengembalian daftar perintah, skrip pengujian harus memeriksa indeks. Contoh:

asserts.assertFalse(any(results[‘return_codes']), ‘some command failed.')

Alternatifnya, 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')