Serenity BDD或Cucumber BDD框架的超时设置?

时间:2016-02-12 01:01:06

标签: maven cucumber cucumber-jvm serenity-bdd cucumber-serenity

我正在使用Cucumber结合Serenity框架编写一些BDD自动化测试。我需要在我的BDD测试中使用一些超时机制,这样如果Cucumber场景或Step in Serenity耗时太长,它将超时并且测试将失败。

我在以下链接中找到了一些信息: https://groups.google.com/forum/#!topic/cukes/QaPvVMnqDvE

因此对于Cucumber来说,步骤定义中的以下设置似乎应该起作用:

@When(value="^I request web authentication$", timeout=1000) 
public myfunc(){
}

对于Serenity,我没有找到任何超时设置,但我想这只是我还没有找到它。

然而,当我为Cucumber尝试timeout = xxx时,它似乎不起作用。即使myfunc()在我的测试中挂了很长时间,测试也没有停止,只是挂起。

任何人都知道这个timeout = xxx是否有其他设置可以使用?

Serenity是否也有自己的类似超时机制?

最后我使用maven clean install来测试,也许我错过了一些maven设置来实现这个功能?

任何提示都将非常受欢迎。

3 个答案:

答案 0 :(得分:2)

Serenity超时可以通过以下属性处理:

  1. webdriver.timeouts.implicitlywait
  2. webdriver.wait.for.timeout
  3. serenity.timeout
  4. 您还可以在

    中获取有关Serenity超时的更多信息

    http://thucydides.info/docs/serenity-staging/#_working_with_timeouts https://github.com/serenity-bdd/serenity-documentation/blob/master/src/asciidoc/system-props.adoc

答案 1 :(得分:1)

不是直接使用Maven安装来驱动测试,而是使用Junit或TestNG来执行此操作。 如果您使用Junit,则可以执行以下操作:

@Test(timeout = 20)
public void try() {
    while(true);
}

TestNG的工作方式也几乎相同:

@Test(timeOut = 10000)
public void try() {
    while(true);
}

Cucumber有可用的依赖项,它们兼容JUnit和TestNG。

您尝试过的黄瓜超时仅在以下情况下有效:

  • 正在使用的线程处于休眠状态的毫秒数 在您指定的超时时间内显示。为了克服这一点,你可以 为单独的测试创建一个单独的线程,以便您的线程(用于挂起的测试) 睡觉。但这可能不是你想要的。
  • 线程变得不可中断,然后它将被停止 指定超时的两倍。

如@aslakhellesoy @here

所述
  

如果线程不可中断,则超时会停止线程。 ...

     

如果线程没有响应interrupt(),我们会尝试停止()它   两次指定的超时后。

     

这使用了弃用的Thread.stop()方法,但是对于测试工具   像Cucumber那样应该没问题。

     

参考#343。

所以你必须将你的超时时间缩短一半。

答案 2 :(得分:0)

或者,如果每个步骤之后都需要延迟,则可以使用属性:

serenity.step.delay = {以毫秒为单位的时间}