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

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

  • установить другие 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». Как показано выше, тег может иметь два атрибута: имя, значение. Атрибут имени должен ссылаться на один из вариантов, предлагаемых составителем.

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

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

    • короткое имя : push-file
    • функция : помещает произвольные файлы из папки тестового случая в место назначения на устройстве
    • примечания :
      • этот подготовитель может перемещать файлы из папки в папку или из файла в файл; то есть вы не можете перемещать файлы в папку на устройстве: вы должны также указать имя файла назначения в этой папке
    • параметры :
      • push-file: push-spec, указывающий локальный файл на путь, по которому он должен быть отправлен на устройство. Может повторяться. Если несколько файлов настроены на отправку по одному и тому же удаленному пути, будет отправлен последний.
      • push: (устарело) push-spec, отформатированный как ' /path/to/srcfile.txt->/path/to/destfile.txt ' или ' /path/to/srcfile.txt->/path/to/destdir/ '. Может повторяться. Этот путь может быть относительным к каталогу тестового модуля или к самому каталогу out.
      • post-push: Команда для запуска на устройстве (с ` adb shell <your command> `) после того, как все push-установки были предприняты. Типичным вариантом использования будет использование 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. Это основной способ выполнения инструментального теста.