首页 > 解决方案 > 停止特定测试并行运行,但只能相互运行

问题描述

我正在使用 NUnit 在 Selenium 中编写测试。我在 Firefox、Chrome 和 IE 中运行测试。像这样:

    [TestFixture(typeof(ChromeDriver))]
    [TestFixture(typeof(FirefoxDriver))]
    [TestFixture(typeof(InternetExplorerDriver))]
    [Parallelizable]   
    class ProgramTests<TWebDriver> where TWebDriver : IWebDriver, new()
    { 
        [tests in here] 
    }

我遇到的问题是我的一项测试更改了 Web 实例外部的一些选项。这意味着如果此测试在 IE 和 Chrome 中运行然后开始测试,一个人可以更改设置,而另一个人正在检查它们,从而弄乱了测试。

如果我使用 NonParallelizable 属性,则测试将在所有并行测试完成后一一执行。

有什么方法可以使测试并行化,但不能彼此并行?

标签: c#seleniumnunit

解决方案


[Parallelizable]是 的简写[Parallelizable(ParallelScope.Self)]

当您在 a 上使用它时,TestFixture这意味着该夹具可以与其他夹具并行运行。如果夹具被参数化,就像你的那样,每个驱动程序的实例可以彼此并行运行,也可以与任何其他夹具一起运行。夹具下的测试方法默认为不可并行化。

为了使测试方法可并行化,您可以在每个方法上使用单独的属性,或者您可以在夹具级别指定并行化范围。在 上TestFixture,您有以下选项。

  • [Parallelizable(ParallelScope.Self)]如上所述工作。

  • [Parallelizable(ParallelScope.Children)]导致夹具不可并行,但允许所有测试彼此并行运行。

  • [Parallelizable(ParallelScope.All)]允许夹具和测试方法并行运行。

在决定走哪条路时,重要的是要记住,这ParallelizableAttribute并不能使您的测试能够并行运行,它只是向 NUnit保证以这种方式运行它们是可以的。

特别是,通常不可能并行运行使用相同 Selenium 驱动程序的测试用例,因为每个测试都会以令其他正在运行的测试吃惊的方式改变驱动程序的状态!


推荐阅读