VTS testi sırasında, kabuk komutları hedef tarafı testi yürütmek için kullanılır
ortam değişkenlerini ve sistem bilgilerini almak/ayarlamak için ikili
başlatma/durdurma işlemlerini yapabilirsiniz. VTS cihaz kabuğunu yürütebilirsiniz
adb shell
komutunu veya VTS kabuk sürücüsünü kullanarak komutları
çalışmasıdır (önerilir).
ADB kabuğunu kullan
İşlem sırasında USB bağlantı noktasının kapatılmasını veya cihazın yeniden başlatılmasını gerektiren testler
VTS kabuk sürücüsü, ADB kabuğu olmadan kullanılamadığından test için
kalıcı USB bağlantısı. ADB kabuğunu şuradan çağırabilirsiniz:
AndroidDevice
nesnesini test edin. Örnekler:
- Android cihaz nesnesi alın:
self.device = self.android_devices[0]
. - Tek bir kabuk komutu yayınlayın:
result = self.device.adb.shell(‘ls')
.
VTS kabuk sürücüsünü kullanma
VTS kabuk sürücüsü, cihazda çalışan ve
kabuk komutlarının bir parçasıdır. Sürücü çalışıyorsa VTS varsayılan olarak kabuk sürücüsünü kullanır
bu yöntem adb
shell
komutunu kullanmaya kıyasla daha az gecikmeye neden olduğu için cihazda.
VTS çerçevesi, her Android cihazın birden fazla cihazda test edebilmesini temel çalıştırıcıda bir AndroidDevice nesnesi olarak temsil edilir. Varsayılan olarak VTS çerçeve, VTS aracısı ve VTS kabuk sürücüsü ikili programlarını her bir Android cihaza aktarır ve bu cihazlardaki VTS aracılarına TCP bağlantıları kurar.
Kabuk komutunu yürütmek için ana makine taraflı Python komut dosyası bir işlev çağrısı ile değiştirin. ShellMirror nesne, kabuk komut metinlerini protobuf bir mesaj verir ve bunu (TCP kanalı üzerinden) Android üzerindeki VTS temsilcisine gönderir olanak tanır. Cihazda çalışan aracı, daha sonra kabuk komutunu VTS kabuğuna yönlendirir bir sürücüyüm var.
VTS kabuk sürücüsü bir kabuk komutu aldığında,
nohup üzerinden
takılmasını önler. Stdout, stderr ve dönüş kodu,
nohup
kaynağından alındı ve VTS temsilcisine geri gönderildi. Son olarak temsilci,
komut sonuçlarını bir
protobuf
mesaj.
Avantajları
adb
shell
yerine VTS kabuk sürücüsünü kullanmanın avantajları şunlardır:
- Güvenilirlik. VTS kabuk sürücüsü,
Varsayılan ayarda komutları yürütmek için
nohup
. VTS testleri, çoğunlukla daha düşük seviye olan HAL ve çekirdek testleri.nohup
, kabuk komutları yürütülürken takılıp kalmıyor. - Performans.
adb shell
komutu bağlantısı olan bazı sonuçları (örneğin, bir dizinde dosya listeleme) önbelleğe alır ek yük oluşturabilir. VTS kabuk sürücüsü Test boyunca aktif bir bağlantı sağladığından, ek yük yalnızca USB'den oluşur. iyi bir iletişimdir. Testlerimizde, VTS kabuk sürücüsünü kullanarak Boş bir gtest ikili programına 100 çağrı yapmak,adb shell
; VTS kabuğundan dolayı gerçek fark daha büyüktür iletişimin kapsamlı bir günlük kaydı vardır. - Devlet muhafazası. VTS kabuk sürücüsünde bir terminal bulunur oturumuna (varsayılan terminal adı default) seçin. Bir terminal oturumunda ayarlanan ortam değişkenleri şunlardır: yalnızca aynı oturumdaki sonraki komutlar tarafından kullanılabilir.
- Uzatılabilir. VTS arasındaki kabuk komut iletişimleri çerçeve ve cihaz sürücüsü, olası bir olasılık sağlamak üzere protobuf'a ileride sıkıştırma, uzaktan, şifreleme vb. ile ilgili olması gerekir. Diğer olasılık: cihaz tarafında sonuç ayrıştırma da dahil olmak üzere performansı artırma yöntemleri de mevcuttur. iletişim ek yükü sonuç dizesi ayrıştırma işleminden daha büyük hale geldiğinde ortaya çıkar.
Dezavantajları
adb
shell
yerine VTS kabuk sürücüsünü kullanmanın dezavantajları şunlardır:
- Ek ikili programlar. VTS aracısı dosyalarının aktarılması gerekiyor ve test yürütülmesinden sonra temizlenir.
- Etkin bağlantı gerektirir. Aradaki TCP bağlantısı
test sırasında ana makine ve aracı kayboldu (USB bağlantısının kesilmesi, bağlantı noktasının kapatılması,
cihaz kilitlenmesi vb.) kasıtlı veya bilinçli olarak bir kabuk komutu
VTS temsilcisine iletilemez. Otomatik geçişle bile
adb shell
, bağlantı kesilmeden önceki komutun sonucu ve durumu bilemezsiniz.
Örnekler
VTS ana makine tarafı Python test komut dosyasında kabuk komutlarını kullanma örnekleri:
- Android cihaz nesnesi alın:
self.device = self.android_devices[0]
. - Seçili cihaz için bir kabuk nesnesi alın:
self.shell = self.device.shell
. - Tek bir kabuk komutu yayınlayın:
results = self.shell.Execute(‘ls')
. - Kabuk komutları listesini yayınlayın:
results = self.shell.Execute([‘cd /data/local/tmp', ‘ls'])
.
Komut sonucu nesnesi
Kabuk komutunun döndürdüğü nesne döndürme nesnesi, şunu içeren bir sözlüktür:
stdouts
, stderrs
ve return_codes
anahtarları.
Kabuk komutunun tek bir dize veya liste olarak sağlandığından bağımsız olarak
sonuç sözlüğünün her değeri daima bir listedir.
Bir komut listesinin dönüş kodunu doğrulamak için test komut dosyasının görebilirsiniz. Örnek:
asserts.assertFalse(any(results[‘return_codes']), ‘some command failed.')
Alternatif olarak, komut dosyası her bir komut dizinini tek tek kontrol edebilir. Örnek:
asserts.assertEqual(results[‘return_codes'][0], 0, ‘first command failed')
asserts.assertEqual(results[‘return_codes'][1], 0, ‘second command failed')