Некоторые тестовые модули могут требовать специальных шагов настройки и завершения, которые нельзя выполнить в самом тестовом случае. Примеры:
- устанавливать другие APK-файлы (помимо тестового);
- передавать некоторые файлы на устройство;
- выполнять команды (например, adb shell pm …);
Раньше командам, работающим над компонентами, приходилось писать тесты на стороне хоста, чтобы выполнять такие задачи. Для этого нужно было разбираться в тестовой среде Trade Federation, что обычно усложняло тестовый модуль.
Заимствуя из CTS, мы ввели концепцию конфигурации тестового модуля для поддержки таких задач. Список общих задач, приведенный выше, можно выполнить с помощью всего нескольких строк конфигурации. Для максимальной гибкости вы можете реализовать собственный инструмент подготовки целевых объектов, как определено в ITargetPreparer или ITargetCleaner, и настроить его для использования в конфигурации собственного тестового модуля.
Файл конфигурации тестового модуля – это обязательный XML-файл, который добавляется в исходную папку модуля верхнего уровня и называется AndroidTest.xml. Он имеет формат файла конфигурации, используемого в системе автоматизации тестирования Trade Federation. В настоящее время основными тегами, обрабатываемыми через конфигурации тестовых модулей, являются теги target_preparer и test.
Целевые специалисты по подготовке
Тег target_preparer, как следует из названия, определяет подготовитель целевого устройства (см. ITargetPreparer), который предлагает метод настройки, вызываемый перед выполнением тестового модуля. Если класс, на который ссылается тег target_preparer, также реализует интерфейс ITargetCleaner, то после завершения тестового модуля будет вызван его метод teardown.
Чтобы использовать встроенную конфигурацию общего модуля, добавьте новый файл AndroidTest.xml в папку верхнего уровня для тестового модуля и заполните его следующим содержимым:
<?xml version="1.0" encoding="utf-8"?>
<!-- [insert standard AOSP copyright here] -->
<configuration description="Test module config for Foo">
<!-- insert options here -->
</configuration>
Например, мы можем добавить следующие теги вариантов (в комментарий "insert" выше):
<target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
<option name="run-command" value="settings put secure accessibility_enabled 1" />
<option name="teardown-command" value="settings put secure accessibility_enabled 0" />
</target_preparer>
Эти параметры настраивают тестовую программу для:
- перед вызовом тестового модуля выполните на устройстве команду оболочки "settings put secure accessibility_enabled 1"
- После завершения модуля тестирования выполните команду оболочки "settings put secure accessibility_enabled 0".
В этом примере специальные возможности включаются и отключаются до и после выполнения тестового модуля соответственно. Мы привели простой пример, но теперь нужно рассказать подробнее о том, как используется тег option. Как показано выше, у тега может быть два атрибута: name и value. Атрибут name должен ссылаться на один из вариантов, предлагаемых разработчиком.
Точное назначение поля зависит от того, как автор определил параметр: это может быть строка, число, логическое значение или даже путь к файлу. Ниже приведено краткое описание трех распространенных целевых подготовителей:
название класса: PushFilePreparer
- short name: push-file
- function: передает произвольные файлы из папки тестового случая в целевую папку на устройстве.
- notes:
- Подготовитель может переносить файлы и папки по отдельности. Это означает, что вы не можете перенести файл в папку на устройстве, не указав название файла в этой папке.
- options:
- push-file: спецификация push-запроса, указывающая локальный файл и путь, по которому он должен быть отправлен на устройство. Может повторяться. Если для отправки по одному и тому же удаленному пути настроено несколько файлов, будет отправлен последний из них.
- push: (устарело) Спецификация push-уведомлений в формате
/path/to/srcfile.txt->/path/to/destfile.txtили/path/to/srcfile.txt->/path/to/destdir/. Может повторяться. Этот путь может быть указан относительно каталога тестового модуля или каталога out. - post-push: команда, которая будет выполнена на устройстве (с помощью
adb shell <your command>) после того, как все попытки отправки будут предприняты. Обычно для управления разрешениями используется команда chmod.
название класса: InstallApkSetup;
- short name:install-apk
- function: отправляет произвольные APK-файлы в целевой каталог на устройстве.
- Варианты:
- test-file-name: название APK-файла, который нужно установить на устройство.
- install-arg: дополнительные аргументы, которые будут переданы команде pm install, включая дефис в начале, например "-d". Может повторяться
название класса: RunCommandTargetPreparer
- short name: run-command
- function: выполняет произвольные команды оболочки до или после выполнения тестового модуля.
- options:
- run-command: команда adb shell, которую нужно выполнить. Может повторяться
- teardown-command: команда adb shell, которая выполняется на этапе демонтажа. Может повторяться
Тестовый класс
Тестовый класс – это класс Trade Federation, который используется для выполнения теста.
<test class="com.android.tradefed.testtype.AndroidJUnitTest">
<option name="package" value="android.test.example.helloworld"/>
<option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>
Вот три распространенных класса тестов:
название курса: GTest
- short name: gtest
- function: тест, который запускает пакет нативных тестов на указанном устройстве.
- Варианты:
- native-test-device-path: путь на устройстве, где находятся нативные тесты.
название класса: InstrumentationTest
- short name: instrumentation
- function: тест, который запускает пакет инструментальных тестов на указанном устройстве;
- options:
- package: название пакета манифеста тестового приложения Android, которое нужно запустить.
- class: название класса теста, который нужно запустить.
- method: название метода тестирования, который нужно запустить.
название класса: AndroidJUnitTest;
- function: Тест, который запускает пакет инструментальных тестов на указанном устройстве с помощью android.support.test.runner.AndroidJUnitRunner. Это основной способ выполнения инструментальных тестов.