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 的超时可以通过以下属性处理:
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
或者,如果您需要在每一步后延迟,您可以使用 属性:
serenity.step.delay={时间以毫秒为单位}
我正在使用 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 的超时可以通过以下属性处理:
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
或者,如果您需要在每一步后延迟,您可以使用 属性:
serenity.step.delay={时间以毫秒为单位}