Esta página ajuda você a usar o arcabouço de testes do Trade Federation com vários dispositivos durante o teste.Primeiro, familiarize-se com o uso normal, conforme descrito no exemplo de ponta a ponta.
O que muda com vários dispositivos?
Várias coisas são diferentes ao configurar e executar testes em vários dispositivos no Trade Federation, em especial:
Qualquer configuração de um dispositivo é válida para o modo de vários dispositivos.
<! -- TODO: Clarify the sentence immediately above by adding an example of a one-device use case as it pertains to multi-device mode in a second sentence. -->>
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>
Algumas coisas precisam ser mencionadas sobre a estrutura:
- Para cada dispositivo necessário, um
<device>é esperado. <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
namepara<device>é obrigatório e precisa ser exclusivo 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 na tag<device>.
Todas as outras regras aplicáveis à configuração de dispositivo único ainda são válidas aqui. Confira mais detalhes no exemplo de Hello World abaixo.
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
É possível segmentar apenas um dos objetos build_provider usando o nome do dispositivo, assim:
--{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 Federação de Comércio procura um dispositivo que corresponda ao device_requirements (normalmente o tipo, o 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, eles serão liberados e o comando será tentado novamente quando todos os dispositivos forem correspondentes.
Como a TF prepara os dispositivos?
A etapa de preparação para vários dispositivos é quase igual à de um único dispositivo.
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 pareamento. Ele é executado depois da etapa target_preparer.
Uma alternativa é <pre_multi_target_preparer>, que executa antes da etapa
target_preparer.
- O
<pre_multi_target_preparer>deve ser usado para configurações que precisam ser feitas antes da configuração de dispositivos individuais. - O
<multi_target_preparer>deve ser usado para configurações que precisam ser feitas depois das configurações individuais do dispositivo.
Exemplo:
atualizar dispositivo 1 (target_preparer) atualizar dispositivo 2 (target_preparer) bluetooth conectar os dois dispositivos (multi_target_preparer)
Criar um teste multidispositivo
Ao escrever um teste regular de dispositivo único, você implementa a interface IDeviceTest.
Para que os testes recebam os dispositivos em teste, implemente IMultiDeviceTest ou IInvocationContextReceiver.
O IMultiDeviceTest oferece um mapa direto do dispositivo para o IBuildInfo, enquanto o IInvocationContextReceiver oferece o contexto completo (dispositivo, IBuildInfo e metadados).
Em seguida, você poderá usar as APIs ITestDevice usuais que o TF disponibilizou para a criaçã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 ser
compatível, envie seu raciocínio para a lista
android-platform.
Exemplo de Hello World em vários dispositivos
Adicionamos uma configuração de exemplo semelhante ao 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 builds.
Este é um exemplo completo que envolve:
- Alocar dois dispositivos
- Acessar os dois dispositivos usando um
multi_target_preparer - 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 ver uma saída com 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 processo 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 de device1 e device2. Se possível, dê um nome mais descritivo, dependendo do tipo de dispositivo que você espera definir.