在多个模拟器上进行connectedAndroid测试

2024-02-13

背景

我想在不同模拟器上的 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与上面提到的设置。


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

是的,你可以运行assembleDebugAndroidTest正如您的构建日志所示,这是运行设备测试的最后一个先决条件。运行该命令将构建应用程序和测试 APK。

尽管据我所知,在使用 Gradle 时,没有办法将测试分片到多个模拟器上 — 您必须将两个 APK 安装到每个模拟器上并使用adb shell am instrumentnumShards and shardIndex选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在多个模拟器上进行connectedAndroid测试 的相关文章

随机推荐