如何让Android Studio(AndroidJunitRunner)在仪器测试之前清除应用程序数据,而无需手动运行adb
命令?
我发现android.support.test.runner.AndroidJUnitRunner
是一种欺骗--它从来没有真正调用过connectedCheck
或connectedAndroidTest
。
1.从命令行运行时$ gradle connectedCheck
:MyMainApp:assembleDebug UP-TO-DATE
:MyMainApp:assembleDebugTest UP-TO-DATE
:MyMainApp:clearMainAppData
:MyMainApp:connectedCheck
字符串
1.在IDE中通过单击仪器测试配置(带红色/绿色箭头的绿色Android机器人徽标)运行时
**Executing tasks: [:MyMainAppApp:assembleDebug, :MyMainAppApp:assembleDebugTest]**
型
可以看到,最后一个gradle目标是assembleDebugTest
我已经在build.gradle
中的connectedCheck
上添加了一个钩子,以便在开始仪器测试之前清除主应用程序的数据。
// 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)
}
}
型
我意识到,或者我可以在主应用程序中实现一个“清除数据”按钮,并让仪器应用程序点击UI,但我发现这种解决方案不可取。
我查看了AndroidJUnitRunner
API,通过Runlistener
接口有钩子,但钩子是在测试应用程序的上下文中,即。Android禁止一个应用程序修改另一个应用程序。http://junit.sourceforge.net/javadoc/org/junit/runner/notification/RunListener.html
如果您能帮助我从Android Studio中自动触发以下其中一项,则最佳答案**归您所有:
- 执行命令行
adb shell pm clear my.main.app.package
, - 或者最好调用我的gradle任务
clearMainAppData
我也洗耳恭听,如果有一个替代的方法。设备测试自动化肯定会有一个明确的方法来清除应用程序数据吗?
谢谢你,谢谢
3条答案
按热度按时间aij0ehis1#
我知道这已经有一段时间了,希望现在你能解决这个问题。
我今天遇到了同样的问题,没有任何解决方案就坠毁在这里。
但是我设法通过从测试配置调用我的任务使它工作。
步骤1:转到测试配置
的数据
第2步:添加您创建的gradle任务
的
顺便说一下,在我的例子中,任务看起来像这样:
字符串
希望这对某人有帮助:)
dauxcl2d2#
在Android Test Orchestrator中,通过gradle脚本提供此选项更容易。
字符串
下面是Android Test Orchestrator的链接
https://developer.android.com/training/testing/junit-runner#using-android-test-orchestrator
x6492ojm3#
2023年解决方案
1.添加依赖项(在此处查看实际版本):
使用Gradle:
字符串
带版本目录:
型
1.修改gradle文件。将以下语句添加到项目的
build.gradle
文件中:Kotlin:
型
Groovy:
型
Android Developers文档