Selenium Grid并行测试:为何并发数依赖Hub处理器数量?
问题
搭建基于Selenium Grid 4.7.2的并行测试系统,环境配置如下:
- 4台Windows Node节点,每台配备4个可用处理器,启动命令:
java -jar "C:\SeleniumGrid\selenium-server-4.7.2.jar" node --hub {hub-machine-url} --max-sessions 4 - Hub服务器最初为2个可用处理器的Windows机器,启动命令:
java -jar "C:\SeleniumGrid\selenium-server-4.7.2.jar" hub
运行测试套件时发现:仅能创建2个并发测试会话,其余14个处理器(4台Node×4核 - 2)处于空闲状态;更换为16核的Hub机器后,可同时运行16个测试用例(跑满所有Node的总容量)。所有节点均已成功连接Hub,请问为何并发测试用例数量取决于Hub机器的可用处理器数?
原因分析
这是Selenium Grid 4的默认配置限制导致的:
- Selenium Grid 4的Hub内部通过
sessionqueue线程池处理会话请求的调度与分配,该线程池的默认大小等于Hub机器的可用处理器数(由Runtime.getRuntime().availableProcessors()自动获取) - 当Hub为2核时,线程池最多同时处理2个会话请求,即使Node节点有足够的空闲容量(4×4=16),也无法分配更多并发会话
- 更换为16核Hub后,线程池默认大小变为16,刚好匹配所有Node的总并发容量,因此可以跑满16个测试用例
解决方案
启动Hub时手动指定--sessionqueue-thread-pool-size参数,设置为需要的最大并发数(比如匹配所有Node的总max-sessions之和16),即可脱离Hub处理器数的限制:
java -jar "C:\SeleniumGrid\selenium-server-4.7.2.jar" hub --sessionqueue-thread-pool-size 16
说明:该参数是Selenium Grid 4新增的配置项,用于控制Hub处理会话请求的并发能力,默认值绑定Hub的可用处理器数,这是与Grid 3的核心差异之一。
内容的提问来源于stack exchange,提问作者Ashik
相关产品推荐
相关产品推荐

