Сложная тестовая конфигурация

Некоторые тестовые модули могут потребовать специальной настройки и демонтажа, которые невозможно выполнить в рамках самого тестового случая. Типичные примеры:

  • установить другие apk (в дополнение к тестовому apk)
  • отправить некоторые файлы на устройство
  • выполнить команды (например, adb shell pm ...)

Раньше команды разработчиков компонентов обычно прибегали к написанию тестов на стороне хоста для выполнения таких задач, что требовало понимания принципов работы Trade Federation и, как правило, увеличивало сложность тестового модуля.

Заимствуя из CTS, мы ввели концепцию конфигурации тестового модуля для поддержки таких задач. Список распространённых задач, перечисленных выше, можно реализовать всего несколькими строками конфигурации. Для максимальной гибкости вы можете реализовать собственный целевой подготовительный модуль, например, ITargetPreparer или ITargetCleaner , и настроить его для использования в конфигурации вашего тестового модуля.

Конфигурация тестового модуля — это обязательный XML-файл, добавляемый в исходную папку модуля верхнего уровня с именем «AndroidTest.xml». XML соответствует формату файла конфигурации, используемого системой автоматизации тестирования Trade Federation. В настоящее время основными тегами, обрабатываемыми через конфигурации тестовых модулей, являются теги «target_preparer» и «test».

Подготовители целей

Тег «target_preparer», как следует из названия, определяет целевой подготовитель (см. ITargetPreparer ), который предлагает метод настройки, вызываемый перед выполнением тестового модуля для тестирования; а если класс, указанный в теге «target_preparer», также реализует ITargetCleaner , его метод очистки будет вызван после завершения тестового модуля.

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

Параметры настроят тестовую среду на:

  1. перед вызовом тестового модуля выполните на устройстве команду оболочки «settings put secure accessibility_enabled 1»
  2. после завершения тестового модуля выполните команду оболочки «settings put secure accessibility_enabled 0»

В этом конкретном примере доступность включается/отключается до/после выполнения тестового модуля соответственно. На примере простого примера необходимо подробнее рассмотреть использование тега «option». Как показано выше, тег может иметь два атрибута: имя и значение. Атрибут «name» должен ссылаться на один из вариантов, предлагаемых составителем.

Точное назначение поля «Значение» зависит от того, как определил параметр: это может быть строка, число, логическое значение или даже путь к файлу. Ниже приведен краткий обзор трёх распространённых целевых преобразователей:

  • имя класса: PushFilePreparer

    • короткое имя : push-file
    • функция : помещает произвольные файлы из папки тестового случая в место назначения на устройстве
    • примечания :
      • этот подготовитель может перемещать файлы из папки в папку или из файла в файл; то есть вы не можете перемещать файлы в папку на устройстве: вы должны также указать имя целевого файла в этой папке
    • параметры :
      • 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

    • короткое имя: install-apk
    • функция: помещает произвольные файлы APK в место назначения на устройстве
    • параметры:
      • test-file-name: имя APK-файла, который будет установлен на устройство.
      • install-arg: Дополнительные аргументы, передаваемые команде pm install, включая начальный дефис, например, «-d». Могут повторяться.
  • имя класса: RunCommandTargetPreparer

    • короткое имя: run-command
    • функция: выполняет произвольные команды оболочки до или после выполнения тестового модуля
    • параметры:
      • run-command: команда оболочки adb для запуска. Можно повторять.
      • teardown-command: команда оболочки adb для выполнения во время фазы teardown. Можно повторять.

Тестовый класс

Тестовый класс — это класс 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

    • короткое имя: gtest
    • функция: Тест, который запускает собственный тестовый пакет на заданном устройстве.
    • параметры:
      • native-test-device-path: Путь на устройстве, где находятся собственные тесты.
  • имя класса: InstrumentationTest

    • краткое название: приборостроение
    • Функция: Тест, который запускает пакет инструментальных тестов на заданном устройстве.
    • параметры:
      • package: Имя пакета манифеста тестового приложения Android для запуска.
      • класс: Имя тестового класса для запуска.
      • метод: Имя метода теста, который необходимо запустить.
  • имя класса: AndroidJUnitTest

    • Функция: Тест, который запускает пакет инструментального теста на заданном устройстве с помощью android.support.test.runner.AndroidJUnitRunner. Это основной способ выполнения инструментального теста.