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

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