O Google está comprometido em promover a equidade racial para as comunidades negras. Veja como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Teste de vários dispositivos

O VTS suporta testes que exigem interação entre vários dispositivos Android.

Arquitetura

O VTS usa a estrutura TradeFed para obter e transmitir seriais de dispositivos para testar módulos.

Figura 1. Seriais de dispositivo de passagem VTS.

Os requisitos do dispositivo, como número de dispositivos e tipos de dispositivos, são especificados na configuração do plano de teste. Por exemplo, você pode especificar um plano de teste que exija dois dispositivos Android com destinos de criação do Sailfish.

Alocação de dispositivos

A infraestrutura de teste (geralmente o planejador de teste) aloca dispositivos disponíveis que atendem aos requisitos especificados na configuração do plano de teste na estrutura do VTS. Os dispositivos alocados são reservados para o plano de teste, mesmo que o módulo de teste não os esteja usando. Os binários do agente VTS são então enviados e executados em todos os dispositivos alocados (a menos que seja especificamente instruído a não executar). Isso garante que as conexões TCP para comandos do shell e HAL RPCs estejam disponíveis para todos os dispositivos em um script de teste.

Preparadores de teste

A estrutura executa preparadores de teste para todos os dispositivos para os quais recebeu números de série. Os preparadores de destino podem ser únicos ou com vários dispositivos:

  • Preparadores de destino para um único dispositivo (exemplo em VtsDeviceInfoCollector ):
    • Pode ser especificado apenas na configuração do plano de teste com a lista de dispositivos necessária (versões futuras permitirão a configuração no nível do módulo).
    • Receba apenas um dispositivo serial.
    • Execute tarefas de preparação e limpeza em um dispositivo específico.
  • Preparadores de destino para vários dispositivos (exemplo em VtsPythonVirtualenvPreparer ):
    • Pode ser especificado na configuração do plano de teste ou na configuração do módulo de teste
    • Receba todas as séries de dispositivos
    • Execute tarefas de preparação e limpeza para cada dispositivo ou todos os dispositivos.

Módulos de teste

Os módulos de teste obtêm uma lista de dispositivos depois que os preparadores de teste terminam de configurar o host / dispositivos. Um módulo de teste Python do host é executado para cada módulo de teste para vários dispositivos. Os dispositivos Android alocados podem ser acessados ​​nos módulos de teste Python como uma lista de objetos AndroidDevice :

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

Todos os dispositivos alocados são reservados para o plano de teste, mesmo que um módulo de teste no plano esteja usando apenas um dispositivo.

Comunicação do dispositivo durante o teste

Testes eficazes para vários Android envolvem comunicação entre dispositivos alocados. Ao desenvolver esses testes, você deve determinar como estabelecer a comunicação entre os dispositivos alocados. As seções a seguir fornecem três exemplos de comunicação (no entanto, os desenvolvedores de teste podem criar outros modelos).

Tipo 1: testes HAL do lado do host

Os testes HAL do lado do host podem usar drivers VTS HAL que são enviados por push aos dispositivos por padrão:

Figura 2. Teste HAL do lado do host.

Neste cenário:

  • A lógica de teste é executada no host.
  • O script de teste do lado do host emite chamadas RPC para os drivers em cada dispositivo.
  • O lado do host coordena as interações do dispositivo.

Tipo 2: testes baseados em agente do lado do host

Em vez de usar agentes VTS no dispositivo, um teste no host também pode enviar seu próprio agente (aplicativo ou binário) para cada dispositivo:

Figura 3. Teste baseado em agente do lado do host.

Neste cenário:

  • A lógica de teste é executada no host.
  • O aplicativo do agente (ou binário) é instalado em cada dispositivo.
  • O script de teste do host emite comandos para aplicativos em cada dispositivo.
  • O lado do host coordena as interações do dispositivo.

Por exemplo, os testes de Próximo Bilhão de Usuários no repo VTS atual são testes de vários dispositivos, baseados no aplicativo e no host.

Tipo 3: testes HIDL do lado do alvo

Os testes HIDL de vários dispositivos do lado do destino colocam toda a lógica de teste nos binários de teste do lado do dispositivo, o que requer que os testes sincronizem os dispositivos durante a execução do teste:

Figura 4. Teste HIDL baseado em destino.

Neste cenário:

  • A lógica de teste é executada nos dispositivos.
  • A estrutura do lado do host fornece identificação inicial do dispositivo.
  • O binário de teste do lado do destino requer sincronização:
    • O mesmo binário de teste para todos os dispositivos.
    • Binários de teste diferentes para cada função.

Exemplo: plano de teste para vários dispositivos

Este exemplo especifica a configuração para dois dispositivos:

  • O dispositivo 1 inclui um provedor de criação e VtsDeviceInfoCollector preparador de destino VtsDeviceInfoCollector .
  • O dispositivo 2 inclui um preparador FilePusher adicional que envia um grupo de arquivos relacionados ao host para o dispositivo.
<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>

Exemplo: script de teste Python do host

Para detalhes e exemplos sobre preparadores de teste, consulte Preparadores de teste . Para um exemplo completo de vários dispositivos no host, consulte o hello_world_multi codelab .

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