1

我正在使用 Cucumber 和 Serenity 框架编写一些 BDD 自动化测试。而且我在 BDD 测试中需要一些超时机制,这样如果 Cucumber 场景或 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 设置来工作?

任何提示将不胜感激。

4

3 回答 3

2

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

于 2016-02-19T11:11:25.510 回答
1

与其直接使用 Maven install 来驱动测试,不如使用 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所提到的

如果线程不可中断,超时会停止线程。…</p>

如果一个线程没有响应 interrupt() 我们将在两次指定的超时后尝试 stop() 它。

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

参考文献#343。

因此,您必须将超时时间减少一半。

于 2016-02-16T14:55:51.717 回答
0

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

serenity.step.delay={时间毫秒}

于 2019-04-04T13:03:46.290 回答