Android Studio-Очистить данные приложения для тестирования инструментария
как я могу получить Android Studio (AndroidJunitRunner), чтобы очистить данные приложения, предшествующие тесту инструментария без ручного запуска ?
я обнаружил, что android.support.test.runner.AndroidJUnitRunner
вид читов - он никогда на самом деле не вызывает connectedCheck
или connectedAndroidTest
.
-
при запуске из командной строки
$ gradle connectedCheck
:MyMainApp:assembleDebug UP-TO-DATE :MyMainApp:assembleDebugTest UP-TO-DATE :MyMainApp:clearMainAppData :MyMainApp:connectedCheck
-
при запуске из среды IDE, щелкнув конфигурацию тестирования инструментария (зеленый логотип робота Android с красными / зелеными стрелками)
**Executing tasks: [:MyMainAppApp:assembleDebug, :MyMainAppApp:assembleDebugTest]**
как вы можете видеть, последняя цель gradle -
assembleDebugTest
я добавил крюк на connectedCheck
на build.gradle
Очистить данные основного приложения перед запуском измерительного оборудования.
// Run 'adb' shell command to clear application data of main app for 'debug' variant
task clearMainAppData(type: Exec) {
// we have to iterate to find the 'debug' variant to obtain a variant reference
android.applicationVariants.all { variant ->
if (variant.name.equals("debug")) {
def clearDataCommand = ['adb', 'shell', 'pm', 'clear', getPackageName(variant)]
println "Clearing application data of ${variant.name} variant: [${clearDataCommand}]"
commandLine clearDataCommand
}
}
}
// Clear Application Data (once) before running instrumentation test
tasks.whenTaskAdded { task ->
// Both of these targets are equivalent today, although in future connectedCheck
// will also include connectedUiAutomatorTest (not implemented yet)
if(task.name.equals("connectedAndroidTest") || task.name.equals("connectedCheck" )){
task.dependsOn(clearMainAppData)
}
}
я понимаю, что в качестве альтернативы я мог бы реализовать кнопку "Очистить данные" в главном приложении и щелкнуть приложение instrumentation через пользовательский интерфейс, но я нахожу это решение нежелательный.
я посмотрел на AndroidJUnitRunner
API и есть крючки через Runlistener
интерфейс, но крючки находятся в контексте тестового приложения, т. е. работают на устройстве, и Android запрещает одному приложению изменять другое приложение.
http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html
лучший ответ идет к вам, если вы можете помочь мне вызвать одно из следующих автоматически из Android Студия:
- выполнить командную строку
adb shell pm clear my.main.app.package
, - или предпочтительно вызвать мою задачу gradle
clearMainAppData
я тоже все уши, если есть альтернативный способ. Конечно, с автоматизацией тестирования устройств должен быть четкий способ очистки данных приложения?
спасибо!
1 ответов
Я знаю, что прошло некоторое время, и, надеюсь, теперь у вас будет эта проблема.
я столкнулся с той же проблемой сегодня, и разбился здесь без какого-либо решения.
но мне удалось заставить его работать, вызывая мою задачу из тестовой конфигурации.
Шаг 1: Перейдите к тестовой конфигурации
Шаг 2: Просто добавьте задачу gradle вы создано
кстати, задача в моем случае просто выглядит так :
task clearData(type: Exec) {
def clearDataCommand = ['adb', 'shell', 'pm', 'clear', 'com.your.application']
commandLine clearDataCommand
}
надеюсь, что это поможет кому-то :)