Эта страница поможет вам использовать тестовый комплект Trade Federation с несколькими устройствами во время тестирования. Сначала вам следует ознакомиться с нормальным использованием, как описано в примере «от начала до конца» .
В чем разница при использовании нескольких устройств?
При настройке и запуске тестов на нескольких устройствах в Trade Federation есть несколько отличий, в частности:
Любая существующая конфигурация с одним устройством действительна для режима нескольких устройств.
<! -- TODO: Уточните предложение выше, добавив пример варианта использования одного устройства, поскольку он относится к режиму нескольких устройств во втором предложении. -->>
Конфигурация нескольких устройств
Этот документ предполагает, что вы уже знакомы с типичной конфигурацией теста 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-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
; вам следует дать более описательное имя, если это возможно, в зависимости от типа устройства, которое вы действительно ожидаете настроить.