Инструментальные испытания

Сначала прочтите раздел «Тестируйте свое приложение» на developer.android.com. Обратите внимание, что существуют некоторые различия в использовании инструментальных тестов в платформенном тестировании.

Вкратце, инструментальный тест предоставляет специальную среду выполнения теста, запускаемую командой am instrument , где целевой процесс приложения перезапускается и инициализируется с базовым контекстом приложения, а внутри виртуальной машины процесса приложения запускается поток инструментального тестирования. Ваш тестовый код начинает выполнение в этом потоке инструментального тестирования и получает экземпляр Instrumentation , который предоставляет доступ к контексту приложения и API для управления тестируемым процессом приложения.

Ключевые понятия

  • Инструментарий должен быть объявлен в пакете приложения с помощью тега <instrumentation> , вложенного под тег <manifest> манифеста пакета приложения.
  • В манифесте пакета приложения технически может содержаться несколько тегов <instrumentation> , хотя такой способ использования встречается нечасто.
  • Каждый <instrumentation> должен содержать:
    • Атрибут android:name : это должно быть имя подкласса Instrumentation , включенного в тестовое приложение, обычно это используемый средство запуска тестов, например: android.support.test.runner.AndroidJUnitRunner
    • Необходимо определить атрибут android:targetPackage . Его значение должно быть установлено равным пакету тестируемого приложения.

Краткое описание шагов

  1. Ниже перечислены распространенные места назначения для герметичных тестов сервисов фреймворка:

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    Если вы добавляете совершенно новый модуль мониторинга для своего компонента, см.

  2. Если вы добавляете тесты в одно из указанных выше мест, следуйте существующим правилам. Если вы настраиваете новый тестовый модуль, пожалуйста, следуйте инструкциям по настройке файлов AndroidManifest.xml и Android.mk в одном из указанных выше мест.

  3. Пример можно посмотреть в папке frameworks/base/core/tests/coretests/ . Обратите внимание, что эти строки устанавливают дополнительные приложения:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. Не забудьте пометить свой тест как @SmallTest , @MediumTest или @LargeTest

  5. Создайте тестовый модуль с помощью команды m, например:

    m FrameworksCoreTests
    
  6. Запустите тесты:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. Если вы не используете Tradefed, установите и запустите тесты вручную:

    1. Установите сгенерированный APK-файл:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    
    1. Запустите тесты с различными параметрами:

      1. все тесты в apk

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. все тесты в рамках определенного пакета Java

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. все тесты в рамках определенного класса

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. конкретный метод испытаний

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest#testCancel \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        

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

Для отправки метрик производительности ваш тестовый код может вызвать Instrumentation#sendStatus , чтобы получить список пар ключ-значение. Важно отметить, что:

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