背景
我想在不同的模拟器上对Jenkins运行我的Android Instrumented测试。假设我有100个测试和4个模拟器,我想对每个测试进行25次测试。
我在Jenkins Pipeline中为{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
目录中读取文件,从而导致崩溃
您可以使用上述设置查看this test project in github。
答案 0 :(得分:8)
是否可以执行connectedDebugAndroidTest的所有预设置步骤而无需自行执行?
是的,您可以运行assembleDebugAndroidTest
,这是您的构建日志显示的,是运行设备测试的最后一个先决条件。运行它将构建应用程序和测试APK。
虽然AFAIK,但是在使用Gradle时无法在多个模拟器之间分割测试 - 您必须将两个APK安装到每个模拟器上并使用adb shell am instrument
和numShards
并且shardIndex
选项。