Запуск тестов с несколькими устройствами

Эта страница поможет вам использовать тестовый стенд Торговой федерации с несколькими устройствами во время тестирования. Для начала вам следует ознакомиться с обычным использованием, описанным в примере сквозного тестирования .

В чём разница при использовании нескольких устройств?

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