Google si impegna a promuovere l'equità razziale per le comunità nere. Vedi come.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Esegui test con più dispositivi

Questa pagina ti aiuta a utilizzare il cablaggio di test della Federazione commerciale con più dispositivi durante i test. Dovresti prima familiarizzare con il normale utilizzo come descritto nell'esempio end-to-end .

Cosa c'è di diverso con più dispositivi?

Diverse cose sono diverse durante la configurazione e l'esecuzione di test multi-dispositivo in Trade Federation, in particolare:

Qualsiasi configurazione esistente per un dispositivo è valida per la modalità multi-dispositivo.

TODO: chiarisci la frase immediatamente sopra aggiungendo un esempio di un caso d'uso di un dispositivo per quanto riguarda la modalità multi-dispositivo in una seconda frase.

Configurazione di più dispositivi

Questo documento presuppone che tu abbia già familiarità con la tipica configurazione di test TF. Ecco come appare una tipica configurazione di prova 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>
 

Diverse 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 dovrebbe essere unico tra tutti i dispositivi presenti nella configurazione. Viene utilizzato per fare riferimento al dispositivo specifico ad esso associato. Ciò consente al test di indirizzare un determinato dispositivo.
  • <option> può avere un ambito globale 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 del singolo dispositivo 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 dispositivo usando {<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 build_provider come target solo uno degli oggetti build_provider del dispositivo usando 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 sapore del dispositivo, prodotto, ecc.) In ordine di aspetto del dispositivo nella configurazione. Ogni volta che viene assegnato un dispositivo, TF tenta di allocare il successivo. Se non è possibile allocare tutti i dispositivi, verranno tutti rilasciati e il comando verrà riprovato quando tutti i dispositivi saranno abbinati.

In che modo TF prepara i dispositivi?

La fase di preparazione per più dispositivi è sostanzialmente la stessa di singoli dispositivi. Ogni dispositivo viene preparato chiamando <target_preparer> in ordine di apparizione all'interno di <device> .

Puoi anche usare <multi_target_preparer> specificato nella radice della configurazione che abilita le fasi di preparazione che richiedono più dispositivi, come l'associazione 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> dovrebbe essere usato per l'installazione che deve essere fatta prima della configurazione del singolo dispositivo.
  • <multi_target_preparer> deve essere utilizzato per l'installazione che deve essere eseguita dopo l'installazione dei singoli dispositivi.

Ad esempio: dispositivo flash 1 (target_preparer) dispositivo flash 2 (target_preparer) dispositivo bluetooth collegare entrambi i dispositivi (multi_target_preparer)

Scrivi un test multi-dispositivo

Quando si scrive un normale test per singolo dispositivo, si implementa l'interfaccia IDeviceTest .

Affinché i test ricevano i dispositivi in ​​prova, è possibile implementare IMultiDeviceTest o IInvocationContextReceiver .

IMultiDeviceTest ti fornisce una mappa diretta del dispositivo su IBuildInfo mentre IInvocationContextReceiver ti fornisce in seguito il contesto completo (dispositivo, IBuildInfo e metadati).

Sarai quindi in grado di utilizzare le solite API ITestDevice messe a disposizione da TF per la scrittura di prova.

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 convincente da supportare, invia il tuo ragionamento all'elenco delle piattaforme Android .

Ciao mondo multi dispositivi Esempio

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 loro build.

Questo è un esempio completo che coinvolge:

  • Allocazione 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, è possibile utilizzare il seguente comando nella shell TF:

run example/multi-devices

Dovresti vedere alcuni output contenenti 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 quanto sopra sono necessari due dispositivi collegati. Questo può essere verificato tramite: adb devices

Quando l'invocazione è in corso, è possibile monitorarla come singoli dispositivi con l' list i e l' 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 invocazione, nonché tutti i dispositivi disponibili e il loro rispettivo stato.

Si noti 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 davvero ti aspetti di essere impostato.