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

azi*_*ian 12 android jenkins android-instrumentation

背景

我想在不同的模拟器上对Jenkins运行我的Android Instrumented测试.假设我有100个测试和4个模拟器,我想在每个上运行25个测试.

./gradlew connectedDebugAndroidTest在Jenkins Pipeline中为4个模拟器执行并行操作

stage('Instrumented Tests') {
    parallel(
            emu1: {
                 runInstrumentedTestOnEmu(...)
            },
            emu2: {
                 runInstrumentedTestOnEmu(...)
            }
            ...
    )
}
Run Code Online (Sandbox Code Playgroud)

connectedDebugAndroidTest 将生成其他命令以设置运行检测测试的环境.

...
:app:transformNativeLibsWithMergeJniLibsForDebugAndroidTest
:app:processDebugAndroidTestJavaRes NO-SOURCE
:app:transformResourcesWithMergeJavaResForDebugAndroidTest
:app:validateSigningDebugAndroidTest
:app:packageDebugAndroidTest
:app:assembleDebugAndroidTest
:app:connectedDebugAndroidTest
Run Code Online (Sandbox Code Playgroud)

当环境准备就绪时,:app:connectedDebugAndroidTest它会在仿真器上开始运行测试.

我不想为所有并行调用运行这些过程(在这种情况下,它将是其中的4个),因为显然我多次完成相同的工作.从理论上讲,最好的选择是parallel在所有内容准备好运行测试之前和之后执行设置,然后进入parallel步骤并在每个模拟器上开始测试.

是否可以在不执行任何操作的情况下执行所有预设置步骤connectedDebugAndroidTest

此外,如果我connectedDebugAndroidTest在4个仿真器上并行运行,则构建崩溃,因为intermediate当其他并行构建已删除该文件时,gradle会尝试从目录中读取文件,从而导致崩溃.

您可以使用上面提到的设置在github中查看此测试项目.

Chr*_*Orr 8

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

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

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