Android:如何在第一次失败后停止仪器测试

tir*_*r38 6 testing android android-instrumentation

我们有一套 Android 仪器测试,我们通过 CL 运行这些测试。./gradlew app:connectedDebugAndroidTest如果测试失败,我们基本上必须等待所有测试完成,然后才能生成 HTML 报告。我们希望测试在第一个失败的测试中停止。是否有我们可以应用的 gradle 标志来实现这一目标?我在官方文档中没有找到任何内容。

Ani*_*dia 1

我不知道你是否找到了解决方案,但我正在考虑,然后我想出了使用 aTestRunnerTestRule。我认为这种TestRunner方法更合适。我不是所使用的伴随对象/静态字段的最大粉丝,但它确实有效。我已经使用单个模拟器对其进行了测试,但没有跨多个模拟器进行分片测试(但我认为它不会在所有模拟器上传播任何故障)。

自定义测试运行程序

TestRunner意识到测试失败并在第一次测试失败后忽略测试的自定义。AndroidJUnit4我创建了一个具有以下功能的精简版本:https: //gist.github.com/AniFichadia/0a0aa665dfc554e963d2ab3276247efb#file-skiponfirstfailuretestrunner-kt

AndroidJUnit4本质上委托给androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunnerorg.robolectric.RobolectricTestRunner

上面的实现有一个子类,AndroidJUnit4ClassRunner如果任何测试失败,它会阻止测试方法运行(通过将它们视为忽略)。如果您需要Robolectric,那么自定义的实现与要点中的RobolectricTestRunner自定义相同AndroidJUnit4ClassRunner,并且您可以使用与 中的类似检查AndroidJUnit4.loadRunner(Class)

要使用它,您只需使用 runner: 注释您的测试类@RunWith(SkipOnFirstFailureTestRunner::class)

只需要注意AndroidJUnit4内部是否发生变化(例如氮气)。

自定义测试规则

在第一次测试失败后将跳过测试的测试规则(通过将它们视为忽略): https ://gist.github.com/AniFichadia/0a0aa665dfc554e963d2ab3276247efb#file-skiponfirstfailuretestrule-kt

您需要将规则添加到测试类中,这也可以应用于单元测试类。它记录了第一个失败的测试,但我不喜欢这种方法。

启用TestRunner/TestRule

也许您可以使用一个BuildConfig字段来启用它。如果测试在 CICD 上运行,则可以在非生产变体中将其设置为 true。

为此,TestRunner您需要enabled在类本身中设置属性。

对于,您可以在使用构造函数时TestRule使用该字段来设置是否启用它。enabled

让我知道你的想法。