Эта страница поможет вам использовать тестовую утилиту 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 ; вам следует дать более описательное имя, если это возможно, в зависимости от типа устройства, которое вы действительно ожидаете настроить.