基于CPU负载的Selenium测试超时方案可行性问询
基于CPU时间的Selenium Grid等待超时优化方案探讨
我们使用Selenium Grid在Chrome、Firefox等多浏览器中运行集成测试,但主机CPU负载升高后,测试会变得不稳定。现有等待语句:
WebDriverWait(browser, WAIT_TIME).until( EC.presence_of_element_located((By.CSS_SELECTOR, ".drawing-surface")) )
在低负载机器上完全足够,但运行大型测试套件时却远远不够。横向扩容、纵向升级或单纯增加超时时间这类常规方案都不理想。
由此质疑基于单调时钟的等待逻辑是否合理——既然系统可上报进程分配到的CPU时间,能否基于CPU负载动态调整超时?即不按单调时钟等待20秒,而是以浏览器OS进程累计获得20秒CPU时间作为超时阈值?
设想的实现流程
- 在Selenium等待元素时,启动独立线程监测当前测试对应浏览器进程的累计CPU时间
- 待解决问题:如何获取该浏览器进程的PID?
- 获知PID或进程名后,可通过
ps命令提取CPU时间数据
- 线程持续运行,直至浏览器进程累计获得N秒CPU时间
- 测试同时监听两个触发条件:
- 若元素先被找到,终止监测线程并继续执行后续测试
- 若CPU时间超时先触发,立即标记测试失败
当前核心疑问
- 如何精准获取当前测试对应的浏览器进程PID?
- 在Selenium Grid架构中,测试代码与浏览器是否运行在同一主机?若为跨网络通信,是否有现有机制可获取远程机器上浏览器进程的CPU时间,还是需要单独开发扩展?
本人对Selenium(Grid)、geckodriver/chromedriver、firefox-marionnette等技术了解有限,希望了解该方案的具体实现路径或等效替代方案,哪怕需要向相关开源项目提交PR,恳请提供技术建议。
内容的提问来源于stack exchange,提问作者Quint
相关产品推荐
相关产品推荐

