Questa pagina ti aiuta a utilizzare il cablaggio di prova della Trade Federation con più dispositivi durante i test. Dovresti prima acquisire familiarità con l'utilizzo normale come descritto nell'esempio end-to-end .
Cosa c'è di diverso con più dispositivi?
Molte cose cambiano durante la configurazione e l'esecuzione di test multi-dispositivo in Trade Federation, in particolare:
Qualsiasi configurazione esistente di un dispositivo è valida per la modalità multi-dispositivo.
<! -- TODO: Chiarire la frase immediatamente precedente aggiungendo in una seconda frase un esempio di caso d'uso con un solo dispositivo in quanto riguarda la modalità multi-dispositivo. -->>
Configurazione di più dispositivi
Questo documento presuppone che tu abbia già familiarità con la tipica configurazione del test TF. Ecco come appare una tipica configurazione di test con due dispositivi:
<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>
Molte cose devono essere menzionate sulla struttura:
- Per ogni dispositivo che sarà necessario, è previsto un
<device>
. -
<build_provider>
,<target_preparer>
,<device_recovery>
,<device_requirements>
e<device_options>
se necessario devono essere inclusi nel tag<device>
; altrimenti verrà generata un'eccezione. - l'attributo
name
per<device>
è obbligatorio e deve essere univoco tra tutti i dispositivi presenti nella configurazione. Viene utilizzato per fare riferimento al particolare dispositivo ad esso associato. Ciò consente al test di indirizzare un particolare dispositivo. -
<option>
può avere un ambito globale quando si trova alla radice della configurazione o essere limitato all'ambito del dispositivo quando specificato all'interno del tag<device>
.
Tutte le altre regole applicabili alla configurazione a dispositivo singolo sono ancora applicabili qui. Vedi l' esempio Hello World di seguito per maggiori dettagli.
Aggiornamento della riga di comando
Quando si specificano le opzioni sulla riga di comando TF, è anche possibile specificare un ambito del dispositivo utilizzando {<device name>}
dove <device name>
è il nome specificato nella configurazione XML.
Nell'esempio sopra, erano consentite le seguenti opzioni:
-
--com.android.tradefed.targetprep.DeviceSetup:disable
-
--device-setup:disable
Puoi scegliere come target solo uno degli oggetti build_provider
del dispositivo utilizzando il nome del dispositivo, in questo modo:
--{device2}device-setup:disable
In questo esempio, device2
salta la configurazione del dispositivo mentre device1
no.
In che modo TF seleziona i dispositivi?
Trade Federation cerca un dispositivo che corrisponda ai device_requirements
(in genere la tipologia del dispositivo, il prodotto, ecc.) in ordine di apparizione del dispositivo nella configurazione. Ogni volta che viene allocato un dispositivo, TF tenta di allocare quello successivo. Se non è possibile allocare tutti i dispositivi, verranno tutti rilasciati e il comando verrà ritentato quando tutti i dispositivi saranno abbinati.
Come prepara TF i dispositivi?
La fase di preparazione per i dispositivi multipli è sostanzialmente la stessa di quella per i dispositivi singoli. Ogni dispositivo viene preparato chiamando <target_preparer>
in ordine di apparizione all'interno di <device>
.
Puoi anche utilizzare <multi_target_preparer>
specificato nella radice della configurazione che abilita i passaggi di preparazione che richiedono più dispositivi, come l'accoppiamento di dispositivi. Viene eseguito dopo il passaggio target_preparer
.
Un'alternativa è <pre_multi_target_preparer>
che viene eseguita prima del passaggio target_preparer
.
-
<pre_multi_target_preparer>
deve essere utilizzato per la configurazione che deve essere eseguita prima della configurazione del singolo dispositivo. -
<multi_target_preparer>
deve essere utilizzato per la configurazione che deve essere eseguita dopo le configurazioni dei singoli dispositivi.
Per esempio:
dispositivo flash 1 (target_preparer) dispositivo flash 2 (target_preparer) bluetooth collega entrambi i dispositivi (multi_target_preparer)
Scrivi un test multi-dispositivo
Quando si scrive un normale test per un singolo dispositivo, si implementa l'interfaccia IDeviceTest .
Affinché i test ricevano i dispositivi sottoposti a test, è possibile implementare IMultiDeviceTest o IInvocationContextReceiver .
IMultiDeviceTest fornisce una mappa diretta del dispositivo al suo IBuildInfo mentre IInvocationContextReceiver successivamente fornisce il contesto completo (dispositivo, IBuildInfo e metadati).
Potrai quindi utilizzare le consuete API ITestDevice che TF mette a disposizione per la scrittura dei test.
Non esistono ancora API per condurre operazioni da un dispositivo a un altro, come device1.sync(device2)
. Se ritieni di avere un caso d'uso interessante da supportare, invia il tuo ragionamento all'elenco delle piattaforme Android .
Esempio di Hello World con più dispositivi
Abbiamo aggiunto una configurazione di esempio simile a Hello World: multi-devices.xml C'è anche un esempio di implementazione multi_target_preparer
HelloWorldMultiTargetPreparer che mostra come ricevere l'elenco dei dispositivi e le relative build.
Questo è un esempio completo che coinvolge:
- Assegnazione di due dispositivi
- Accesso a entrambi i dispositivi tramite un
multi_target_preparer
- Esecuzione di un test che utilizza i due dispositivi
Dopo aver creato Tradefed, puoi utilizzare il seguente comando nella shell TF:
run example/multi-devices
Dovresti vedere un output contenente quanto segue:
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'
Sono necessari due dispositivi collegati per eseguire quanto sopra. Questo può essere verificato tramite: adb devices
Quando l'invocazione è in corso, puoi monitorarla come i singoli dispositivi con 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
Dovresti essere in grado di vedere i dispositivi coinvolti in ciascuna invocazione, nonché tutti i dispositivi disponibili e il loro rispettivo stato.
Da notare che in questo esempio abbiamo chiamato i due dispositivi nella configurazione device1
e device2
; dovresti dare un nome più descrittivo se possibile a seconda del tipo di dispositivo che ti aspetti realmente che venga impostato.