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

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