Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Perintah Shell Perangkat

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

Menggunakan shell 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')
    

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 sedikit daripada 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 runner dasar. Secara default, kerangka kerja VTS mendorong agen VTS dan biner 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 di perangkat kemudian meneruskan perintah shell ke driver shell VTS melalui soket Unix.

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

Keuntungan

Keuntungan menggunakan driver shell VTS daripada adb shell meliputi:

  • Keandalan. Driver shell VTS menggunakan nohup untuk menjalankan perintah pada pengaturan default. Karena tes VTS sebagian besar merupakan tes HAL dan kernel level lebih rendah, nohup memastikan perintah shell tidak hang selama eksekusi.
  • Performa . Sementara perintah adb shell menyimpan beberapa hasil (seperti mencantumkan file dalam direktori), ia memiliki overhead koneksi saat melakukan tugas-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 daripada menggunakan adb shell ; perbedaan sebenarnya lebih besar karena komunikasi shell VTS memiliki pencatatan yang ekstensif.
  • Menjaga negara . Pengandar shell VTS mempertahankan sesi terminal untuk setiap nama terminal (nama terminal default adalah default ). Variabel lingkungan yang disetel dalam satu sesi terminal hanya tersedia untuk perintah berikutnya dalam sesi yang sama.
  • Dapat diperpanjang . Komunikasi perintah shell antara kerangka kerja VTS dan driver perangkat dibungkus dalam protobuf untuk mengaktifkan potensi kompresi, remoting, enkripsi, dll. Di masa mendatang. Kemungkinan lain untuk meningkatkan kinerja juga tersedia, termasuk penguraian hasil sisi perangkat saat overhead komunikasi menjadi lebih besar daripada penguraian string hasil.

Kekurangan

Kerugian menggunakan driver shell VTS daripada adb shell meliputi:

  • Biner tambahan . File agen VTS harus didorong ke perangkat dan dibersihkan setelah eksekusi uji.
  • Membutuhkan koneksi aktif . Jika koneksi TCP antara host dan agen hilang selama pengujian (karena pemutusan USB, pematian port, kerusakan perangkat, dll.) Baik secara sengaja atau tidak sengaja, perintah shell tidak dapat dikirim 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 yang dikembalikan 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 yang dikembalikan dari daftar perintah, skrip pengujian harus memeriksa indeks. Contoh:

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

Sebagai alternatif, 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')