当前位置: 首页 > 知识库问答 >
问题:

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

楚墨一
2023-03-14

我正在使用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,我没有找到任何超时设置,但我想这只是我还没有找到它。

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

有人知道这个timeout=xxx是否有额外的设置来工作吗?

此外,Serenity是否有自己的类似超时机制可供使用?

最后,我正在使用maven clean install来驱动测试,也许我错过了一些maven设置来工作?

任何提示都将不胜感激。

共有3个答案

暨鹭洋
2023-03-14

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

serenity.step.delay={time in ms}

孔俊爽
2023-03-14

不要直接只使用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超时仅在以下情况下有效:

  • 正在使用的线程在您指定的超时中显示的毫秒数处于Hibernate状态。为了克服这个问题,您可以为单独的测试创建一个单独的线程,以便您的线程(对于挂起的测试)Hibernate。但这可能不是您真正想要的。
  • 线程变得不可中断,然后在指定超时两倍后停止。

正如@aslakhellesoy在这里提到的

如果线程是不可中断的,超时将停止线程…

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

这使用了不推荐使用的Thread.stop()方法,但是对于Cucumber这样的测试工具来说,应该没问题。

参考编号343。

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

楚帅
2023-03-14

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

  1. webdriver.timeouts。隐式等待
  2. webdriver.wait.for。超时
  3. serenity.timeout

您还可以在

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

 类似资料:
  • 整体设计 图例说明: 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口。 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层之间的依赖关系,每一层都可以剥离上层被复用,其中,Service 和 Config 层为 API,其它各层均为 SPI。 图中绿色小块的为扩展接口,蓝色小块为实现类,图中只显示用于关联各层的实现类。

  • 当微服务处理业务逻辑时间过长,网关会报超时错误,默认等待时间是5秒。 可在网关指定spring.cloud.gateway.httpclient.response-timeout参数设置超时时间,单位毫秒 # 设置响应超时10秒 spring.cloud.gateway.httpclient.response-timeout=10000 更多配置参见:org.springframework.cl

  • <?php $http = HttpRequest::newSession(); $response = $http->timeout(3000, 1000) // 总时间不得超过3秒,连接时间不得超过1秒 ->get('https://www.baidu.com/'); $content = $response->body(); // 网页源码

  • 实现概要 koa2 搭建服务 MySQL作为数据库 mysql 5.7 版本 储存普通数据 存储session登录态数据 渲染 服务端渲染:ejs作为服务端渲染的模板引擎 前端渲染:用webpack2环境编译react.js动态渲染页面,使用ant-design框架 文件目录设计 demo源码 https://github.com/ChenShenhai/koa2-note/blob/master

  • 问题内容: Tkinter窗口的大小可以通过以下方法控制: 是否有等效的方法来控制Tkinter或ttk帧的大小? @Bryan:我将您的frame1.pack代码更改为以下代码: 我添加了此事件处理程序: 上面的事件处理程序检测到帧的宽度太大,但是无法防止大小增加。这是Tkinter的限制,还是我误解了您的解释? 问题答案: 没有单个魔术功能可以将帧强制为最小或固定大小。但是,您可以通过为框架指

  • 问题内容: 有时功能运作良好,有时却无法。 如何为此ajax请求设置超时?例如,如果时间为3秒,则显示错误。 问题是,ajax请求将冻结该块直到完成。如果服务器关闭了一段时间,它将永远不会结束。 问题答案: 请阅读 文档,这是一个涵盖的主题。 您可以通过访问选项的textStatus参数来查看抛出了哪种类型的错误。选项为“超时”,“错误”,“中止”和“ parsererror”。