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

Эта страница поможет вам использовать тестовую систему Trade Federation Test Harness с несколькими устройствами во время тестирования. Сначала вы должны ознакомиться с обычным использованием, как описано в сквозном примере .

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

Несколько особенностей настройки и запуска тестов на нескольких устройствах в 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 выбирает устройства?

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