【问题标题】:Android Test ShardingAndroid 测试分片
【发布时间】:2016-03-31 17:15:18
【问题描述】:

谁能解释一下 android 中的测试分片意味着什么? 如果有人可以分享任何教程将非常有帮助。

shard 这个词的意思是整体的一小部分。 sharding是如何只基于一个数字进行的,我应该在什么基础上指定shardIndex?

开发者文档中的定义。

测试分片

测试运行器支持将单个测试套件拆分为多个 分片,因此您可以轻松运行属于同一分片的测试 作为一个组,在同一个 Instrumentation 实例下。每个 分片由索引号标识。运行测试时,使用 -e numShards 选项指定要创建的单独分片的数量 和 -e 分片索引选项来指定运行哪个分片。

例如,要将测试套件拆分为 10 个分片并仅运行 测试分组在第二个分片中,使用以下命令:

adb shell am instrument -w -e numShards 10 -e shardIndex 2

【问题讨论】:

    标签: android android-testing


    【解决方案1】:

    测试分片允许您将测试平均分成组。分片索引是您正在运行的“百分比”组。组的划分方式是任意的,因为分片的目的是并行化您的测试。

    例如,假设您要运行 60 个测试,每个测试需要 1 分钟才能完成。如果您要在单个设备上运行它,则运行所有测试需要一个小时。现在假设您想通过在一台设备上运行一半测试并在另一台设备上同时运行另一半来加快测试速度,这样总共只需要 30 分钟。

    您可以通过并行运行以下 ADB 命令来做到这一点。

    adb -s DEVICE_1_SERIAL shell am instrument -w -e numShards 2 -e shardIndex 0 > device_1_results // Runs first half of the tests
    adb -s DEVICE_2_SERIAL shell am instrument -w -e numShards 2 -e shardIndex 1 > device_2_results // Runs second half of the tests
    

    您现在只需 30 分钟即可运行所有 60 次测试,只需将负载平均分配到两台设备上,现在就可以处理结果了。

    有关其工作原理的详细信息,请查看内部的 ShardingFilter https://android.googlesource.com/platform/frameworks/testing/+/2fe8aed7542ee05ce504d69656475d1948e9c5b2/androidtestlib/src/com/android/test/runner/TestRequestBuilder.java

    【讨论】:

      【解决方案2】:

      您也可以通过 gradle 命令实现此目的。如果你 gradle 任务来运行你的单元或 ui 测试,下面的命令将允许你根据分片号和索引过滤测试。

      ANDROID_SERIAL=emulator-5554 ./gradlew connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.numShards=3 -Pandroid.testInstrumentationRunnerArguments.shardIndex=0
      

      ANDROID_SERIAL 值可以更改为从 adb devices 中提取的设备 ID

      【讨论】:

      • 我们如何在不同的模拟器上并行运行分片?说 emulator-5554 和 emulator-5556 和 numShards=2.. 我想在 emulator-5554 上运行 shard index 0 ,在 emulator-5556 上运行 shard index 1 。或者有没有办法提供列表模拟器和分片号?
      • 我尝试过的唯一方法是拥有 2 个终端窗口并使用以下命令运行一个。在 dex 合并的情况下,您可能会看到此失败。我通常通过 jenkins 运行它我在 2 个不同的从属设备上运行这 2 个分片 ANDROID_SERIAL=emulator-5554 ./gradlew connectedAndroidTest -Pandroid.testInstrumentationRunnerArguments.numShards=2 -Pandroid.testInstrumentationRunnerArguments.shardIndex=0 ANDROID_SERIAL=emulator-5556 ./gradlew connectedAndroidTest - Pandroid.testInstrumentationRunnerArguments.numShards=2 -Pandroid.testInstrumentationRunnerArguments.shardIndex=1
      猜你喜欢
      • 2018-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 2016-08-30
      相关资源
      最近更新 更多