Exécuter des tests avec plusieurs appareils

Cette page vous aide à utiliser le harnais de test de la Fédération du commerce avec plusieurs appareils pendant les tests. Vous devez d'abord vous familiariser avec l'utilisation normale décrite dans l' exemple de bout en bout .

Qu'est-ce qui est différent avec plusieurs appareils ?

Plusieurs choses sont différentes lors de la configuration et de l’exécution de tests multi-appareils dans Trade Federation, notamment :

Toute configuration existante à un seul appareil est valable pour le mode multi-appareils.

<! -- À FAIRE : Clarifiez la phrase immédiatement ci-dessus en ajoutant un exemple de cas d'utilisation d'un seul appareil en ce qui concerne le mode multi-appareils dans une deuxième phrase. -->>

Configuration de plusieurs appareils

Ce document suppose que vous êtes déjà familier avec la configuration de test TF typique. Voici à quoi ressemble une configuration de test typique avec deux appareils :

<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>

Plusieurs choses doivent être mentionnées concernant la structure :

  • Pour chaque périphérique qui sera nécessaire, un <device> est attendu.
  • <build_provider> , <target_preparer> , <device_recovery> , <device_requirements> et <device_options> si nécessaire doivent être inclus dans la balise <device> ; sinon, une exception sera levée.
  • l'attribut name pour <device> est obligatoire et doit être unique parmi tous les appareils présents dans la configuration. Il est utilisé pour référencer le périphérique particulier qui lui est associé. Cela permet à votre test de cibler un appareil particulier.
  • <option> peut avoir soit une portée globale lorsqu'il se trouve à la racine de la configuration, soit être limité à la portée du périphérique lorsqu'il est spécifié dans la balise <device> .

Toutes les autres règles applicables à la configuration avec un seul appareil restent applicables ici. Voir l' exemple Hello World ci-dessous pour plus de détails.

Mise à jour de la ligne de commande

Lors de la spécification des options sur la ligne de commande TF, il est également possible de spécifier une étendue de périphérique en utilisant {<device name>}<device name> est le nom spécifié dans la configuration XML.

Dans l'exemple ci-dessus, les options suivantes étaient autorisées :

  • --com.android.tradefed.targetprep.DeviceSetup:disable
  • --device-setup:disable

Vous ne pouvez cibler qu'un seul des objets build_provider de l'appareil en utilisant le nom de l'appareil, comme ceci :

--{device2}device-setup:disable

Dans cet exemple, device2 ignore la configuration du périphérique, contrairement à device1 .

Comment TF sélectionne-t-il les appareils ?

Trade Federation recherche un appareil correspondant aux device_requirements (généralement la version de l'appareil, le produit, etc.) par ordre d'apparition de l'appareil dans la configuration. Chaque fois qu'un appareil est alloué, TF essaie d'attribuer le suivant. S'il n'est pas possible d'attribuer tous les appareils, ils seront tous libérés et la commande sera réessayée lorsque tous les appareils auront correspondu.

Comment TF prépare-t-il les appareils ?

L’étape de préparation pour plusieurs appareils est essentiellement la même que pour un appareil unique. Chaque appareil est préparé en appelant le <target_preparer> par ordre d'apparition à l'intérieur du <device> .

Vous pouvez également utiliser <multi_target_preparer> spécifié à la racine de la configuration qui permet des étapes de préparation nécessitant plusieurs appareils, telles que le couplage d'appareils. Il s'exécute après l'étape target_preparer .

Une alternative est <pre_multi_target_preparer> qui s'exécute avant l'étape target_preparer .

  • <pre_multi_target_preparer> doit être utilisé pour la configuration qui doit être effectuée avant la configuration de chaque périphérique.
  • <multi_target_preparer> doit être utilisé pour la configuration qui doit être effectuée après les configurations de périphériques individuels.

Par exemple:

périphérique flash 1 (target_preparer) périphérique flash 2 (target_preparer) Bluetooth connecter les deux appareils (multi_target_preparer)

Écrire un test multi-appareils

Lors de l’écriture d’un test standard sur un seul appareil, vous implémentez l’interface IDeviceTest .

Pour que les tests reçoivent les appareils testés, vous pouvez implémenter IMultiDeviceTest ou IInvocationContextReceiver .

IMultiDeviceTest vous donne une carte directe du périphérique vers son IBuildInfo tandis que IInvocationContextReceiver vous donne plus tard le contexte complet (périphérique, IBuildInfo et métadonnées).

Vous pourrez alors utiliser les API ITestDevice habituelles que TF met à disposition pour l'écriture des tests.

Aucune API n'existe encore pour effectuer des opérations d'un appareil à un autre, comme device1.sync(device2) . Si vous pensez avoir un cas d'utilisation convaincant à prendre en charge, envoyez votre raisonnement à la liste des plateformes Android .

Exemple de bonjour le monde multi-appareils

Nous avons ajouté un exemple de configuration de type Hello World : multi-devices.xml. Il existe également un exemple d'implémentation de multi_target_preparer HelloWorldMultiTargetPreparer qui montre comment recevoir la liste des appareils et leurs builds.

Il s'agit d'un exemple complet qui implique :

  • Attribution de deux appareils
  • Accéder aux deux appareils via un multi_target_preparer
  • Exécuter un test utilisant les deux appareils

Une fois que vous avez construit Tradefed, vous pouvez utiliser la commande suivante dans le shell TF :

run example/multi-devices

Vous devriez voir une sortie contenant les éléments suivants :

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'

Vous avez besoin de deux appareils connectés pour exécuter ce qui précède. Cela peut être vérifié via : adb devices

Lorsque l'invocation est en cours, vous pouvez la surveiller comme des appareils uniques avec list i et 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

Vous devriez pouvoir voir les appareils impliqués dans chaque appel, ainsi que tous les appareils disponibles et leur état respectif.

Notez que dans cet exemple, nous avons appelé les deux appareils dans la configuration device1 et device2 ; vous devez si possible donner un nom plus descriptif en fonction du type d'appareil que vous souhaitez réellement configurer.