Execute testes com vários dispositivos

Esta página ajuda você a usar o equipamento de teste da Trade Federation com vários dispositivos durante o teste. Primeiro, você deve se familiarizar com o uso normal, conforme descrito no exemplo completo .

O que há de diferente com vários dispositivos?

Várias coisas são diferentes ao configurar e executar testes de vários dispositivos na Trade Federation, em particular:

Qualquer configuração existente de um dispositivo é válida para o modo de vários dispositivos.

<! -- TODO: Esclareça a frase imediatamente acima adicionando um exemplo de caso de uso de um dispositivo no que se refere ao modo multi-dispositivo em uma segunda frase. -->>

Configuração de vários dispositivos

Este documento pressupõe que você já esteja familiarizado com a configuração típica de teste TF. Esta é a aparência de uma configuração de teste típica com dois dispositivos:

<configuration description="A simple multi-devices example in Tradefed">

    <device name="device1">
        <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
    </device>

    <device name="device2">
        <target_preparer class="com.android.tradefed.targetprep.DeviceSetup" />
    </device>

    <option name="log-level" value="verbose" />
    <test class="com.android.tradefed.HelloWorldMultiDevices" />

    <logger class="com.android.tradefed.log.FileLogger" />
    <result_reporter class="com.android.tradefed.result.ConsoleResultReporter" />

</configuration>

Várias coisas precisam ser mencionadas sobre a estrutura:

  • Para cada dispositivo necessário, é esperado um <device> .
  • <build_provider> , <target_preparer> , <device_recovery> , <device_requirements> e <device_options> se necessário, devem ser incluídos na tag <device> ; uma exceção será lançada caso contrário.
  • o atributo name para <device> é obrigatório e deve ser único entre todos os dispositivos presentes na configuração. É usado para fazer referência ao dispositivo específico associado a ele. Isso permite que seu teste seja direcionado a um dispositivo específico.
  • <option> pode ter um escopo global quando estiver na raiz da configuração ou ser limitado ao escopo do dispositivo quando especificado dentro da tag <device> .

Todas as outras regras aplicáveis ​​à configuração de dispositivo único ainda são aplicáveis ​​aqui. Veja o exemplo Hello World abaixo para mais detalhes.

Atualização de linha de comando

Ao especificar opções na linha de comando do TF, também é possível especificar um escopo de dispositivo usando {<device name>} onde <device name> é o nome especificado na configuração XML.

No exemplo acima, foram permitidas as seguintes opções:

  • --com.android.tradefed.targetprep.DeviceSetup:disable
  • --device-setup:disable

Você pode direcionar apenas um dos objetos build_provider do dispositivo usando o nome do dispositivo, assim:

--{device2}device-setup:disable

Neste exemplo, device2 ignora a configuração do dispositivo, enquanto device1 não.

Como o TF seleciona os dispositivos?

A Trade Federation procura um dispositivo que corresponda aos device_requirements (normalmente o tipo de dispositivo, produto, etc.) na ordem de aparição do dispositivo na configuração. Cada vez que um dispositivo é alocado, o TF tenta alocar o próximo. Se não for possível alocar todos os dispositivos, todos eles serão liberados e o comando será tentado novamente quando todos os dispositivos forem correspondidos.

Como a TF prepara os dispositivos?

A etapa de preparação para vários dispositivos é basicamente a mesma que para dispositivos únicos. Cada dispositivo é preparado chamando o <target_preparer> na ordem de aparecimento dentro do <device> .

Você também pode usar <multi_target_preparer> especificado na raiz da configuração que permite etapas de preparação que exigem vários dispositivos, como o emparelhamento de dispositivos. Ele é executado após a etapa target_preparer .

Uma alternativa é <pre_multi_target_preparer> que é executado antes da etapa target_preparer .

  • <pre_multi_target_preparer> deve ser usado para configuração que deve ser feita antes da configuração do dispositivo individual.
  • <multi_target_preparer> deve ser usado para configurações que devem ser feitas após configurações de dispositivos individuais.

Por exemplo:

dispositivo flash 1 (target_preparer) dispositivo flash 2 (target_preparer) bluetooth conecta ambos os dispositivos (multi_target_preparer)

Escreva um teste para vários dispositivos

Ao escrever um teste regular de dispositivo único, você implementa a interface IDeviceTest .

Para que os testes recebam os dispositivos em teste, você pode implementar IMultiDeviceTest ou IInvocationContextReceiver .

IMultiDeviceTest fornece um mapa direto do dispositivo para seu IBuildInfo , enquanto IInvocationContextReceiver posteriormente fornece o contexto completo (dispositivo, IBuildInfo e metadados).

Você poderá então usar as APIs ITestDevice usuais que o TF coloca à disposição para gravação de testes.

Ainda não existem APIs para conduzir operações de um dispositivo para outro, como device1.sync(device2) . Se você acha que tem um caso de uso atraente para ser suportado, envie seu raciocínio para a lista da plataforma Android .

Exemplo de Olá Mundo com vários dispositivos

Adicionamos um exemplo de configuração semelhante ao Hello World: multi-devices.xml Há também um exemplo de implementação de multi_target_preparer HelloWorldMultiTargetPreparer que mostra como receber a lista de dispositivos e suas compilações.

Este é um exemplo completo que envolve:

  • Alocando dois dispositivos
  • Acessando ambos os dispositivos através de um multi_target_preparer
  • Executando um teste que usa os dois dispositivos

Depois de construir o Tradefed, você pode usar o seguinte comando no shell TF:

run example/multi-devices

Você deverá ver alguma saída contendo o seguinte:

08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' with build id '3146108'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device '00b4e73b4cbcd162' from context with build 'com.android.tradefed.build.DeviceBuildInfo@c99cbc1'
08-15 10:52:43 I/HelloWorldMultiDevices: Hello World! device 'LP5A390056' from context with build 'com.android.tradefed.build.DeviceBuildInfo@b41f20c5'

Você precisa de dois dispositivos conectados para executar o procedimento acima. Isso pode ser verificado através de: adb devices

Quando a invocação estiver em andamento, você poderá monitorá-la como dispositivos únicos com list i e list d :

tf >list i
Command Id  Exec Time  Device                          State
1           0m:35      [00b4e73b4cbcd162, LP5A390056]  fetching build
tf >list d
Serial            State      Product   Variant   Build   Battery
00b4e73b4cbcd162  Allocated  bullhead  bullhead  NRD90O  100
LP5A390056        Allocated  shamu     shamu     NRD90I  100

Você deverá poder ver os dispositivos envolvidos em cada invocação, bem como todos os dispositivos disponíveis e seus respectivos estados.

Observe que neste exemplo chamamos os dois dispositivos na configuração device1 e device2 ; você deve fornecer um nome mais descritivo, se possível, dependendo do tipo de dispositivo que você realmente espera que seja configurado.