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

Timeout setup for Serenity BDD or Cucumber BDD framework?

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

我在下面的 link 中找到了一些信息: 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 设置才能正常工作?

任何提示将不胜感激。

与其直接使用 Maven 安装来驱动测试,不如使用 Junit 或 TestNG 来完成。 如果你使用 Junit,超时可以这样设置:

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

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

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

Cucumber 具有与 JUnit 和 TestNG 兼容的可用依赖项。


您尝试的 Cucumber 超时仅在以下情况下有效:

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

如@aslakhellesoy 所述@here

Timeout stops threads if they are uninterruptible. …

If a thread does not respond to interrupt() we'll try to stop() it after twice the specified timeout.

This uses the deprecated Thread.stop() method, but for a testing tool like Cucumber that should be ok.

Ref #343.

所以你必须将超时时间减少一半。

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

  1. webdriver.timeouts.implicitlywait
  2. webdriver.wait.for.timeout
  3. serenity.timeout

您还可以在

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

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

或者,如果您需要在每一步后延迟,您可以使用 属性:

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