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

时间:2019-01-25 17:57:06

标签: android testing android-instrumentation

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

1 个答案:

答案 0 :(得分:0)

我不知道您是否找到了解决方案,但是我正在考虑它,因此想出了使用TestRunnerTestRule的方法。我认为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)中类似的检查

要使用它,只需在运行程序上标注测试类:@RunWith(SkipOnFirstFailureTestRunner::class)

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

自定义测试规则

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

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

启用TestRunner / TestRule

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

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

对于TestRule,您可以使用构造器中的enabled字段(无论在何处使用)来设置是否启用。

让我知道您的想法。