我正在使用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设置来实现这个功能?
任何提示都将非常受欢迎。
答案 0 :(得分:2)
Serenity超时可以通过以下属性处理:
webdriver.timeouts.implicitlywait
webdriver.wait.for.timeout
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
答案 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 = {以毫秒为单位的时间}