【问题标题】:Run cucumber scenario again until pass再次运行黄瓜场景直到通过
【发布时间】:2017-10-31 23:25:11
【问题描述】:

我有 10 个要在 cucumber 中运行的测试,并且我正在使用 ruby​​ 来编写我的代码。正在测试的应用程序设计迫使我进行相互依赖的测试。

所以在前一个案例通过之前,下一个案例失败。我添加了cucumber_wants_to_quit,以防第二种情况失败,以避免等待只获得失败报告。现在,我正在寻找类似的东西,再次运行第二个场景,并一直运行到pass,然后再进行第三个场景。

我知道命令cucumber re-run,但不想使用它,因为这基本上会运行所有场景并在第一次完整运行完成后运行失败的案例。

我的要求基本上是,当第二个场景失败时,在移动到第三个之前,运行第二个场景直到通过。在编码语言中类似于

 After do |scenario.name|
     if scenario.name == failed?
         status = scenario.name.run_again until scenario.name == passed
         if !status
            Cucumber.wants_to_quit = true
         end
     end
 end

对此有任何帮助吗?

【问题讨论】:

  • 如果第二种方案失败了,如何再次运行它使其通过?
  • 第二次测试中经常出现间歇性错误。但是当您将其作为一般问题时。有没有可能这样做?虽然我同意这不是最佳做法

标签: ruby automation cucumber bdd gherkin


【解决方案1】:

我认为您正在爬上一个滑坡,其中的测试相互依赖才能通过。今后,您可能会在使用这种方法时遇到持续的问题。

我建议您编写测试,使它们不相互依赖,并使用像Factory Girl 这样的框架来存根测试对象等。这里有很大的灵活性,并且可以很好地与 cucumber 集成。

更新:根据您的评论,OTP 的测试应该是在您的 TEST 环境之外完成的集成测试。例如,当您将新代码部署到 DEV 环境时,您的集成测试(测试 OTP)应该在部署的代码上运行。

在您的TEST 环境中,您可以fake OTP(与Factory Girl)。这将消除间歇性故障,并使您的测试相互独立,从而使您的测试套件更加干净和可维护。

在短期内,也许您可​​以创建一个全局状态变量来保存测试运行的状态。缺点是您必须在每次测试中检查这一点。

【讨论】:

  • 我同意这不是他的最佳做法。如果我想测试单个功能,也是如此。我的应用程序经历了一个注册过程,我们在开始时强制接收 OTP 以进行登录。每次在 2-5 分钟内触发 OTP 会使 OTP 接收时间非常长,并且由于未收到 OTP 而导致一半或更多测试失败。因此,为了消除对 OTP 的完全依赖,我只在登录时进行了第一次测试,其余的已经登录。我会看看你提到的框架。将我的问题作为一般问题,我想知道有它的可能性吗?
  • In the sort term, perhaps you can create a global status variable to hold the status of the test run. The downside is that you would have to check this in every test. 好的!我想我明白你在说什么......
  • OTP 的测试应该是在您的测试环境之外完成的集成测试。您可以在测试环境中“伪造”OTP(使用 Factory Girl),因为它会使您的测试套件变得复杂。这将消除间歇性故障,并使您的测试相互独立,从而使您的测试套件更加干净和可维护。
  • 明白。在测试环境中,该应用程序也使用帐户工具包生成 OTP,该 OTP 仅验证实数,并且仅在使用 sim 卡验证时才有效。你认为,这可以用工厂女孩的方法来伪造吗?我不太了解它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-22
  • 2020-07-11
相关资源
最近更新 更多