На этой странице вы найдете обзор библиотеки SDV Test Framework и инструкции по настройке и выполнению тестов. Используйте SDV Test Framework для сквозного тестирования. Инструмент основан на Mobly, а тесты пишутся на Python.
Выберите подход к тестированию
Прежде чем писать тест, выберите средство запуска тестов, соответствующее вашей области проверки:
| Область тестирования | Тип модуля Soong | Инструмент выполнения | Когда использовать |
|---|---|---|---|
| Модульные тесты пакета сервисов | rust_test, rust_test_host или cc_test. |
atest |
Проверьте изолированную бизнес-логику Rust или C++, преобразования данных или вспомогательные крейты на хосте или одной виртуальной машине Cuttlefish. |
| Сквозные тесты и тесты систем с несколькими виртуальными машинами | python_test_host (SDV Test Framework) |
atest или CATBox |
Проверяйте управление жизненным циклом пакета сервисов, связь между виртуальными машинами, мост SOME/IP или целевые аппаратные устройства на одной, двух или трех виртуальных машинах. |
Как настроить среду
Предполагается, что вы уже настроили рабочую станцию для SDV. Чтобы запустить тесты фреймворка, установите virtualenv.
Зависимости Python
Рекомендуемый подход к управлению зависимостями в Android – упаковать тесты, Python и их зависимости в исполняемый файл с помощью конфигурации сборки. Вы должны следовать этому подходу в репозитории тестирования SDV.
Библиотека SDV Test Framework по умолчанию предоставляет следующие зависимости:
moblyabsl-pyТребуется для использования параметризации в тестах.pexpectТребуется для работы интерактивных команд.ptyprocessТребуется для работы интерактивных команд.
Если вам нужны зависимости, относящиеся к тестированию, включите их в файл Android.bp теста:
python_test_host {
…
libs: [
"<DEPENDENCY1>",
"<DEPENDENCY2>",
…
],
…
}
Типы тестирования системы
Тесты системы создаются с помощью SDV Test Framework. В фреймворке различаются следующие типы. Правильно укажите категории:
- Примеры тестов. Запустите примеры сервисов SDV и убедитесь, что результат соответствует ожидаемому.
- Сквозные тесты. Не используйте примеры сервисов SDV.
- Длительные тесты. Предназначены для продолжительного выполнения.
- Тесты производительности. Используйте библиотеку
perfetto. - Тесты оборудования. Предназначены для выполнения исключительно на физическом устройстве, а не в Cuttlefish (CF).
Создать тест
Все тесты, написанные с использованием фреймворка, должны находиться в репозитории тестирования. Точное местоположение зависит от типа теста. Информацию о путях к каталогам, шаблонах тестовых классов Python, правилах Android.bp и рекомендациях по программированию Mobly можно найти в статье Создание системных тестов SDV.
Как настроить тест
Настройте запуск всех тестов с помощью atest и CATBox.
Настройка atest
Фреймворк предоставляет шаблоны для тестирования одной, двух и трех виртуальных машин. Добавьте в файл 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 для устройств.
Скопируйте содержимое шаблона:
sdv-one-device.xmlsdv-two-devices.xmlsdv-three-devices.xml
Замените
{MODULE}на название модуля теста.Добавьте аккаунт
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.
Создайте файл конфигурации в каталоге
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
- Пример теста:
Добавьте информацию в зависимости от типа теста:
Тестовая конфигурация с одной виртуальной машиной:
<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>Тестовая конфигурация с тремя виртуальными машинами:
<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), поэтому вы должны запустить их перед запуском тестов.
Настройте среду и запустите целевое устройство SDV:
. build/envsetup.sh lunch <TARGET>Запустите первый экземпляр CVD:
cvd create --config=sdv_core_instance1Запустите второй экземпляр CVD (для тестирования нескольких виртуальных машин):
cvd create --config=sdv_core_instance2Запустите третий экземпляр CVD (для тестирования нескольких виртуальных машин):
cvd create --config=sdv_core_instance3
Запустите atest
atest <TestModuleName>
Как запустить CATBox
Эти команды предполагают, что вы находитесь в корневом каталоге репозитория.
- Сборка CATBox:
m catbox - (Необязательно) Посмотрите все доступные планы тестирования 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