我对如何从命令行(gradle 任务)单独运行 Espresso 测试感兴趣(运行组/套件测试然后关闭应用程序,然后运行另一个组/测试套件)。
发现实现JUnit 测试套件是可行的,但并不真正了解它在仪器测试上下文中的幕后情况如何。它是否为每个测试套件启动单独的进程?Github 上有示例应用程序,但如何从终端执行它?
另一个有趣的发现是分片测试。但是,它是一句话文档。
可能有人可以分享任何单独运行 Espresso 测试的经验。
我对如何从命令行(gradle 任务)单独运行 Espresso 测试感兴趣(运行组/套件测试然后关闭应用程序,然后运行另一个组/测试套件)。
发现实现JUnit 测试套件是可行的,但并不真正了解它在仪器测试上下文中的幕后情况如何。它是否为每个测试套件启动单独的进程?Github 上有示例应用程序,但如何从终端执行它?
另一个有趣的发现是分片测试。但是,它是一句话文档。
可能有人可以分享任何单独运行 Espresso 测试的经验。
其中大部分记录为 AndroidJUnitRunner 的一部分:https ://developer.android.com/reference/android/support/test/runner/AndroidJUnitRunner.html
缺少的关键部分是如何通过 Gradle 传递这些参数。您可以通过在命令行中指定选项来做到这一点,如下所示:
./gradlew connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.class=*The full name of your test suite goes here*
我建议使用Spoon库单独或在多个设备上并行运行测试。您可以使用 jar 文件或使用同一页面上提到的Spoon gradle 插件。他们都有足够的文档来帮助您进行设置。
您还可以使用 Spoon 运行单个测试,命令如下所示:
./gradlew yourSpoonTaskName -PspoonClassName=com.yourPackageName.blah.ClassName
-PspoonMethodName=methodName
为了知道yourSpoonTaskName
运行的是什么./gradlew tasks
。
此外,在您的 build.gradle 文件中添加以下勺子配置:
spoon {
// for debug output
debug = true
// To grant permissions to Android M >= devices
grantAllPermissions = true
// for sharding
/*
this will execute tests in parallel on multiple devices.
*/
shard = true
// Add this to run a specific test class & method
if (project.hasProperty('spoonClassName')) {
className = project.spoonClassName
}
if (project.hasProperty('spoonMethodName')) {
methodName = project.spoonMethodName
}
}
如果您对 Spoon 不感兴趣并且只想要一个简单的解决方案,请使用以下命令运行单个测试:
am instrument -w -r -e class com.packageName.blah.TestName#methodName com.packageName.blah.YourIntrumentationRunnerName
如果您在 AndroidStudio 中右键单击测试名称并运行它,您可以轻松确定这些值。在控制台中,您将看到运行测试时打印的整个命令。