Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Test multi-dispositivo

VTS supporta i test che richiedono l'interazione tra più dispositivi Android.

Architettura

VTS utilizza il framework TradeFed per ottenere e passare i serial dei dispositivi ai moduli di test.

Figura 1. VTS dei dispositivi di trasmissione passanti.

I requisiti del dispositivo, come il numero di dispositivi e i tipi di dispositivo, sono specificati nella configurazione del piano di test. Ad esempio, è possibile specificare un piano di test che richiede due dispositivi Android con target di build Sailfish.

Allocazione del dispositivo

L'infrastruttura di test (di solito lo scheduler di test) alloca i dispositivi disponibili che soddisfano i requisiti specificati nella configurazione del piano di test al framework VTS. I dispositivi assegnati sono riservati per il piano di test anche se il modulo di test non li utilizza. I binari degli agenti VTS vengono quindi trasferiti ed eseguiti su tutti i dispositivi allocati (a meno che non sia stato espressamente indicato di non eseguire). Ciò garantisce che le connessioni TCP per comandi shell e RAL HAL siano disponibili per tutti i dispositivi in ​​uno script di test.

Preparatori del test

Il framework esegue preparatori di test per tutti i dispositivi per i quali ha ricevuto numeri di serie. I preparatori target possono essere singoli o multi-dispositivo:

  • Preparatori di destinazione per dispositivo singolo (esempio su VtsDeviceInfoCollector ):
    • Può essere specificato solo nella configurazione del piano di test con l'elenco dei dispositivi richiesto (le versioni future consentiranno la configurazione a livello di modulo).
    • Ricevi solo un dispositivo seriale.
    • Esegui attività di preparazione e pulizia su un dispositivo specifico.
  • Preparatori target multi-dispositivo (esempio su VtsPythonVirtualenvPreparer ):
    • Può essere specificato nella configurazione del piano di test o nella configurazione del modulo di test
    • Ricevi tutti i serial del dispositivo
    • Eseguire attività di preparazione e pulizia per ciascun dispositivo o tutti i dispositivi.

Moduli di prova

I moduli di test ottengono un elenco di dispositivi dopo che i preparatori del test hanno terminato la configurazione dell'host / dei dispositivi. Viene eseguito un modulo di test Python lato host per ciascun modulo di test multi-dispositivo. I dispositivi Android allocati sono accessibili dai moduli di test Python come un elenco di oggetti AndroidDevice :

devices = self.android_devices
device1 = devices[0]
device1_serial = device1.serial

Tutti i dispositivi allocati sono riservati per il piano di test, anche se un modulo di test nel piano utilizza solo un dispositivo.

Comunicazione del dispositivo durante il test

Test multi-Android efficaci implicano la comunicazione tra i dispositivi assegnati. Quando si sviluppano tali test, è necessario determinare come stabilire la comunicazione tra i dispositivi assegnati. Le seguenti sezioni forniscono tre esempi di comunicazione (tuttavia, gli sviluppatori di test sono liberi di progettare altri modelli).

Tipo 1: test HAL lato host

I test HAL sul lato host possono utilizzare i driver HAL VTS che vengono inviati ai dispositivi per impostazione predefinita:

Figura 2. Test HAL sul lato host.

In questo scenario:

  • La logica di test viene eseguita sull'host.
  • Lo script di test lato host invia chiamate RPC ai driver su ciascun dispositivo.
  • Il lato host coordina le interazioni del dispositivo.

Tipo 2: test basati sull'agente sul lato host

Invece di utilizzare gli agenti VTS sul dispositivo, un test sul lato host può anche inviare il proprio agente (app o binario) a ciascun dispositivo:

Figura 3. Test lato host, basato su agente.

In questo scenario:

  • La logica di test viene eseguita sull'host.
  • L'app Agent (o binaria) si installa su ciascun dispositivo.
  • Lo script di test sul lato host invia comandi alle app su ciascun dispositivo.
  • Il lato host coordina le interazioni del dispositivo.

Ad esempio, i test Next Billion User nell'attuale repository VTS sono test multi-dispositivo sul lato host, basati su app.

Tipo 3: test HIDL sul lato target

I test HIDL multi-dispositivo sul lato target mettono tutta la logica di test sui binari di test sul lato dispositivo, che richiede i test per sincronizzare i dispositivi durante l'esecuzione del test:

Figura 4. Test HIDL basato su target.

In questo scenario:

  • La logica di test viene eseguita sui dispositivi.
  • Il framework lato host fornisce l'identificazione iniziale del dispositivo.
  • Il test binario sul lato target richiede la sincronizzazione:
    • Stesso test binario per tutti i dispositivi.
    • File binari di test diversi per ciascun ruolo.

Esempio: piano di test multi-dispositivo

Questo esempio specifica la configurazione per due dispositivi:

  • Il dispositivo 1 include un provider di build e un preparatore di destinazione VtsDeviceInfoCollector .
  • Il dispositivo 2 include un preparatore di FilePusher aggiuntivo che FilePusher al dispositivo un gruppo di file correlati gestiti dall'host.
<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>

Esempio: script di test Python lato host

Per dettagli ed esempi sui preparatori di test, consultare Preparatori di test . Per un esempio completo di più dispositivi sul lato host, consultare il codelab hello_world_multi .

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