Эта страница поможет вам использовать тестовый жгут Trade Federation с несколькими устройствами во время тестирования. Сначала вам следует ознакомиться с нормальным использованием, как описано в сквозном примере .
Чем отличается использование нескольких устройств?
При настройке и запуске тестов на нескольких устройствах в Trade Federation есть некоторые отличия, в частности:
Любая существующая конфигурация с одним устройством действительна для режима нескольких устройств.
<! -- ЗАДАЧА: Уточните предложение выше, добавив во второе предложение пример варианта использования одного устройства, относящегося к режиму нескольких устройств. -->>
Конфигурация нескольких устройств
В этом документе предполагается, что вы уже знакомы с типичной тестовой конфигурацией 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
— нет.
Как TF выбирает устройства?
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>
следует использовать для настройки, которую необходимо выполнить после настройки отдельного устройства.
Например:
флэш-устройство 1 (target_preparer) флэш-устройство 2 (target_preparer) Bluetooth подключит оба устройства (multi_target_preparer)
Напишите тест на нескольких устройствах
При написании обычного теста для одного устройства вы реализуете интерфейс IDeviceTest .
Чтобы тесты получали тестируемые устройства, вы можете реализовать IMultiDeviceTest или IInvocationContextReceiver .
IMultiDeviceTest предоставляет вам прямую карту устройства с его IBuildInfo, а IInvocationContextReceiver позже предоставляет вам полный контекст (устройство, IBuildInfo и метаданные).
После этого вы сможете использовать обычные API-интерфейсы ITestDevice , которые TF предоставляет для написания тестов.
Пока не существует API для выполнения операций с одного устройства на другое, например device1.sync(device2)
. Если вы считаете, что у вас есть убедительный вариант использования, который нужно поддержать, отправьте свои аргументы в список платформ Android .
Пример «Привет, мир» с несколькими устройствами
Мы добавили пример конфигурации типа 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
; по возможности вам следует дать более описательное имя в зависимости от типа устройства, которое вы действительно ожидаете установить.