Комплексная тестовая конфигурация

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

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

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

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

Конфигурация тестового модуля — это обязательный XML-файл, добавляемый в исходную папку модуля верхнего уровня с именем «AndroidTest.xml». XML соответствует формату конфигурационного файла, используемого системой автоматизации тестирования Торговой федерации. В настоящее время основными тегами, обрабатываемыми с помощью конфигураций тестового модуля, являются теги «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. после завершения тестового модуля выполните команду оболочки «настройки поставить безопасный доступность_enabled 0»

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

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

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

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

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