Questa pagina ti aiuta a utilizzare Trade Federation Test Harness con più dispositivi durante il test.Devi prima acquisire familiarità con l'utilizzo normale, come descritto nell'esempio end-to-end.
Cosa cambia con più dispositivi?
Quando configuri ed esegui test su più dispositivi in Trade Federation, diverse cose sono diverse, in particolare:
Qualsiasi configurazione esistente per un dispositivo è valida per la modalità multi-dispositivo.
<! -- 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. -->>
Configurazione di più dispositivi
Questo documento presuppone che tu abbia già familiarità con la configurazione tipica dei test TF. Ecco l'aspetto di 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>
È necessario menzionare diversi aspetti della struttura:
- Per ogni dispositivo 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 dispositivo specifico associato. In questo modo, il test può essere indirizzato a un dispositivo specifico. <option>
può avere un ambito globale se si trova nella radice della configurazione o essere limitato all'ambito del dispositivo se specificato all'interno del tag<device>
.
Tutte le altre regole applicabili alla configurazione di un singolo dispositivo sono ancora applicabili qui. Per maggiori dettagli, vedi l'esempio Hello World riportato di seguito.
Aggiornamento della riga di comando
Quando specifichi le opzioni nella 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 precedente, sono state 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, come segue:
--{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 corrispondente a device_requirements
(in genere la variante, il prodotto e così via) in ordine di visualizzazione del dispositivo nella
configurazione. Ogni volta che viene allocato un dispositivo, TF tenta di allocare
quello successivo. Se non è possibile allocare tutti i dispositivi, questi verranno
rilasciati e il comando verrà ritentato quando tutti i dispositivi saranno abbinati.
In che modo TF prepara i dispositivi?
Il passaggio di preparazione per più dispositivi è per lo più uguale a quello per i singoli dispositivi.
Ogni dispositivo viene preparato chiamando <target_preparer>
in ordine di
visualizzazione all'interno di <device>
.
Puoi anche utilizzare <multi_target_preparer>
specificato nella radice della
configurazione che attiva i passaggi di preparazione che richiedono più dispositivi, ad esempio
l'accoppiamento dei dispositivi. Viene eseguito dopo il passaggio target_preparer
.
Un'alternativa è <pre_multi_target_preparer>
che viene eseguito 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.
Ad esempio:
flash device 1 (target_preparer) flash device 2 (target_preparer) bluetooth connect both devices (multi_target_preparer)
Scrivere un test multi-dispositivo
Quando scrivi un normale test su un singolo dispositivo, implementi l'interfaccia IDeviceTest.
Affinché i test ricevano i dispositivi in fase di test, puoi implementare IMultiDeviceTest o IInvocationContextReceiver.
IMultiDeviceTest fornisce una mappatura diretta del dispositivo al relativo IBuildInfo, mentre IInvocationContextReceiver fornisce in un secondo momento il contesto completo (dispositivo, IBuildInfo e metadati).
Potrai quindi utilizzare le solite API ITestDevice che TF mette a disposizione per la scrittura dei test.
Non esistono ancora API per eseguire operazioni da un dispositivo all'altro, ad esempio
device1.sync(device2)
. Se ritieni di avere un caso d'uso convincente da
supportare, invia la tua motivazione all'elenco
android-platform.
Esempio Hello world per più dispositivi
Abbiamo aggiunto una configurazione di esempio simile a Hello World:
multi-devices.xml
Esiste anche un esempio di implementazione di multi_target_preparer
HelloWorldMultiTargetPreparer
che mostra come ricevere l'elenco dei dispositivi e delle relative build.
Questo è un esempio completo che prevede:
- Assegnazione di due dispositivi
- Accesso a entrambi i dispositivi tramite un
multi_target_preparer
- Esecuzione di un test che utilizza i due dispositivi
Una volta 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'
Per eseguire le operazioni sopra descritte, devi avere due dispositivi connessi. Puoi controllare
tramite: adb devices
Quando la chiamata è 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 ogni chiamata, nonché tutti i dispositivi disponibili e il loro stato.
Tieni presente che in questo esempio abbiamo chiamato i due dispositivi nella configurazione
device1
e device2
; se possibile, dovresti assegnare un nome più descrittivo
a seconda del tipo di dispositivo che prevedi di impostare.