GKE集群Jenkins触发Selenium测试超时及异常求助
排查与解决指引
环境信息
- Chrome 镜像:
node-chrome:123.0.6312.86-chromedriver-123.0.6312.86-grid-4.19.1-20240402 - Selenium Hub 镜像:
selenium/hub:4.19.1-20240402 - .NET 版本:6
- 运行环境:GKE 集群并行节点
问题现象
自周日起测试间歇性失败,多数在截图操作时抛出如下异常:
Unable to execute request for an existing session: java.util.concurrent.TimeoutException
部分测试出现加载随机HTML元素而非目标应用页面的情况,已阻塞回归测试周期。
具体排查与解决步骤
一、核查GKE集群资源与Selenium超时配置
- 检查节点资源使用率:截图操作对Chrome的CPU、内存消耗较高,并行测试时若节点资源不足会导致进程卡顿触发超时。通过GKE控制台查看节点CPU/内存负载,若存在瓶颈,临时扩容节点或降低测试并行度。
- 调整Selenium超时参数:
- Hub启动时增加
--session-timeout参数(默认300秒),例如设置为--session-timeout 600延长会话超时时间 - Node侧同步调整
--session-timeout,同时检查--idle-timeout避免空闲会话被过早回收;可结合--override-max-sessions合理控制单节点并发会话数 - .NET测试代码中调整WebDriver超时:
driver.Manage().Timeouts().PageLoad = TimeSpan.FromSeconds(60); driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); driver.Manage().Timeouts().AsynchronousJavaScript = TimeSpan.FromSeconds(30);
- Hub启动时增加
二、优化Chrome实例性能与镜像稳定性
- 重新拉取镜像避免缓存损坏:
docker pull selenium/hub:4.19.1-20240402 docker pull selenium/node-chrome:123.0.6312.86-chromedriver-123.0.6312.86-grid-4.19.1-20240402 - 添加Chrome启动参数减少资源占用:在Node启动时配置以下参数,解决容器内资源限制问题:
其中--arguments="--disable-extensions --disable-gpu --no-sandbox --disable-dev-shm-usage --disable-software-rasterizer --window-size=1920,1080"--disable-dev-shm-usage可规避GKE容器中/dev/shm空间不足导致的Chrome崩溃。
三、规范测试代码与会话管理
- 确保测试结束后彻底销毁会话:在.NET测试的
TearDown方法中调用driver.Quit()而非driver.Close(),避免残留会话占用资源。 - 截图前增加显式等待:确保页面关键元素加载完成后再执行截图,避免页面未渲染完全引发超时:
WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20)); wait.Until(d => d.FindElement(By.Id("page-loaded-marker")).Displayed); var screenshot = ((ITakesScreenshot)driver).GetScreenshot(); - 禁用会话复用:确保每个测试用例使用独立的WebDriver会话,避免跨测试复用导致的状态混乱。
四、排查GKE网络与DNS问题
- 测试集群内部网络连通性:在Hub和Node容器内执行
ping或traceroute,检查节点间网络延迟,若延迟过高,排查GKE集群的区域分布、VPC网络策略。 - 验证应用域名解析:在Node容器内执行
nslookup测试目标应用域名,确认解析结果正确,排除DNS劫持或解析异常导致的页面加载错误。
内容的提问来源于stack exchange,提问作者kvm006
相关产品推荐
相关产品推荐

