【发布时间】:2019-12-29 06:09:06
【问题描述】:
在修改测试代码(C#、Selenium + Specflow VS 2017 项目)以使用 selenium 网格运行并在我的机器上设置 selenium 服务器后,测试成功并行运行。
当我关闭 selenium 服务器并将测试代码修改回只使用 webDriver 而不是 RemoteWebDriver 时,我很困惑地看到测试仍然并行运行......但是,我没有删除以下代码行来自 AssemblyInfo.cs 文件:
[assembly: Parallelizable(ParallelScope.Fixtures)]
一旦上面的代码行被注释掉,测试就会再次串行运行。
问题 1:Selenium 和 Specflow 都有自己的工具(不仅仅是 selenium)来允许并行运行测试,这是否正确?这是在花时间阅读试图弄清楚为什么/如何发生这种魔法之后得出的结论 (specflow parallel)。在出现这种意外行为之前,我还没有阅读任何有关 specflow 并行工具的信息(总是硒网格)。
问题 2:哪个最好用?我猜想虽然与 Selenium 服务器并行工具 (Selenium Grid) 并行运行涉及更多,但从长远来看,Selenium Grid 可能是最好的。看起来像 Selenium Grid,您可能可以同时运行更多线程,因为您可以创建任意数量的节点,并且每个节点可以处理多个线程(浏览器)。
编辑 JimEvans 评论:
嗨,吉姆·埃文。在测试世界中阅读信息时,我经常看到你的名字。非常感谢提供信息。您在下面的陈述重定向了我的阅读和搜索信息。在阅读了更多关于您所说的内容之后,这就是我现在所理解的。我想知道这离正确有多近……尤其是声明#4。
- AssemblyInfo.cs 中的语句 [assembly: ... ] 被 NUnit 测试框架读取和理解。如果 NUnit 不存在,则语句 [assembly: ...] 将不存在。
- Specflow 和 Selenium 都可以放置在(使用)不同的测试框架之上;其中之一是 NUnit。 Specflow 和 Selenium 都致力于确保它们的库(基于 NUnit 的代码)不会阻止使用 NUnits 并行功能。
- 看来,specflow 可能对线程设置了一些限制。看起来 Specflow 架构可能最适合并行运行功能(fixtures ... ParallelScope.Fixtures),但不允许功能内的场景并行运行(ParallelScope.All 可能在 Specflow 中不起作用,但 需要进一步研究)。
- 这是一个正确的陈述吗:Selenium Grid 将 NUnit 并行执行提升到了一个新的水平……它允许在多个节点上运行测试,从而使其更加强大……这些节点要么在一台机器上或分散在多台机器上(获得更多处理能力)。我猜如果没有 Selenium Grid,由于硬件限制,NUnit 只能创建这么多线程。 Selenium Grid 作为一种可用空间管理器(大部分时间跨多台机器)用于运行测试。 Selenium webdriver 与浏览器和浏览器交互(浏览器的打开和关闭)密切相关;每个线程一个浏览器; NUnit 控制和管理线程; Selenium Grid 知道有多少资源(处理器和机器)可用于运行允许 NUnit 不断推出新线程的线程,然后 selenium webdriver 可以在该线程上打开 Web 浏览器并开始测试。
在了解 Selenium 没有可并行执行的特殊代码后,我开始对下图中的信息进行不同的解释(这是描述 Selenium Grid 的一个很好的陈述)。
【问题讨论】:
-
Selenium 没有特殊的代码可以并行执行代码。它完全是您的测试运行程序和/或执行框架的功能。
-
@JimEvans,感谢您的反馈。我希望所做的更正更准确地描述了 Selenium、Selenium Grid、Specflow 和 NUnit 之间的联系。
-
第 4 点 - Selenium Hub 只是充当一种分发器。“Selenium Grid 知道有多少资源(处理器和机器)” - Selenium 集线器/节点不知道机器上的处理器。 Selenium Hub 知道注册了特定功能的节点(firefox+linux/firefox+windows 等)github.com/SeleniumHQ/selenium/wiki/Grid2 (github.com/SeleniumHQ/selenium/wiki/Grid2#optional-parameters) 检查'-maxSession'
标签: selenium parallel-processing specflow selenium-grid