selenium - 同一 TestFixture 中的 NUnit Selenium 测试不能并行运行
问题描述
我对 Visual Studio 2019 中的 Selenium 测试的 NUnit 测试设置(.NET Core 3.1 和 NUnit 3)有疑问。
在 AssemblyInfo.cs 中,我添加了 2 行。
[程序集:可并行化(ParallelScope.Children)]
[程序集:LevelOfParallelism(4)]
代码很简单。在 SetUp() 中初始化驱动程序。但是,当使用测试资源管理器运行 2 个测试时,会打开 2 个 chrome 窗口。但它们没有并行运行(仍然无法使用 Setup、OneTimeSetup 属性)
如果我直接在TestMethod中初始化驱动就可以了,但是就是骗码。
这是否意味着同一 TestFixture 中的 NUnit Selenium 测试不能并行运行?
谢谢,雷
[TestFixture]
public class Account : BaseTest
{
[SetUp]
public void Setup()
{
_driver = new ChromeDriver();
_driver.Manage().Window.Maximize();
}
[Test]
[Category("UAT")]
[Order(1)]
public void Test1()
{
_driver.Navigate().GoToUrl("https://www.msn.com");
Assert.AreEqual("https://www.msn.com/", _driver.Url);
}
[Test]
[Category("UAT")]
[Order(0)]
public void Test2()
{
_driver.Navigate().GoToUrl("https://www.google.com");
Assert.AreEqual("https://www.google.com/", _driver.Url);
}
解决方案
我有同样的问题,但我设法整理了一个示例,其中 VS2019 + Selenium + Parallelism 确实有效,尽管我相信您可能会遇到一个限制(我会在结束)基于您的示例。
为了使它工作,我添加了一个 AssemblyInfo.cs 文件,其中包含您提到的两个属性:
[assembly: Parallelizable(ParallelScope.Children)]
[assembly: LevelOfParallelism(6)]
我测试了归因于类或 AssemblyInfo.cs 文件的“可并行化”,并且两者都有效。包括“LevelOfParallelism”是必需的——但在我的测试中,并行执行非 Selenium 单元测试不需要它。
我的模型涉及针对多个 WebDrivers 执行我的测试,我目前通过使用 [TestCaseSource] 或 [ValueSource] 属性将 IEnumerable 集合传递给每个测试来执行此操作。这允许我在每个测试中重用一个 WebDriver 实例,以减少整体执行时间(启动/关闭实例非常昂贵)并确保正确清理,但我观察到虽然测试是并行运行的,但每个 WebDriver实例一次只能执行一个测试。如果您在第二个测试中使用不同的 WebDriver 实例,它们将并行执行。
推荐阅读
- php - 从数据库特定列中的数据库行条目创建数组并用于 foreach 循环
- python - 填充numpy数组的向量方式
- graphql - 如何使用特定上下文查询 Apollo GraphQL 服务器?
- c++ - 模块:AHBot(没有用于初始化“WorldSession”的匹配构造函数)
- c# - 我们可以在 asp.net 3.5 网站中全局设置 ScriptManager 控件的默认属性值吗?
- css - 选择框选项仅在 chrome 中获取滚动条
- php - URL 中的变量
- testing - VBA 抓取 div 元素
- django - 空块不适用于循环内的 endif
- excel - 如何在vba中将文本动态设置为texbox?