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

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

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

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

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

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

  • имя класса: Пушфилепрепарер

    • короткое имя : push-файл
    • функция : помещает произвольные файлы из папки тестового примера в место назначения на устройстве.
    • примечания :
      • этот модуль подготовки может перемещать файлы из папки в папку или из файла в файл; то есть вы не можете поместить файл в папку на устройстве: вы также должны указать имя файла назначения в этой папке.
    • параметры :
      • push-файл: push-спецификация, определяющая локальный файл и путь, по которому он должен быть отправлен на устройство. Возможно повторение. Если несколько файлов настроены для отправки по одному и тому же удаленному пути, будет отправлен последний из них.
      • push: (устарело) Спецификация 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 в место назначения на устройстве
    • параметры:
      • имя-тест-файла: имя APK, который будет установлен на устройство.
      • install-arg: дополнительные аргументы, которые необходимо передать команде pm install, включая дефис в начале, например «-d». Может повторяться.
  • имя класса: Рункмандтаржетпрепарер

    • короткое имя: команда запуска
    • функция: выполняет произвольные команды оболочки до или после выполнения тестового модуля
    • параметры:
      • команда запуска: команда оболочки 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. Это основной способ выполнения инструментального теста.