Android Studio-Очистить данные приложения для тестирования инструментария

как я могу получить Android Studio (AndroidJunitRunner), чтобы очистить данные приложения, предшествующие тесту инструментария без ручного запуска ?

я обнаружил, что android.support.test.runner.AndroidJUnitRunner вид читов - он никогда на самом деле не вызывает connectedCheck или connectedAndroidTest.

  1. при запуске из командной строки $ gradle connectedCheck

    :MyMainApp:assembleDebug UP-TO-DATE
    :MyMainApp:assembleDebugTest UP-TO-DATE
    :MyMainApp:clearMainAppData
    :MyMainApp:connectedCheck
    
  2. при запуске из среды 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: Перейдите к тестовой конфигурации

Your test configuration

Шаг 2: Просто добавьте задачу gradle вы создано

Simply call your gradle task from here

кстати, задача в моем случае просто выглядит так :

task clearData(type: Exec) {
  def clearDataCommand = ['adb', 'shell', 'pm', 'clear', 'com.your.application']
  commandLine clearDataCommand
}

надеюсь, что это поможет кому-то :)