2017-03-03 58 views
12

背景connectedAndroidTest多个模拟器

我想在不同的模拟器上运行詹金斯我的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

回答

8

是否有可能执行connectedDebugAndroidTest的所有预设置步骤而不执行自己?

是的,你可以运行assembleDebugAndroidTest,其作为构建日志显示,是最后一个先决条件运行设备的测试。运行这将构建应用程序和测试APK。

虽然据我所知,没有使用时,摇篮跨越多个模拟器分片你的测试的方式 - 你将不得不在两者中的APK安装到每一个模拟器,并使用adb shell am instrumentnumShardsshardIndex选项。