Esta página ajuda você a usar o Trade Federation Test Harness com vários dispositivos durante os testes.Primeiro, familiarize-se com o uso normal, conforme descrito no exemplo completo.
O que muda com vários dispositivos?
Várias coisas são diferentes ao configurar e executar testes em vários dispositivos na Trade Federation, em particular:
Qualquer configuração de um dispositivo é 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, já que ele 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á conhece a configuração típica de teste do TF. Confira 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>
Várias coisas precisam ser mencionadas sobre a estrutura:
- Para cada dispositivo que será necessário, é esperado um
<device>
. <build_provider>
,<target_preparer>
,<device_recovery>
,<device_requirements>
e<device_options>
, se necessário, precisam ser incluídos na tag<device>
. Caso contrário, uma exceção será gerada.- o atributo
name
para<device>
é obrigatório e precisa 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 o teste seja direcionado a um dispositivo específico. <option>
pode ter um escopo global quando está 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 válidas aqui. Confira 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>}
, em que <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
Só é possível segmentar um dos objetos build_provider
do dispositivo usando o nome
do dispositivo, desta forma:
--{device2}device-setup:disable
Neste exemplo, device2
pula a configuração do dispositivo, enquanto device1
não pula.
Como o TF seleciona os dispositivos?
A Trade Federation procura um dispositivo que corresponda ao device_requirements
(normalmente o tipo, o produto etc.) na ordem de aparição do dispositivo
na configuração. Sempre que um dispositivo é alocado, o TF tenta alocar o
próximo. Se não for possível alocar todos os dispositivos, eles serão
liberados e o comando será tentado novamente quando todos os dispositivos forem correspondidos.
Como o TF prepara os dispositivos?
A etapa de preparação para vários dispositivos é basicamente a mesma para dispositivos únicos.
Cada dispositivo é preparado chamando o <target_preparer>
em ordem de
aparência dentro do <device>
.
Você também pode usar <multi_target_preparer>
especificado na raiz da
configuração que ativa etapas de preparação que exigem vários dispositivos, como
o pareamento de dispositivos. Ele é executado após a etapa target_preparer
.
Uma alternativa é <pre_multi_target_preparer>
, que é executado antes da
etapa target_preparer
.
- O
<pre_multi_target_preparer>
precisa ser usado para a configuração que precisa ser feita antes da configuração de dispositivos individuais. - O
<multi_target_preparer>
precisa ser usado para a configuração que precisa ser feita depois das configurações individuais do dispositivo.
Exemplo:
Atualizar o dispositivo 1 (target_preparer) Atualizar o dispositivo 2 (target_preparer) Conectar os dois dispositivos por Bluetooth (multi_target_preparer)
Criar um teste multidispositivo
Ao escrever um teste regular de um único dispositivo, você implementa a interface IDeviceTest.
Para que os testes recebam os dispositivos em teste, implemente IMultiDeviceTest ou IInvocationContextReceiver.
O IMultiDeviceTest fornece um mapeamento direto do dispositivo para o IBuildInfo, enquanto o IInvocationContextReceiver oferece o contexto completo (dispositivo, IBuildInfo e metadados) mais tarde.
Em seguida, você poderá usar as APIs ITestDevice que o TF disponibilizou para a gravação de testes.
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 convincente para receber
suporte, envie seu raciocínio para a
lista android-platform.
Exemplo de "Hello World" em vários dispositivos
Adicionamos uma configuração de exemplo parecida com "Hello World":
multi-devices.xml
Também há um exemplo de implementação de multi_target_preparer
HelloWorldMultiTargetPreparer
que mostra como receber a lista de dispositivos e os builds deles.
Este é um exemplo completo que envolve:
- Alocação de dois dispositivos
- Acessar os dois dispositivos por um
multi_target_preparer
- Como executar um teste que usa os dois dispositivos
Depois de criar o Tradefed, use o seguinte comando no shell do TF:
run example/multi-devices
Você vai encontrar uma saída que contém 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
em: 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ê poderá ver os dispositivos envolvidos em cada invocação, bem como todos os dispositivos disponíveis e o estado deles.
Neste exemplo, chamamos os dois dispositivos na configuração
device1
e device2
. Dê um nome mais descritivo, se possível,
dependendo do tipo de dispositivo que você realmente espera que seja definido.