Cette page vous aide à utiliser le harnais de test de la Trade Federation avec plusieurs appareils lors des tests.Vous devez d'abord vous familiariser avec l'utilisation normale, comme décrit dans l'exemple de bout en bout.
En quoi l'utilisation de plusieurs appareils est-elle différente ?
Plusieurs éléments sont différents lors de la configuration et de l'exécution de tests multi-appareils dans Trade Federation, en particulier:
Toute configuration existante pour un seul appareil est valide pour le mode multi-appareil.
<! -- 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. -->>
Configuration de plusieurs appareils
Dans ce document, nous partons du principe que vous connaissez déjà la configuration de test TF typique. Voici à quoi ressemble une configuration de test classique 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 points doivent être mentionnés concernant la structure:
- Pour chaque appareil qui sera nécessaire, une
<device>
est attendue. <build_provider>
,<target_preparer>
,<device_recovery>
,<device_requirements>
et<device_options>
, le cas échéant, doivent être inclus dans la balise<device>
. Sinon, une exception sera générée.- L'attribut
name
pour<device>
est obligatoire et doit être unique parmi tous les appareils présents dans la configuration. Il permet de faire référence à l'appareil spécifique qui lui est associé. Cela permet à votre test de cibler un appareil particulier. <option>
peut avoir une portée globale lorsqu'il se trouve à la racine de la configuration ou être limité à la portée de l'appareil lorsqu'il est spécifié dans la balise<device>
.
Toutes les autres règles applicables à la configuration d'un seul appareil restent applicables ici. Pour en savoir plus, consultez l'exemple Hello World ci-dessous.
Mise à jour de la ligne de commande
Lorsque vous spécifiez des options sur la ligne de commande TF, vous pouvez également spécifier un champ d'application de l'appareil à l'aide de {<device name>}
, où <device name>
correspond au 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 à l'aide du nom de l'appareil, comme suit:
--{device2}device-setup:disable
Dans cet exemple, device2
ignore la configuration de l'appareil, contrairement à device1
.
Comment TF sélectionne-t-il les appareils ?
La Trade Federation recherche un appareil correspondant à device_requirements
(généralement la saveur de l'appareil, le produit, etc.) dans l'ordre de l'apparition de l'appareil dans la configuration. Chaque fois qu'un appareil est alloué, TF tente d'allouer le suivant. Si l'allocation de tous les appareils n'est pas possible, ils seront tous libérés et la commande sera réessayée lorsque tous les appareils seront mis en correspondance.
Comment TF prépare-t-il les appareils ?
L'étape de préparation pour les appareils multi-appareils est presque la même que pour les appareils individuels.
Chaque appareil est préparé en appelant <target_preparer>
dans l'ordre d'apparition dans <device>
.
Vous pouvez également utiliser <multi_target_preparer>
spécifié à la racine de la configuration, qui permet d'effectuer des étapes de préparation nécessitant plusieurs appareils, comme l'association d'appareils. Il s'exécute après l'étape target_preparer
.
Vous pouvez également utiliser <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 l'appareil individuel.<multi_target_preparer>
doit être utilisé pour la configuration qui doit être effectuée après la configuration individuelle des appareils.
Exemple :
appareil flash 1 (target_preparer) appareil flash 2 (target_preparer) Bluetooth connecter les deux appareils (multi_target_preparer)
Écrire un test multi-appareil
Lorsque vous écrivez 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 fournit une mise en correspondance directe de l'appareil avec son IBuildInfo, tandis que IInvocationContextReceiver vous fournit ensuite le contexte complet (appareil, IBuildInfo et métadonnées).
Vous pourrez ensuite utiliser les API ITestDevice habituelles que TF met à disposition pour l'écriture de tests.
Aucune API n'existe encore pour effectuer des opérations d'un appareil à un autre, comme device1.sync(device2)
. Si vous pensez que votre cas d'utilisation est pertinent, envoyez votre raisonnement à la liste android-platform.
Exemple Hello World pour plusieurs appareils
Nous avons ajouté un exemple de configuration semblable à Hello World : multi-devices.xml. Vous trouverez également un exemple d'implémentation multi_target_preparer
HelloWorldMultiTargetPreparer qui montre comment recevoir la liste des appareils et leurs builds.
Il s'agit d'un exemple complet qui implique:
- Allouer deux appareils
- Accéder aux deux appareils via un
multi_target_preparer
- Exécuter un test qui utilise les deux appareils
Une fois Tradefed compilé, vous pouvez utiliser la commande suivante dans le shell TF:
run example/multi-devices
Le résultat qui s'affiche doit contenir 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'
Pour effectuer l'opération ci-dessus, vous devez connecter deux appareils. Vous pouvez vérifier cela via: adb devices
Lorsque l'appel est en cours, vous pouvez le surveiller comme des appareils individuels 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
. Si possible, vous devez donner un nom plus descriptif en fonction du type d'appareil que vous vous attendez à définir.