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

Сначала прочитайте Протестируйте свое приложение на сайте 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. все тесты в апк

        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 может быть либо функциональным тестом, либо тестом метрик, однако смешивание обоих в настоящее время не поддерживается.