Execute testes com vários dispositivos

Esta página ajuda você a usar o equipamento de teste da Federação Comercial com vários dispositivos durante o teste. Primeiro, você deve se familiarizar com o uso normal, conforme descrito no exemplo de ponta a ponta .

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

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

Qualquer configuração de um dispositivo existente é 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 de vários dispositivos 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. Aqui está 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 que será necessário, espera-se 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. Ele é usado para referenciar o 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 da 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 segmentar apenas um dos objetos build_provider do dispositivo usando o nome do dispositivo, assim:

--{device2}device-setup:disable

Neste exemplo, device2 pula 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 aparecimento 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 serão liberados e o comando será repetido quando todos os dispositivos forem correspondidos.

Como o TF prepara os dispositivos?

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

Você também pode usar <multi_target_preparer> especificado na raiz da configuração que permite etapas de preparação que requerem vários dispositivos, como 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ção que deve ser feita após configurações de dispositivos individuais.

Por exemplo:

dispositivo flash 1 (target_preparer) dispositivo flash 2 (target_preparer) bluetooth conectar 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 usuais do ITestDevice que o TF coloca à disposição para a escrita do teste.

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 a ser suportado, envie seu raciocínio para a lista da plataforma android .

Exemplo de olá mundo para vários dispositivos

Adicionamos uma configuração de exemplo do tipo 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 por meio de um multi_target_preparer
  • Executando um teste que usa os dois dispositivos

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

run example/multi-devices

Você deve 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 está em andamento, você pode 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ê deve ser capaz de ver os dispositivos envolvidos em cada chamada, 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 dar um nome mais descritivo, se possível, dependendo do tipo de dispositivo que você realmente espera que seja configurado.