容器内并行运行的selenium-java测试用例随机失败的可能原因有哪些?
Selenium 3.14.0 容器环境4并行用例随机失败的可能原因
- 资源调度与限制问题
- 容器Cgroup资源限制未正确配置,即使标注4核12G配置,实际可调度CPU、内存阈值被压低,触发测试进程OOM终止、CPU调度超时
- 浏览器实例资源抢占,单Chrome/Firefox实例默认占用0.81.2核CPU、500M1G内存,4并行场景下叠加测试进程本身的资源消耗,容易出现资源不足导致的元素加载超时、浏览器无响应
- Selenium版本与组件兼容性缺陷
- Selenium 3.14.0 内置的Grid会话调度逻辑存在已知并发Bug,高并行场景下偶发会话分配冲突、空闲会话被误销毁的问题
- 浏览器驱动(ChromeDriver/GeckoDriver)与浏览器大版本不匹配,并行建立会话时概率出现握手失败
- 测试用例非线程安全
- 测试代码存在公共资源共享逻辑,比如共用同一个WebDriver实例、用静态变量存储测试上下文、操作同一个测试账号/同一行测试数据,导致用例执行过程中互相干扰
- 多个用例同时写入同一份日志、生成同名截图/临时文件,触发IO冲突导致用例异常终止
- 容器环境适配问题
- 浏览器启动参数未适配容器环境,比如Chrome未配置
--disable-dev-shm-usage参数时,会占用容器默认较小的/dev/shm共享内存分区,并行场景下内存耗尽触发浏览器随机崩溃 - Xvfb虚拟显示服务配置过低,多浏览器同时渲染时缓冲区不足,导致元素定位、页面截图操作随机失败
- 容器端口池配置不足,4个并行Selenium会话需要占用独立的通信端口,端口耗尽时会出现会话连接超时
- 浏览器启动参数未适配容器环境,比如Chrome未配置
- 测试等待策略不合理
- 用例使用固定硬等待,或者显式/隐式等待阈值设置过短,并行场景下资源抢占导致页面加载速度变慢,超时阈值小于实际加载时间就会触发元素未找到的错误
内容的提问来源于stack exchange,提问作者Juhi Sehgal
相关产品推荐
相关产品推荐

