首页 > 解决方案 > 同一 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);
    }

标签: seleniumnunit-3.0

解决方案


我有同样的问题,但我设法整理了一个示例,其中 VS2019 + Selenium + Parallelism 确实有效,尽管我相信您可能会遇到一个限制(我会在结束)基于您的示例。

为了使它工作,我添加了一个 AssemblyInfo.cs 文件,其中包含您提到的两个属性:

[assembly: Parallelizable(ParallelScope.Children)]
[assembly: LevelOfParallelism(6)]

我测试了归因于类或 AssemblyInfo.cs 文件的“可并行化”,并且两者都有效。包括“LevelOfParallelism”是必需的——但在我的测试中,并行执行非 Selenium 单元测试不需要它。

我的模型涉及针对多个 WebDrivers 执行我的测试,我目前通过使用 [TestCaseSource] 或 [ValueSource] 属性将 IEnumerable 集合传递给每个测试来执行此操作。这允许我在每个测试中重用一个 WebDriver 实例,以减少整体执行时间(启动/关闭实例非常昂贵)并确保正确清理,但我观察到虽然测试是并行运行的,但每个 WebDriver实例一次只能执行一个测试。如果您在第二个测试中使用不同的 WebDriver 实例,它们将并行执行。


推荐阅读