Cihaz kabuğu komutları

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.

Şekil 1. VTS kabuk sürücüsü.

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