背景
我想在不同的模拟器上在Jenkins上运行我的Android设备测试。假设我有100个测试和4个模拟器,我想对每个测试运行25个测试。
我在Jenkins管道的4个仿真器中并行执行./gradlew connectedDebugAndroidTest
stage('Instrumented Tests') {
parallel(
emu1: {
runInstrumentedTestOnEmu(...)
},
emu2: {
runInstrumentedTestOnEmu(...)
}
...
)
}connectedDebugAndroidTest将生成其他命令,以设置用于运行检测测试的环境。
...
:app:transformNativeLibsWithMergeJniLibsForDebugAndroidTest
:app:processDebugAndroidTestJavaRes NO-SOURCE
:app:transformResourcesWithMergeJavaResForDebugAndroidTest
:app:validateSigningDebugAndroidTest
:app:packageDebugAndroidTest
:app:assembleDebugAndroidTest
:app:connectedDebugAndroidTest当环境准备就绪时,它将执行:app:connectedDebugAndroidTest,它将开始在模拟器上运行测试。
我不想为所有的并行调用运行这些过程(在本例中将是4个),因为很明显,我正在多次执行完全相同的任务。从理论上讲,最好的选择是在parallel之前执行安装程序,并且当一切就绪准备运行测试时,然后进入parallel步骤并在每个模拟器上启动测试。
问题
是否可以在不执行自身的情况下执行connectedDebugAndroidTest的所有预设置步骤?
此外,如果我在4个仿真器上运行connectedDebugAndroidTest并行,构建就会崩溃,因为gradle试图从intermediate目录读取一个文件,而其他并行构建已经删除了该文件,这会导致崩溃。
您可以使用上面提到的设置查看这个在github的测试项目。
发布于 2017-03-08 01:04:15
是否可以在不执行自身的情况下执行connectedDebugAndroidTest的所有预设置步骤?
是的,您可以运行assembleDebugAndroidTest,正如构建日志显示的那样,这是运行设备测试的最后一个先决条件。运行该程序将同时构建应用程序和测试app。
尽管AFAIK,但在使用Gradle时,没有一种方法可以在多个模拟器之间分片测试--您必须将两个APK安装到每个模拟器上,并将adb shell am instrument与numShards和shardIndex选项一起使用。
https://stackoverflow.com/questions/42588457
复制相似问题