我看到一些使用 Selenium WebDriver 运行并行嵌套循环 Web 压力测试的死实例怪异,例如,点击 300 个独特页面,每个页面有 100 次展示。
我“成功地”让 4 - 8 个 WebDriver 实例使用 aThreadLocal<FirefoxWebDriver>
来隔离每个任务线程,并在 ParallelOptions 实例上使用 MaxDegreeOfParallelism 来限制线程。我只对外部循环(页面集合)进行分区和并行化,并检查每个分区的“长时间运行任务”方法开头.IsValueCreated
的ThreadLocal<>
容器。为了便于稍后进行清理,我将每个新实例添加到由线程 ID 键入的 ConcurrentDictionary 中。
无论我使用何种并行化或分区策略,WebDriver 实例都会偶尔执行以下操作之一:
- 启动但从不显示 URL 或进行展示
- 启动,运行任意数量的展示次数,然后在某个时候闲置
当其中任何一个发生时,并行循环最终似乎会注意到一个线程没有做任何事情,它会产生一个新的分区。如果n是允许的线程数,这将导致n 个生产线程只有大约 50-60% 的时间。
清理最后仍然可以正常工作;可能有 2n 个或更多打开的浏览器,但有效率的和无效率的都会被清理干净。
有没有办法监视这些无用的 WebDriver 实例,并且 a) 立即清除它们,加上 b) 让并行循环立即替换任务段,而不是像现在通常那样滞后几分钟?