Тестовая среда SDV

В этом документе представлен обзор тестовой среды SDV и пошаговое руководство по настройке, конфигурации и выполнению тестов. Используйте тестовую среду SDV для сквозного тестирования. Инструмент основан на Mobly; тесты пишутся на Python.

Настройте среду

В этом документе предполагается, что ваша рабочая станция уже настроена для SDV. Для запуска тестов фреймворка установите virtualenv .

зависимости Python

Рекомендуемый подход к управлению зависимостями в Android заключается в упаковке тестов, Python и их зависимостей в исполняемый файл с использованием конфигурации сборки. В репозитории тестирования SDV необходимо следовать именно этому подходу.

Библиотека SDV Test Framework по умолчанию предоставляет следующие зависимости:

  • mobly
  • absl-py необходим для использования параметризации в тестах.
  • pexpect необходим для работы интерактивных команд.
  • ptyprocess необходим для работы интерактивных команд.

Если вам необходимы зависимости, специфичные для теста, укажите их в файле Android.bp теста.

python_test_host {
    …
    libs: [
        "<DEPENDENCY1",
        "<DEPENDENCY2",
        …
    ],
    …
}

Типы системных тестов

Вы создаете системные тесты с помощью фреймворка SDV Test Framework. Фреймворк различает следующие типы тестов. Правильно классифицируйте тесты:

  • Примеры тестов: Запустите примеры сервисов SDV и убедитесь, что результат соответствует ожидаемому.
  • Сквозные тесты: не используйте сервисы примеров SDV.
  • Длительные тесты: предназначены для выполнения в течение продолжительного времени.
  • Тестирование производительности: используйте библиотеку perfetto .
  • Аппаратные тесты: предназначены для выполнения исключительно на физическом устройстве, а не в устройстве Cuttlefish (CF).

Создать тест

Все тесты, написанные с использованием фреймворка, должны находиться в репозитории тестирования. Точное местоположение теста зависит от его типа.

Настройте тест

Настройте все тесты для запуска с использованием как atest, так и CATBox.

Настройте тест

Данная платформа предоставляет шаблоны для тестов с одной, двумя и тремя виртуальными машинами (ВМ). Добавьте следующее в файл Android.bp :

Одна виртуальная машина

python_test_host {
  ...
  test_config_template: ":sdv_one_device",
}

Две виртуальные машины

python_test_host {
  ...
  test_config_template: ":sdv_two_devices",
}

Три виртуальные машины

python_test_host {
  ...
  test_config_template: ":sdv_three_devices",
}

Для большинства тестов стандартного шаблона достаточно. Избегайте создания пользовательских конфигураций, если для этого нет веской причины.

Обновите значение по умолчанию для таймаута.

Установленного по умолчанию времени ожидания должно быть достаточно для локального выполнения тестов.

Если ваш тест локально завершается с ошибкой из-за превышения времени ожидания, рассмотрите возможность разделения его на несколько отдельных тестов. Очень длинные тесты с большим количеством тестовых случаев могут привести к замедлению выполнения.

Если вам необходимо установить более длительный тайм-аут, чем по умолчанию, продолжайте читать.

Переопределите значение по умолчанию для таймаута.

Данная платформа не поддерживает расширение шаблона для выполнения atest . Поэтому используйте предоставленные шаблоны, которые предлагают увеличенный таймаут.

Длительный тест одной виртуальной машины

python_test_host {
  ...
  test_config_template: ":sdv_one_device_long_test",
}

Длительное тестирование двух виртуальных машин

python_test_host {
  ...
  test_config_template: ":sdv_two_devices_long_test",
}

Добавьте комментарий, четко указывающий на цель использования этого шаблона и объясняющий, почему требуется увеличенное время (например, если тест требует загрузки артефакта, на выполнение которого уходит определенное количество времени).

Отправка файлов на устройство

Следующие шаги описывают, как отправить файлы на устройство для atest конфигураций.

Отправка файлов на устройство

Данная платформа не поддерживает расширение шаблона для выполнения atest . Поэтому необходимо создать файл AndroidTest.xml , который полностью заменит шаблон по умолчанию и будет включать соответствующие параметры target_preparer для устройств.

  1. Скопируйте содержимое шаблона:

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. Обновите {MODULE} , указав имя модуля вашего теста.

  3. Добавьте com.android.tradefed.targetprep.PushFilePreparer на каждое устройство.

<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file" key="<FILE_NAME>" value="<REMOTE_FILE_PATH>" />
  </target_preparer>
</device>

Настройка CATBox

Для запуска теста в виде набора тестов требуется конфигурация CATBox.

  1. Создайте новый конфигурационный файл в libraries/sdv/sdv_catbox/res/config/ и следуйте этим правилам именования:

    • Пример теста: sdv-sample-<NAME>-test.xml
    • Сквозной тест: sdv-e2e-<NAME>-test.xml
    • Длительный тест: sdv-long-running-<NAME>-test.xml
    • Тест производительности: sdv-performance-<NAME>-test.xml
    • Тест оборудования: sdv-hw-<NAME>-test.xml
  2. Добавьте соответствующую информацию в зависимости от типа теста:

Конфигурация для тестирования одной виртуальной машины

<configuration description="SDV <NAME> Test">
    <!-- Template for Device Configuration -->
    <template-include name="device-config" default="sdv-device-config/one-device" />

    <!-- Plan. Use the same name as the file name -->
    <option name="plan" value="<CONFIG_FILE_NAME>"/>

    <!-- Test: mobly-par-file-name should match the module name -->
    <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>

Тестовая конфигурация двух виртуальных машин

<configuration description="SDV <NAME> Test">
    <!-- Template for Device Configuration -->
    <template-include name="device-config" default="sdv-device-config/two-devices" />

    <!-- Plan. Use the same name as the file name -->
    <option name="plan" value="<CONFIG_FILE_NAME>"/>

    <!-- Test: mobly-par-file-name should match the module name -->
    <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>

Тестовая конфигурация трех виртуальных машин

<!-- Copyright 2025 Google LLC -->
<configuration description="SDV <NAME> Test">
    <!-- Template for Device Configuration -->
    <template-include name="device-config" default="sdv-device-config/three-devices" />

    <!-- Plan. Use the same name as the file name -->
    <option name="plan" value="<CONFIG_FILE_NAME>"/>

    <!-- Test: mobly-par-file-name should match the module name -->
    <option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>

Для большинства тестов стандартного шаблона достаточно. Избегайте создания пользовательских конфигураций, если для этого нет веской причины.

Обновите значение по умолчанию для таймаута.

Если заданного по умолчанию времени ожидания недостаточно для вашего теста, вы можете его изменить.

Переопределите значение по умолчанию для таймаута.

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

  <!-- Long Test - 10 minutes timeout: <REASON> -->
  <option name="mobly-host:mobly-test-timeout" value="600000" />

Отправка файлов на устройство

В следующем разделе описывается, как отправлять файлы на устройство при настройке CATBox.

Отправка файлов на устройство

Для отправки файлов на соответствующее устройство добавьте следующую конфигурацию после параметра plan :

<!-- Automatically pushes config file to device-->
<device name="device1">
  <target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
    <option name="cleanup" value="true" />
    <option name="push-file"
      key="<FILE_NAME>"
      value="<REMOTE_FILE_PATH>"
    />
  </target_preparer>
</device>

Если вам нужны файлы на каждом устройстве, добавьте конфигурацию для каждого устройства (например, name=device1 , name=device2 ).

Выполнение теста

В данных инструкциях предполагается, что вы уже завершили настройку работающей среды SDV.

Настройте среду

Данная платформа не запускает экземпляры Cloud Virtual Device (CVD), поэтому их необходимо запустить перед выполнением тестов.

  1. Настройте среду и запустите целевой объект SDV:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. Запустите первый экземпляр облачного виртуального устройства (CVD):

    cvd create --config=sdv_core_instance1
    
  3. Запустите второй экземпляр облачного виртуального устройства (CVD) (для тестирования с использованием нескольких виртуальных машин):

    cvd create --config=sdv_core_instance2
    
  4. Запустите третий экземпляр облачного виртуального устройства (CVD) (для тестирования с использованием нескольких виртуальных машин):

    cvd create --config=sdv_core_instance3
    

Запустить тест

atest <TestModuleName>

Запустите CATBox

Эти команды предполагают, что вы находитесь в корневом каталоге репозитория.

  1. Build CATBox: m catbox
  2. (Необязательно) Просмотрите все доступные планы тестирования SDV в CATBox:
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-

Проведите тест:

Запустите один тест виртуальной машины.

NOTIFY_AS_NATIVE=0.0.0.0:6520 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520

Запустите две виртуальные машины для тестирования.

NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521

Запустите три виртуальных машины для тестирования.

NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521,0.0.0.0:6522 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521 --{device3}serial 0.0.0.0:6522