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

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

Таким образом, испытание приборов обеспечивает специальную среду выполнения теста , как запущенные через am instrument команду, где целевой процесс перезапуске приложения и инициализируется с основным контекстом приложения, и инструментовка нить запускаются в процессе применения VM. Ваш тестовый код начинает выполняться на этом приборной нити и снабжен 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. См фреймворки / BASE / CORE / тесты / 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
    

    Подсказка: вы используете adb shell pm list instrumentation , чтобы найти измерительные приборы внутри 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
        

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

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

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