VTS, birden fazla Android arasında etkileşim gerektiren testleri destekler cihazlar.
Mimari
VTS, test amacıyla cihaz serilerini alıp aktarmak için TradeFed çerçevesini kullanır modüllerinde yer alır.
Cihaz sayısı ve cihaz türü gibi cihaz gereksinimleri, test planı yapılandırmasında belirtilir. Örneğin, bir test planı Bunun için Sailfish derleme hedeflerine sahip iki Android cihaz gerekir.
Cihaz tahsisi
Test altyapısı (genellikle test planlayıcısı) kullanılabilir durumdaki test planı yapılandırmasında belirtilen gereksinimleri karşılayan VTS çerçevesine bakalım. Ayrılan cihazlar, test modülünde kullanılmıyor. Daha sonra VTS aracı ikili programları, ayrılmış tüm cihazlar (çalışmaması yönünde özel olarak talimat verilmedikçe). Bu sayede kabuk komutları ve HAL RPC'leri için TCP bağlantılarının tüm kullanıcılar için test komut dosyasındaki cihazlarda görebilirsiniz.
Test hazırlayıcılar
Çerçeve, aldığı tüm cihazlar için test hazırlayıcıları çalıştırır seri numaraları olabilir. Hedef hazırlayıcılar tek veya birden çok cihaz olabilir:
- Tek cihazlı hedef hazırlayıcılar (örneğin,
VtsDeviceInfoCollector):
- Yalnızca gerekli cihaz listesi (gelecek sürümlerde modül düzeyinde yapılandırmaya izin verilecektir).
- Yalnızca bir seri cihaz alın.
- Belirli bir cihazda hazırlık ve temizleme görevleri yürütün.
- Birden çok cihaz için hedef hazırlayıcılar (örneğin,
VtsPythonVirtualenvPreparer):
- Test planı yapılandırmasında veya test modülünde belirtilebilir yapılandırma
- Tüm cihaz serilerini al
- Her cihaz veya tüm cihazlar için hazırlama ve temizleme görevleri çalıştırın.
Test modülleri
Teste hazırlayanlar kurulumu tamamladıktan sonra test modüllerinde cihazların bir listesi gösterilir ana makine/cihazlar. Her çoklu cihaz için bir ana makine tarafı Python test modülü çalıştırılır test modülü. Ayrılan Android cihazlara Python test modüllerinden erişilebilir bu yöntemin AndroidCihaz nesneler:
devices = self.android_devices device1 = devices[0] device1_serial = device1.serial
Ayrılan tüm cihazlar, test planı için ayrılmış olsa bile yalnızca tek bir cihaz kullanıyor.
Test sırasında cihaz iletişimi
Etkili çoklu Android testleri, ayrılan kullanıcılar arasında cihazlar. Bu tür testler geliştirirken, testlerin nasıl arasındaki iletişimi sağlamak için kullanılır. Aşağıdaki bölümlerde ile ilgili üç iletişim örneği (ancak test geliştiricileri, diğer ücretsiz uygulamaları modelleri).
1. tür: Ana makine tarafı HAL testleri
Ana makine tarafı HAL testleri, varsayılan:
Bu senaryoda:
- Test mantığı ana makinede yürütülür.
- Ana makine tarafı test komut dosyası, her bir cihazdaki sürücülere RPC çağrıları yayınlar.
- Ana makine tarafı, cihaz etkileşimlerini koordine eder.
2. Tür: Ana makine tarafı aracıya dayalı testler
Ana makine taraflı test, cihazda VTS aracılarını kullanmak yerine kendi aracısını (uygulama veya ikili program) destekler:
Bu senaryoda:
- Test mantığı ana makinede yürütülür.
- Her cihaza aracı uygulama (veya ikili program) yüklenir.
- Ana makine tarafı test komut dosyası, her cihazdaki uygulamalara komut gönderir.
- Ana makine tarafı, cihaz etkileşimlerini koordine eder.
Örneğin, Sonraki Mevcut VTS deposundaki milyarlarca kullanıcı testi ana makine taraflı, uygulama tabanlı, testler gerçekleştirebilirsiniz.
3. Tür: Hedef taraf HIDL testleri
Hedef taraflı, birden fazla cihazlı HIDL testleri tüm test mantığını cihaz tarafında test eder test sırasında cihazları senkronize etmek için testlerin yapılmasını gerektiren ikili programlar yürütme:
Bu senaryoda:
- Cihazlarda test mantığı yürütülür.
- Ana makine tarafı çerçeve, ilk cihaz tanımlamasını sağlar.
- Hedef taraf testi ikili programı senkronizasyon gerektirir:
- Tüm cihazlar için aynı test ikili programı.
- Her rol için farklı test ikili programları.
Örnek: Birden fazla cihaz için test planı
Bu örnekte iki cihazın yapılandırması belirtilmektedir:
- 1. cihaz bir derleme sağlayıcı ve
VtsDeviceInfoCollector
hedef hazırlayıcı. - 2. cihaz, aşağıdakileri yapan ek bir
FilePusher
hazırlayıcısı içerir: ana makineye dayalı ilgili dosyalardan oluşan bir gruptur.
<configuration description="VTS Codelab Plan"> ... <device name="device1"> <build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" /> <target_preparer class="com.android.tradefed.targetprep.VtsDeviceInfoCollector" /> </device> <device name="device2" > <build_provider class="com.android.compatibility.common.tradefed.build.CompatibilityBuildProvider" /> <target_preparer class="com.android.tradefed.targetprep.VtsDeviceInfoCollector" /> <target_preparer class="com.android.compatibility.common.tradefed.targetprep.VtsFilePusher"> <option name="push-group" value="HostDrivenTest.push" /> </target_preparer> </device> <option name="compatibility:include-filter" value="VtsCodelabHelloWorldMultiDeviceTest" /> </configuration>
Örnek: Ana makine tarafı Python test komut dosyası
Test hazırlayıcılarla ilgili ayrıntılar ve örnekler için Test hazırlayıcılar. Eksiksiz bir ana makine tarafı için fazla cihaz örneği için merhaba_dünya_çoklu codelab'e göz atın.
def setUpClass(self): logging.info('number of device: %s', self.android_devices) asserts.assertEqual(len(self.android_devices), 2, 'number of device is wrong.') self.dut1 = self.android_devices[0] self.dut2 = self.android_devices[1] self.shell1 = self.dut1.shell self.shell2 = self.dut2.shell def testSerialNotEqual(self): '''Checks serial number from two device not being equal.''' command = 'getprop | grep ro.serial' res1 = self.shell1.Execute(command) res2 = self.shell2.Execute(command) def getSerialFromShellOutput(output): '''Get serial from getprop query''' return output[const.STDOUT][0].strip().split(' ')[-1][1:-1] serial1 = getSerialFromShellOutput(res1) serial2 = getSerialFromShellOutput(res2) logging.info('Serial number of device 1 shell output: %s', serial1) logging.info('Serial number of device 2 shell output: %s', serial2) asserts.assertNotEqual(serial1, serial2, 'serials from two devices should not be the same') asserts.assertEqual(serial1, self.dut1.serial, 'serial got from device system property is different from allocated serial') asserts.assertEqual(serial2, self.dut2.serial, 'serial got from device system property is different from allocated serial')