在多个模拟器上连接了Android测试

时间:2017-03-03 21:08:35

标签: android jenkins android-instrumentation

背景

我想在不同的模拟器上对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

1 个答案:

答案 0 :(得分:8)

  

是否可以执行connectedDebugAndroidTest的所有预设置步骤而无需自行执行?

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

虽然AFAIK,但是在使用Gradle时无法在多个模拟器之间分割测试 - 您必须将两个APK安装到每个模拟器上并使用adb shell am instrumentnumShards并且shardIndex选项。