我想在不同的模拟器上运行詹金斯我的Android仪表测试。假设我有100个测试和4个模拟器,我想对每个测试运行25个测试。
我在詹金斯管道的并行执行./gradlew connectedDebugAndroidTest
4个模拟器
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
而当环境已就绪,那么它performes :app:connectedDebugAndroidTest
将开始运行模拟器上测试。
我不想为所有并行调用运行这些程序(在这种情况下,它将是其中的4个),因为显然我多次执行完全相同的工作。理论上,最好的选择是在parallel
之前执行设置,并且一切准备好运行测试,然后进入parallel
步骤并在每个仿真器上开始测试。
问题
是否可以执行所有的connectedDebugAndroidTest
安装前步骤而不执行本身?
此外,如果我在4个模拟器上并行运行connectedDebugAndroidTest
,则构建崩溃,因为当其他并行构建已经删除该文件时,由于gradle尝试从intermediate
目录读取文件,导致崩溃。
您可以使用上述设置查看this test project in github。