【问题标题】:Rerun the whole test class using Spock, maven and surefire使用 Spock、maven 和 surefire 重新运行整个测试类
【发布时间】:2020-12-02 12:18:36
【问题描述】:

我有一堆使用 Spock 实现的测试,其中包含 @Stepwise 子句,这意味着每个类中包含的每个测试方法都必须按顺序执行(它们依赖于前一个)。

现在我想为不稳定的测试实现一种重试机制,我正在尝试由 surefire 插件提供的机制。

这可行,但它只会重试失败的测试方法,当我希望它重新运行整个类时(即使是正确执行的测试,因为它们是下一个测试的先决条件)。怎么配置?

我的一个测试类的外观示例(我知道这是一个愚蠢的,我只是这样写,因为它适合作为示例):

@Stepwise
class DummyTest extends loginWithNewUser {


def infoDialogAppears() {
    given:
    at homePage
    

    when:
    infoButton.click()      

    then:
    infoDialog

}

def closeInfoDialog() {
    when:
    infoDialog.close()

    then:
    !infoDialog
}

【问题讨论】:

  • 请反馈。谢谢。

标签: maven spock maven-surefire-plugin


【解决方案1】:

您的测试不是简单的 Spock 测试,而是 Geb 测试。无论如何,您是否考虑过使用 Spock 1.3Spock 2.0 中的 Spock @Retry 注释来处理易碎测试?

我没有尝试在 Surefire/Failsafe 中执行此操作,甚至根本没有尝试在 Spock 中执行此操作,因为我相信修复片状测试并在它们确实失败时将它们变为红色而不是隐藏片状,从而消除修复的欲望它。但是 FWIW,Spock 内置了该功能,我建议在每个测试的基础上谨慎使用它,而不是全局使用它,因为重新运行每个失败的集成测试(即使是非易碎的测试)只会让您的测试执行速度变慢并且让开发者等待反馈。

【讨论】:

  • 好吧,我实际上改变了整个设置,最后,使测试方法彼此独立,但仍然能够逐步运行。使用 Spock 功能对我不起作用,因为它在维护方面需要大量的手动操作
  • 我曾建议谨慎地使用它, 这样维护工作就不会太多了。此外,一旦您将相应的测试重构为不再不稳定,您将立即删除每个注释。注释还将记录哪些测试是不稳定的。值得付出努力,除非您的大多数测试都是不稳定的,这意味着测试有问题。不要使用 Surefire 只是重复测试直到它们通过并隐藏片状,而是改进测试。否则它们毫无意义。不要扫除地毯下的污垢,让失败的测试伤害你。
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-09
  • 2021-12-17
  • 2014-09-28
  • 2018-10-10
  • 2014-09-30
  • 1970-01-01
相关资源
最近更新 更多