Для некоторых тестовых модулей могут потребоваться специальные этапы настройки и завершения, которые невозможно выполнить в рамках самого тестового примера. Типичные примеры включают:
- Установите другие APK-файлы (помимо тестового).
- отправить несколько файлов на устройство
- Выполнение команд (например, adb shell pm ...)
В прошлом команды разработчиков компонентов обычно прибегали к написанию тестов на стороне хоста для выполнения подобных задач, что требовало понимания среды разработки Trade Federation и, как правило, увеличивало сложность тестового модуля.
Заимствуя идеи из CTS, мы ввели концепцию конфигурации тестового модуля для поддержки подобных задач; перечисленные выше распространенные задачи можно выполнить всего несколькими строками конфигурации. Для максимальной гибкости вы даже можете реализовать собственный подготовитель целевых объектов, как определено в ITargetPreparer или ITargetCleaner , и настроить его для использования в конфигурации вашего тестового модуля.
Конфигурационный файл тестового модуля представляет собой обязательный XML-файл, добавляемый в корневую папку исходного кода модуля и имеющий имя 'AndroidTest.xml'. XML-файл соответствует формату конфигурационного файла, используемого в средствах автоматизации тестирования Trade Federation. В настоящее время основными тегами, обрабатываемыми через конфигурационные файлы тестовых модулей, являются теги 'target_preparer' и 'test'.
Подготовка целей
Тег “target_preparer”, как следует из названия, определяет средство подготовки целевых объектов (см. ITargetPreparer ), которое предлагает метод setup, вызываемый перед выполнением тестового модуля; и если класс, на который ссылается тег “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>
В качестве примера можно добавить следующие теги параметров (в поле «вставить» выше):
<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
- Краткое название : push-file
- Функция : перемещает произвольные файлы из папки с тестовыми примерами в целевую папку на устройстве.
- примечания :
- Этот инструмент может передавать файлы из папки в папку или из файла в файл; то есть, вы не можете передать файл в папку на устройстве: необходимо указать также имя целевого файла в этой папке.
- параметры :
- push-file: Спецификация отправки, указывающая локальный файл и путь, по которому он должен быть отправлен на устройство. Может повторяться. Если для отправки нескольких файлов в один и тот же удаленный путь настроена отправка последнего файла, будет отправлен последний из них.
- push: (устарело) Спецификация отправки, отформатированная как '
/path/to/srcfile.txt->/path/to/destfile.txt' или '/path/to/srcfile.txt->/path/to/destdir/'. Может повторяться. Этот путь может быть относительным к каталогу тестового модуля или к самому выходному каталогу. - post-push: Команда, которая будет выполнена на устройстве (с помощью `
adb shell <your command>`) после того, как будут предприняты все попытки отправки. Типичный пример использования — использование команды chmod для управления правами доступа.
Имя класса: InstallApkSetup
- Краткое название: install-apk
- Функция: загружает произвольные APK-файлы в целевую папку на устройстве.
- параметры:
- test-file-name: имя APK-файла, который будет установлен на устройство.
- install-arg: Дополнительные аргументы, передаваемые команде pm install, включая дефис в начале, например, «-d». Может повторяться.
Имя класса: RunCommandTargetPreparer
- Краткое название: команда запуска
- Функция: выполняет произвольные команды оболочки до или после выполнения тестового модуля.
- параметры:
- run-command: команда оболочки adb для выполнения. Может быть повторена.
- teardown-command: команда оболочки adb, которая будет выполнена на этапе завершения работы. Может быть повторена.
Тестовый класс
Тестовый класс — это класс Торговой федерации, используемый для выполнения теста.
<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
- краткое название: gtest
- Функция: Тест, запускающий собственный пакет тестов на заданном устройстве.
- параметры:
- native-test-device-path: Путь на устройстве, где расположены нативные тесты.
Название класса: InstrumentationTest
- Краткое название: приборы
- Функция: Тест, запускающий пакет инструментальных тестов на заданном устройстве.
- варианты:
- package: Имя пакета манифеста тестового приложения Android для запуска.
- class: Имя тестового класса для запуска.
- метод: Название метода тестирования для выполнения.
Имя класса: AndroidJUnitTest
- Функция: Тест, запускающий пакет инструментальных тестов на заданном устройстве с помощью android.support.test.runner.AndroidJUnitRunner. Это основной способ выполнения инструментального теста.