Сначала прочтите раздел «Тестируйте свое приложение» на developer.android.com. Обратите внимание, что существуют некоторые различия в использовании инструментальных тестов в платформенном тестировании.
Вкратце, инструментальный тест предоставляет специальную среду выполнения теста, запускаемую командой am instrument , где целевой процесс приложения перезапускается и инициализируется с базовым контекстом приложения, а внутри виртуальной машины процесса приложения запускается поток инструментального тестирования. Ваш тестовый код начинает выполнение в этом потоке инструментального тестирования и получает экземпляр Instrumentation , который предоставляет доступ к контексту приложения и API для управления тестируемым процессом приложения.
Ключевые понятия
- Инструментарий должен быть объявлен в пакете приложения с помощью тега
<instrumentation>, вложенного под тег<manifest>манифеста пакета приложения. - В манифесте пакета приложения технически может содержаться несколько тегов
<instrumentation>, хотя такой способ использования встречается нечасто. - Каждый
<instrumentation>должен содержать:- Атрибут
android:name: это должно быть имя подклассаInstrumentation, включенного в тестовое приложение, обычно это используемый средство запуска тестов, например:android.support.test.runner.AndroidJUnitRunner - Необходимо определить атрибут
android:targetPackage. Его значение должно быть установлено равным пакету тестируемого приложения.
- Атрибут
Краткое описание шагов
Ниже перечислены распространенные места назначения для герметичных тестов сервисов фреймворка:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestestsЕсли вы добавляете совершенно новый модуль мониторинга для своего компонента, см.
Если вы добавляете тесты в одно из указанных выше мест, следуйте существующим правилам. Если вы настраиваете новый тестовый модуль, пожалуйста, следуйте инструкциям по настройке файлов
AndroidManifest.xmlиAndroid.mkв одном из указанных выше мест.Пример можно посмотреть в папке frameworks/base/core/tests/coretests/ . Обратите внимание, что эти строки устанавливают дополнительные приложения:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />Не забудьте пометить свой тест как
@SmallTest,@MediumTestили@LargeTestСоздайте тестовый модуль с помощью команды m, например:
m FrameworksCoreTestsЗапустите тесты:
Простейшее решение — использовать Atest следующим образом:
atest FrameworksCoreTestsИли для более сложных тестов используйте тест Федерации торговли «Упряжь» :
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTestsЕсли вы не используете Tradefed, установите и запустите тесты вручную:
- Установите сгенерированный APK-файл:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apkЗапустите тесты с различными параметрами:
все тесты в apk
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnerвсе тесты в рамках определенного пакета Java
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnerвсе тесты в рамках определенного класса
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunnerконкретный метод испытаний
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
В вашем тесте можно явно указать, пройден он или нет, используя API JUnit ; кроме того, любые необработанные исключения также приведут к функциональной ошибке.
Для отправки метрик производительности ваш тестовый код может вызвать Instrumentation#sendStatus , чтобы получить список пар ключ-значение. Важно отметить, что:
- Метрики могут быть целочисленными или с плавающей запятой.
- Все нечисловые значения будут отброшены.
- Ваш тестовый APK-файл может содержать либо функциональные тесты, либо тесты метрик, однако смешивание обоих типов тестов в настоящее время не поддерживается.