Jenkins上Robot Framework测试出现WebDriverException问题排查
关于Robot Framework在Jenkins运行14个用例后抛出WebDriverException的排查思路
这种问题我之前在CI环境里踩过好几次坑,结合你给出的错误信息(Driver info: driver.version: unknown),大概率是以下几个原因导致的,咱们一步步分析:
1. WebDriver实例未正确回收,导致资源耗尽
本地运行时,浏览器的关闭机制可能因为桌面环境的特性能正常工作,但Jenkins是无头/无桌面的Linux环境,很容易出现驱动进程泄漏:
- 检查你的用例
Teardown步骤,是不是每个用例结束后都确保调用了Close Browser或Quit Browser?尤其是用例失败时,有没有因为异常跳过了清理步骤? - 可以在Jenkins节点上跑用例时,用
ps aux | grep chrome(或对应浏览器进程名)看看,是不是每跑完一个用例,浏览器进程都被正常杀死了。如果堆积了十几个进程,那就是泄漏无疑了。
2. Jenkins节点资源不足
你的本地机器配置可能比较充裕,但Jenkins运行的Linux节点内存/CPU可能不够:
- 当运行到第14个用例时,多个浏览器实例占用的内存可能把节点的可用内存榨干了,导致新的WebDriver实例无法启动,直接抛出驱动版本未知的错误。
- 可以在Jenkins任务里加个前置步骤,用
free -h、top -b -n 1输出节点的资源状态,对比用例运行前后的内存变化,就能验证是不是资源不够的问题。
3. 浏览器与WebDriver版本不兼容
虽然本地运行正常,但Jenkins环境的浏览器版本和WebDriver版本可能不匹配:
- 比如你本地Chrome是114版本,对应ChromeDriver114,但Jenkins上的Chrome自动更到了116,驱动还是旧的114,这种版本不兼容可能不会立刻报错,跑几个用例后才触发进程崩溃。
- 登录Jenkins节点,分别查看浏览器版本(比如
google-chrome --version)和WebDriver版本(比如chromedriver --version),确保两者大版本一致。
4. 无头模式的特殊配置缺失
如果Jenkins上用的是无头浏览器模式,Linux环境下有几个关键参数没配置的话,很容易出问题:
- Linux的
/dev/shm分区默认很小,无头Chrome默认会用这个分区存储临时数据,跑多个实例后会直接耗尽,导致浏览器崩溃。 - 建议在启动浏览器时加上这些参数:
Open Browser ${URL} Chrome options=add_argument("--no-sandbox");add_argument("--disable-dev-shm-usage");add_argument("--headless=new")
关于是否需要拆分大型UI测试用例?
拆分大型用例是推荐的实践,但它不是解决当前问题的直接方案,不过能从根源上降低资源压力:
- 把一个包含几十步的大拆成几个小用例,每个用例专注一个功能点,不仅更容易维护,还能减少单个用例占用的资源。
- 另外可以考虑用套件级别的Setup/Teardown,让整个测试套件共用一个浏览器实例,减少重复启动/关闭浏览器的开销,但一定要确保套件结束时正确销毁驱动实例,避免泄漏。
内容的提问来源于stack exchange,提问作者CuriousBug
相关产品推荐
相关产品推荐

