背景
我想在不同模拟器上的 Jenkins 上运行我的 Android Instrumented 测试。假设我有 100 个测试和 4 个模拟器,我想在每个模拟器上运行 25 个测试。
我表演./gradlew connectedDebugAndroidTest
在 Jenkins Pipeline 的 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
当环境准备好后,它就会执行:app:connectedDebugAndroidTest
这将开始在模拟器上运行测试。
我不想为所有并行调用运行这些过程(在本例中为 4 个并行调用),因为显然我多次执行完全相同的工作。理论上,最好的选择是在之前执行设置parallel
当一切准备好运行测试时,然后进入parallel
在每个模拟器上执行并开始测试。
Question
是否可以执行所有预设置步骤connectedDebugAndroidTest
没有表现自己?
另外,如果我跑connectedDebugAndroidTest
在 4 个模拟器上并行构建崩溃,因为 gradle 尝试从中读取文件intermediate
目录,当其他并行构建已经删除该文件时,这会导致崩溃。
您可以查看这个测试项目在github上 https://github.com/azizbekian/AndroidJenkinsPipeline与上面提到的设置。