在并行任务期间跟踪失效的 WebDriver 实例

2024-01-04

我看到一些使用 Selenium WebDriver 运行并行嵌套循环 Web 压力测试的死实例怪异现象,简单的例子是,比如说,点击 300 个独特的页面,每个页面有 100 次展示。

我“成功”获得 4 - 8 个 WebDriver 实例ThreadLocal<FirefoxWebDriver>每个任务线程隔离它们,并在 ParallelOptions 实例上使用 MaxDegreeOfParallelism 来限制线程。我仅对外部循环(页面集合)进行分区和并行化,并检查.IsValueCreated on the ThreadLocal<>容器内部每个分区的“长时间运行任务”方法的开始。为了便于稍后清理,我将每个新实例添加到以线程 id 为键控的 ConcurrentDictionary 中。

无论我使用什么并行化或分区策略,WebDriver 实例偶尔都会执行以下操作之一:

  • 启动但从不显示 URL 或运行展示
  • 启动,运行任意数量的展示次数,然后在某个时刻闲置

当其中任何一种发生时,并行循环最终似乎注意到一个线程没有做任何事情,并且它生成了一个新的分区。如果n是允许的线程数,这会导致n生产线程只有大约 50-60% 的时间。

最后清理工作仍然很好;可能有 2n 个或更多打开的浏览器,但高效和低效的浏览器都会被清理。

有没有办法监视这些无用的 WebDriver 实例,并且 a) 立即清除它们,再加上 b) 让并行循环立即替换任务段,而不是像现在那样滞后几分钟?


我也有类似的问题。事实证明,WebDriver 没有查找开放端口的最佳方法。如上所述here https://groups.google.com/forum/?fromgroups#!topic/selenium-developers/nYFkIgXQcbw它会在端口上获得系统范围的锁定,找到开放的端口,然后启动实例。这可能会导致您尝试启动的其他实例缺乏端口。

我通过直接在委托中指定随机端口号来解决这个问题ThreadLocal<IWebDriver>像这样:

        var ports = new List<int>();
        var rand = new Random((int)DateTime.Now.Ticks & 0x0000FFFF);

        var driver = new ThreadLocal<IWebDriver>(() =>
        {
            var profile = new FirefoxProfile();
            var port = rand.Next(50) + 7050;
            while(ports.Contains(port) && ports.Count != 50) port = rand.Next(50) + 7050;
            profile.Port = port;
            ports.Add(port);
            return new FirefoxDriver(profile);
        });

这对我来说效果相当一致,尽管如果您最终使用了列表中未解决的所有 50 个,则会出现问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在并行任务期间跟踪失效的 WebDriver 实例 的相关文章

  • 语言混合:模型和视图

    考虑开发一个应用程序 其中模型将使用 C 使用 Boost 编写 视图将使用 Objective C 使用 Cocoa Touch 编写 哪里有一些示例展示了如何集成 C 和 Objective C 来开发 iPhone 应用程序 直接从源
  • 实体框架中的重复键异常?

    我试图捕获当我将具有给定用户名的现有用户插入数据库时 引发的异常 正如标题所说 我正在使用 EF 当我尝试将用户插入数据库时 引发的唯一异常是 UpdateException 如何提取此异常以识别其是否是重复异常或其他异常 catch Up
  • C/C++ 中随机数生成器的实现[重复]

    这个问题在这里已经有答案了 我对 C 中随机数生成器的实现有点困惑 它也与 C 中的明显不同 如果我理解正确 对 srand seed 的调用会以某种方式初始化可通过 rand 访问的隐藏变量 种子 该变量又将函数指向预先生成的序列 例如例
  • 在 MVC 类上创建主键字段

    我是 MVC 和 C 新手 我只是偶然发现它并发现它很有趣 我遇到了一个不允许我继续的问题 这是我的代码 using System using System Collections Generic using System Linq usi
  • C++:获取注册表值仅给出第一个字符[重复]

    这个问题在这里已经有答案了 我试图从注册表中获取字符串值 但我只得到第一个字母 HKEY hKey char gamePath MAX PATH if RegOpenKeyEx HKEY CURRENT USER L Software Bl
  • C# ConfigurationManager 从 app.config 检索错误的连接字符串

    我有一个简单的 WinForms 应用程序 它最终将成为一个游戏 现在 我正在研究它的数据访问层 但遇到了障碍 我创建了一个单独的项目 名为DataAccess在其中 我创建了一个本地 mdfSQL Server 数据库文件 我还创建了一个
  • 将语句插入 SQL Server 数据库

    最近几天我试图找到这个错误 但没有成功 我正在尝试在数据库中插入一个新行 一切都很顺利 没有错误 也没有程序崩溃 My INSERT声明如下 INSERT INTO Polozaj Znesek Uporabnik Cas Kupec Po
  • 当我尝试使用 AVX 功能时,Clang 生成错误

    我使用的是 Windows 10 使用 Clang 版本 5 最近安装 当我编译以下内容时 define AVX define AVX2 include
  • 如何在 C++ 的子目录中创建文件?

    这是我的代码 如何在子目录联系人中创建文件 每次创建该文件时 它都会出现在与我的程序相同的目录中 int main ofstream myfile contacts myfile open a myfile close 在构造函数中指定完整
  • C++ 模板参数类型推断

    我有一个这样的C 模板 template
  • Type_traits *_v 变量模板实用程序顺序无法编译

    看过了这个答案 https stackoverflow com a 31763111 7151494 我试图想出一个变量模板从中获取代码的实用程序 template
  • 在 C++ 中处理音频缓冲区时,如何执行从 float -> double -> float 的转换

    我目前正在开发一个应用程序 其中音频样本帧在以下回调中进行处理 void Eav07AudioProcessor processBlock AudioSampleBuffer buffer for int channel 0 channel
  • IEnumerable.比带中断的 for 循环更快吗?

    我们的代码打开表单时遇到了一些缓慢的情况 这可能是由于for循环与break这需要很长时间才能执行 我把它切换到IEnumerable Any 并看到表格很快打开 我现在试图弄清楚是否单独进行此更改会提高性能 或者是否正在访问Product
  • fscanf 和 EOF 中的否定扫描集

    我的文件中有一个以逗号分隔的字符串列表 姓名 1 姓名 2 姓名 3 我想跳过所有逗号来阅读这些名字 我写了以下循环 while true if fscanf file my string 1 break 然而 它总是比预期多执行一次 给定
  • 检索 Autofac 容器以解析服务

    在 C WindowForms 应用程序中 我启动一个 OWIN WebApp 它创建另一个类 Erp 的单例实例 public partial class Engine Form const string url http 8080 49
  • 如何在Linux上构建GLFW3项目?

    我已经使用 cmake 和 make 编译了 glfw3 和包含的示例 没有出现任何问题 开始编写我的第一个项目 作为 opengl 和 glfw 的新手 并且对 C 和 CMake 没有经验 我正在努力理解示例构建文件 甚至要链接哪些库和
  • 获取大于某个数字的元素个数

    我正在尝试解决以下问题 数字被插入到容器中 每次插入数字时 我需要知道容器中有多少元素大于或等于当前插入的数字 我相信这两个操作都可以以对数复杂度完成 我的问题 C 库中有标准容器可以解决这个问题吗 我知道std multiset可以在对数
  • Crypto++ 和压缩 EC 密钥

    如何在 Crypto 中生成压缩的 ECDSA 密钥 AutoSeededRandomPool prng ECDSA
  • 如何设置 Swashbuckle 与 Microsoft.AspNetCore.Mvc.Versioning

    我们有asp net core webapi 我们添加了Microsoft AspNetCore Mvc Versioning and Swashbuckle拥有招摇的用户界面 我们将控制器指定为 ApiVersion 1 0 Route
  • XmlDocument Save 使文件保持打开状态

    我有一个简单的 C 函数 可以创建一个基本的 XML 文件并保存 private void CreateXMlFile string Filename string Name string Company XmlDocument doc n

随机推荐

  • 如何查看 Javascript 对象的原型链?

    给出以下代码 function a function b b prototype new a var b1 new b 我们可以保持这样a已添加到b的原型链 伟大的 并且 以下所有内容均属实 b1 instanceof b b1 insta
  • 当我用 @login_required 装饰视图时,如何匹配 ?next=/nextpage/ 值?

    当我使用 login required 装饰 django 中的视图时 如何匹配 next nextpage 值 它不以 标准方式 工作 在 url py 中通过正则表达式匹配 为什么它不按标准方式工作 在 urls py 中 r logi
  • 提高稀疏矩阵的能力

    我有一个 10001 行 10001 列 有很多 0 的稀疏矩阵 我正在尝试提高这个稀疏矩阵的功效 i e A 1 1 1 0 AS sparse csr matrix A AS def matrixMul AS n if n lt 1 r
  • ARKit可以显示WKWebview吗?

    尝试用 ARKit 来显示 WKWebView 但我得到的只是一个显示背景但没有前景的页面 不过页面可以滚动 我附上了苹果网页的截图 这是代码 DispatchQueue main async let webView WKWebView f
  • Python 中的 2D 网格数据可视化

    我需要可视化一些数据 它是基本的二维网格 其中每个单元格都有浮点值 我知道如何在 OpenCV 中为值分配颜色并绘制网格 但这里的要点是 值太多了 所以几乎不可能做到这一点 我正在寻找一些可以使用渐变的方法 例如 值 5 0 将表示为蓝色
  • React-bootstrap-table 标题列未对齐

    我有以下内容 Node jsx import React from react import Col Row Tab Tabs from react bootstrap import Alerts from Alerts import De
  • 如何在反应中将State设置为新数据?

    我刚刚开始研究 ReactJS 并尝试从 API 检索数据 constructor super this state data false this nextProps axios get https jsonplaceholder typ
  • GUID 与 INT IDENTITY [重复]

    这个问题在这里已经有答案了 可能的重复 您觉得您的主键怎么样 https stackoverflow com questions 404040 how do you like your primary keys 我知道使用 GUID 的好处
  • 在 CSS3 变量定义中使用 SCSS 变量不起作用?

    我正在研究如何将样式应用于客户端项目中的可重用 Angular 组件 看主题 样式 Angular 2 可重用组件库 https stackoverflow com questions 44571437 theme style angula
  • 用于查找两个列表之间差异的库函数 - OCaml

    有没有库函数可以找List1 minus elements that appear in List2 我一直在谷歌上搜索并没有发现太多 似乎没有too自己写的很简单 我编写了一个函数来从列表中删除特定元素 但这要简单得多 let rec d
  • SQL 空间连接

    我有两张表 一张以点作为地理 另一张以多边形作为地理 我可以通过以下查询找到单个点落在哪个多边形 从点表中 DECLARE p geography select p PointGeom from dbo PointTable where I
  • Google Cloud SDK 与 Google Cloud 客户端库

    它们有何不同 每个的用例是什么 我是否可以专门使用一个 例如 如果我更熟悉 NET 我可以使用客户端库 适用于 NET 完成使用 python 和 SDK 可以完成的所有操作 谷歌云SDKhttps cloud google com sdk
  • Haskell 中的简单字数统计

    这是我的第一个 haskell 程序 wordCount 接受单词列表并返回一个元组 其中每个不区分大小写的单词与其使用计数配对 对于改进代码可读性或性能有什么建议吗 import List import Char uniqueCountI
  • ffmpeg 无法识别 Quicktime DV 编解码器

    我在 Mac OSX10 5 上获得了很好的建议 将修改后的 MXF 媒体结构转换为 h264 同时保留多轨音频 但我无法让 ffmpeg 在 Windows 环境中工作 See 这一页 https stackoverflow com qu
  • 如何在谷歌地图多边形内绘制直线

    我使用创建了谷歌地图google map javascript API V3 我正在绘制邮政编码多边形的数量 根据某些条件 多边形具有不同的颜色 现在我想根据某些标准在某些多边形内绘制直线 散列标记 我们怎样才能做到呢 下面是我为绘制多边形
  • PyDev 无法在 Eclipse 中工作

    我最近不得不重置我的 PC 重新启动 Eclipse 后出现此错误 id org python pydev editor PythonEditor 没有编辑器描述符 我尝试寻找解决方案 但其他人喜欢here https stackoverf
  • 创建新的 Google 日历

    我想使用 Android 应用程序在现有帐户上创建新的 Google 日历 例如this http sourceforge net projects lngooglecalsync Windows 应用程序确实如此 该应用程序使用 Gdat
  • 如何更改 :focus 上文本区域的边框颜色

    我想改变焦点上 TEXTAREA 的边框颜色 但我的代码似乎无法正常工作 代码已开启fiddle http fiddle jshell net ffS4S
  • PHP cURL、POST JSON

    我需要发布以下 JSON 代码 但由于某种原因它不起作用 下面是我的代码 fieldString 395609399 the curl request processor function processCurlJsonrequest UR
  • 在并行任务期间跟踪失效的 WebDriver 实例

    我看到一些使用 Selenium WebDriver 运行并行嵌套循环 Web 压力测试的死实例怪异现象 简单的例子是 比如说 点击 300 个独特的页面 每个页面有 100 次展示 我 成功 获得 4 8 个 WebDriver 实例Th