2017-05-31 94 views
0

我有10个测试,要在黄瓜中运行,我使用红宝石来编写我的代码。测试中的应用程序设计,迫使我进行相互依赖的测试。再次运行黄瓜场景,直到通过

因此,直到前面的情况是通过,下一个失败。如果第二种情况失败,我添加了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 

对此有什么帮助?

+0

如果第二种情况失败,如何再次运行它使其通过? – grizzthedj

+0

在第二次测试中频繁出现间歇性错误。但是,当您将其作为一般问题时。有没有可能这样做?虽然我同意这不是最佳做法 –

回答

2

我认为你正在攀登一个滑坡,有相互依赖的测试通过。这种方法可能会持续出现问题。

我会推荐编写你的测试,使它们互不依赖,并使用像Factory Girl这样的框架来存放测试对象等。这里有很大的灵活性,并且与黄瓜很好地集成在一起。

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

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

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

+0

我同意这不是他的最佳做法..还有,如果我想测试个人功能。我的应用程序通过注册过程,在开始强制注册时接收OTP。在2-5分钟内每次触发一次OTP使得OTP接收时间非常高,并且由于未收到OTP,所以一半或更多测试失败。因此,为了消除对OTP的完全依赖性,我只进行了第一次测试,并且其他人已经登录。我会看看您提到的框架。 把我的问题作为一个普遍的问题,我想知道它的可能性吗? –

+0

'在排序术语中,也许可以创建一个全局状态变量来保存测试运行的状态。缺点是你必须在每次测试中检查一下。“好吧!我想我得到你在说什么...... –

+0

OTP的测试应该是一个在你的测试环境之外完成的集成测试。您可以在您的测试环境中(使用Factory Girl)“伪造”OTP,因为它使测试套件变得复杂。这将消除间歇性故障,并使测试彼此独立,这使您的测试套件更加干净和可维护。 – grizzthedj