Cette page vous aide à utiliser le Trade Federation Test Harness 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.
Quelles sont les différences avec plusieurs appareils ?
Plusieurs éléments sont différents lorsque vous configurez et exécutez des tests multi-appareils dans Trade Federation, en particulier :
Toute configuration à un seul appareil existante est valide pour le mode multi-appareils.
<! -- 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 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 points concernant la structure doivent être mentionnés :
- Un
<device>
est attendu pour chaque appareil nécessaire. <build_provider>
,<target_preparer>
,<device_recovery>
,<device_requirements>
et<device_options>
, le cas échéant, doivent être inclus dans la balise<device>
. Dans le cas contraire, 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 est utilisé pour faire référence à l'appareil spécifique auquel il est associé. Cela permet à votre test de cibler un appareil spécifique. <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 à un seul appareil s'appliquent également 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, il est également possible de 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 pouvez cibler 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 ?
Trade Federation recherche un appareil correspondant à device_requirements
(généralement la variante, le produit, etc. de l'appareil) dans l'ordre d'apparition de l'appareil dans la configuration. Chaque fois qu'un appareil est attribué, TF tente d'attribuer le suivant. S'il n'est pas possible d'allouer tous les appareils, ils seront tous libérés et la commande sera réessayée lorsque tous les appareils seront associés.
Comment TF prépare-t-il les appareils ?
L'étape de préparation pour plusieurs appareils est presque identique à celle pour un seul appareil.
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, ce qui permet d'effectuer des étapes de préparation nécessitant plusieurs appareils, comme l'association d'appareils. Elle 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 chaque appareil.<multi_target_preparer>
doit être utilisé pour la configuration qui doit être effectuée après la configuration de chaque appareil.
Exemple :
flasher l'appareil 1 (target_preparer) flasher l'appareil 2 (target_preparer) bluetooth connecter les deux appareils (multi_target_preparer)
Écrire un test multi-appareils
Lorsque vous écrivez un test standard à 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 de l'appareil à son IBuildInfo, tandis que IInvocationContextReceiver vous donne ensuite le contexte complet (appareil, IBuildInfo et métadonnées).
Vous pourrez ensuite utiliser les API ITestDevice habituelles que TF met à disposition pour la rédaction de tests.
Il n'existe pas encore d'API permettant d'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 android-platform.
Exemple Hello World multi-appareils
Nous avons ajouté un exemple de configuration de type Hello World :
multi-devices.xml
Il existe également un exemple d'implémentation multi_target_preparer
HelloWorldMultiTargetPreparer
qui montre comment recevoir la liste des appareils et de leurs versions.
Voici un exemple complet qui implique :
- Attribuer 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 l'interface TF :
run example/multi-devices
Vous devriez obtenir un résultat 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'
Pour exécuter les commandes ci-dessus, vous devez avoir deux appareils connectés. Pour vérifier cela, vous pouvez : adb devices
Lorsque l'invocation est en cours, vous pouvez la 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 de la configuration device1
et device2
. Si possible, vous devez leur donner un nom plus descriptif en fonction du type d'appareil que vous vous attendez réellement à définir.