Эта страница поможет вам использовать тестовый стенд Торговой федерации с несколькими устройствами во время тестирования. Для начала вам следует ознакомиться с обычным использованием, описанным в примере сквозного тестирования .
В чём разница при использовании нескольких устройств?
В частности, при настройке и запуске тестов на нескольких устройствах в 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>. - В тег
<device>необходимо включить<build_provider>,<target_preparer>,<device_recovery>,<device_requirements>и, при необходимости,<device_options>; в противном случае будет выброшено исключение. - Атрибут
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 , предоставленные TensorFlow для написания тестов.
Пока не существует 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 ; по возможности следует дать более описательное имя в зависимости от типа устройства, которое вы действительно ожидаете настроить.