Executar testes com vários dispositivos

Esta página ajuda você a usar o Conjunto de Testes da Federação de Comércio com vários dispositivos durante os testes. Primeiro, você deve se familiarizar com o uso normal, conforme descrito no exemplo de ponta a ponta .

O que é 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 um 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. Veja como é 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>

Algumas 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 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 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 um único dispositivo 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, as seguintes opções foram permitidas:

  • --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, o device2 ignora a configuração do dispositivo enquanto o device1 não.

Como o TF seleciona os dispositivos?

A Federação de Comércio procura um dispositivo que corresponda a device_requirements (normalmente o tipo de dispositivo, produto etc.) na ordem de aparência 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á repetido quando todos os dispositivos forem correspondidos.

Como o 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> em 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 exigem vários dispositivos, como pareamento 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 de vários dispositivos

Ao escrever um teste de dispositivo único regular, 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 colocou à disposição para escrita de teste.

Ainda não existem APIs para realizar 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 android-platform .

Exemplo de Olá mundo de vários dispositivos

Adicionamos um exemplo de configuração 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 os dois 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 do 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 acima. Isso pode ser verificado via: 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 poder 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.