Serenity BDD Cucumber失败测试退出超时过长 配置问题咨询
Serenity BDD + Selenium Hub 长超时问题解答
可调整超时时长的Serenity配置参数
1200秒(20分钟)的异常等待时长不是硬编码值,可通过以下配置项调整,所有参数均支持在serenity.conf配置文件、系统环境变量、命令行启动参数中传入,时间单位均为毫秒:
webdriver.timeouts.implicitlywait:Selenium全局隐式等待超时,建议生产配置设为0(关闭全局隐式等待,统一用显式等待控制等待逻辑),若该参数被误设为1200000会直接触发20分钟等待serenity.wait.timeout:Serenity内置显式等待的默认超时,常规默认值为5000,自定义配置过大时会拉长异常判定等待时长serenity.page.fragment.timeout:页面对象/页面片段加载校验超时,net.thucydides.core.pages.WrongPageError触发后的重试校验逻辑直接绑定该参数,默认值为10000,若被修改为1200000会出现抛错前等满20分钟的现象webdriver.capabilities.timeouts.scriptTimeout:页面JS执行超时,Grid场景下前端脚本挂死时会等待该时长才抛出终止错误serenity.hub.timeout:Selenium Hub连接专属超时,控制节点失联时的会话回收等待时长,默认值为300000
Selenium Hub环境下触发该异常长耗时的已知场景
在Selenium Hub(Selenium Grid)架构下运行Serenity用例时,有几个被广泛复现的已知问题会触发异常后长耗时退出:
- 节点假死未被Hub感知:
WrongPageError触发后Serenity会自动执行页面状态校验、截图、拉取页面源码三个后置操作,如果对应浏览器节点已经出现进程崩溃、网络断连但Hub未标记节点离线,这三个操作会依次等待满配置的超时时间才返回连接失败,多个超时累加后很容易达到1200秒量级 - 版本不兼容导致会话回收失效:当Serenity版本与Selenium Hub版本跨度超过2个大版本(例如Serenity 3.x搭配4.6以前版本的Selenium Grid),Grid的异常会话销毁逻辑存在已知bug,用例抛错后不会主动释放会话,会等到Grid默认的会话最大存活时长1200秒才强制回收,这段等待时间会被Serenity全额计入测试步骤耗时
- 全局隐式等待冲突:如果全局开启了长时长隐式等待,
WrongPageError触发时Serenity做页面合法性校验的元素探测逻辑会被隐式等待阻塞,即便已经判定页面不匹配,也会等满隐式等待时长才抛出最终异常,Grid环境下存在网络代理层时该等待无法被中途中断,会等满全量配置时长 - Grid录制功能IO阻塞:如果开启了Grid的测试过程视频录制功能,4.5以前版本的Grid在用例抛错时会同步等待视频切片写入完成才返回会话状态,当节点磁盘IO性能不足时,写入阻塞的时间会被计入测试步骤耗时,表现为异常退出耗时异常偏长
内容的提问来源于stack exchange,提问作者mactwixs
相关产品推荐
相关产品推荐

