На этой странице рассказывается, как использовать тестовую программу Trade Federation с несколькими устройствами во время тестирования.Сначала ознакомьтесь с примером сквозного тестирования.
Что изменилось при использовании нескольких устройств?
При настройке и проведении многоустройствных тестов в Trade Federation есть несколько отличий, в частности:
Любая существующая конфигурация для одного устройства подходит для режима нескольких устройств.
<! -- 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. -->>
Настройка нескольких устройств
В этом документе предполагается, что вы уже знакомы с типичной конфигурацией тестирования TF. Вот как выглядит типичная тестовая конфигурация с двумя устройствами:
<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>
О структуре нужно сказать следующее:
- Для каждого устройства, которое будет использоваться, ожидается
<device>. - Теги
<build_provider>,<target_preparer>,<device_recovery>,<device_requirements>и<device_options>(при необходимости) должны быть включены в тег<device>. В противном случае будет выдано исключение. - Атрибут
nameдля<device>является обязательным и должен быть уникальным для всех устройств, указанных в конфигурации. Он используется для идентификации определенного устройства. Это позволит вам настроить таргетинг на определенное устройство. <option>может иметь глобальную область действия, если находится в корне конфигурации, или область действия устройства, если указан внутри тега<device>.
Все остальные правила, применимые к конфигурации одного устройства, по-прежнему действуют. Подробнее о примере Hello World…
Обновление через командную строку
При указании параметров в командной строке TF можно также задать область действия устройства с помощью {<device name>}, где <device name> – это имя, указанное в конфигурации XML.
В примере выше были разрешены следующие варианты:
--com.android.tradefed.targetprep.DeviceSetup:disable--device-setup:disable
Вы можете настроить таргетинг только на один объект build_provider, используя название устройства, как показано ниже:
--{device2}device-setup:disable
В этом примере device2 пропускает настройку устройства, а device1 – нет.
Как выбираются устройства?
Trade Federation ищет устройство, соответствующее device_requirements (обычно это тип устройства, продукт и т. д.), в порядке появления устройства в конфигурации. Каждый раз, когда устройство выделяется, TF пытается выделить следующее. Если выделить все устройства не удастся, они будут освобождены и команда будет выполнена повторно, когда все устройства будут найдены.
Как TF подготавливает устройства?
Подготовка к работе с несколькими устройствами почти не отличается от подготовки к работе с одним устройством.
Каждое устройство подготавливается путем вызова <target_preparer> в порядке их появления в <device>.
Вы также можете использовать <multi_target_preparer>, указанный в корне конфигурации, которая позволяет выполнять подготовительные шаги, требующие нескольких устройств, например связывание устройств. Он выполняется после шага target_preparer.
В качестве альтернативы можно использовать <pre_multi_target_preparer>, который выполняется до шага target_preparer.
<pre_multi_target_preparer>следует использовать для настройки, которую необходимо выполнить до настройки отдельных устройств.<multi_target_preparer>следует использовать для настройки, которую необходимо выполнить после настройки отдельных устройств.
Пример:
flash device 1 (target_preparer) flash device 2 (target_preparer) bluetooth connect both devices (multi_target_preparer)
Как написать тест для нескольких устройств
При написании обычного теста для одного устройства вы реализуете интерфейс IDeviceTest.
Чтобы тесты получали информацию об устройствах, которые тестируются, вы можете реализовать интерфейс IMultiDeviceTest или IInvocationContextReceiver.
IMultiDeviceTest предоставляет вам прямую карту устройства для его IBuildInfo, а IInvocationContextReceiver позже предоставляет вам полный контекст (устройство, IBuildInfo и метаданные).
После этого вы сможете использовать обычные API ITestDevice, которые TF предоставляет для написания тестов.
Пока нет API, позволяющих выполнять операции с одного устройства на другое, например device1.sync(device2). Если вы считаете, что у вас есть веские причины для поддержки, отправьте обоснование в список рассылки android-platform.
Пример программы Hello World для нескольких устройств
Мы добавили пример конфигурации, похожий на Hello World: multi-devices.xml. Также есть пример реализации multi_target_preparer (HelloWorldMultiTargetPreparer), который показывает, как получить список устройств и их сборок.
Это полный пример, который включает:
- Как назначить два устройства
- Доступ к обоим устройствам через
multi_target_preparer - Запуск теста, в котором используются два устройства
После сборки Tradefed вы можете использовать следующую команду в оболочке TF:
run example/multi-devices
Вы должны увидеть выходные данные, содержащие следующее:
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'
Для этого вам понадобится два подключенных устройства. Это можно проверить с помощью: adb devices
Когда вызов выполняется, вы можете отслеживать его так же, как и отдельные устройства, с помощью list i и 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
Вы должны увидеть устройства, задействованные в каждом вызове, а также все доступные устройства и их состояние.
Обратите внимание, что в этом примере мы назвали два устройства в конфигурации device1 и device2. Если возможно, дайте более описательное название в зависимости от типа устройства, которое вы ожидаете настроить.