Selenium C#/ NUnit 3.12.0未并行运行测试

问题描述 投票:0回答:2

我正在Visual Studio Enterprise 2019 16.3.9版/“测试资源管理器”窗口中执行测试。我的架构是2.80Ghz(4 CPU)的Intel(R)CoreTM i7-7600 CPU,〜2.9Ghz这是下面的伪Selenium C#代码:

[TestFixture]
internal class TestClass{

    [OneTimeSetUp]
    public void OneTimeSetUp()
    {
       initializeExtentReport()
    }

    [SetUp]
    public void Setup()
    {
       initializeChromebBrowser();
    }

    [Test]
    public void NavigatoToGmail()
    {
        bool isGmailAccessible = GoToUrl("https://www.google.com/");
        Assert.True(isGmailAccessible);
    }

    [Test]
    public void NavigatoToMicrosoft()
    {
        bool isMicrosoftAccessible = GoToUrl("https://www.microsoft.com/");
        Assert.True(isMicrosoftAccessible);
    }


    [Test]
    public void NavigatoToYahoo()
    {
        bool isYahooAccessible = GoToUrl("https://www.yahoo.com/");
        Assert.True(isYahooAccessible);
    }

    [TearDown]
    public void TearDOwn()
    {
        CloseBrowser();
    }

    [OneTimeTearDown]
    public void OneTimeTearDown()
    {
        FinishExtentReport();
    }

所以这是我已经尝试过的,但是没有用

  1. [Parallelizable(ParallelScope.Children)]添加到类中,并将[Parallelizable(ParallelScope.Self)]属性添加到每个测试方法中。结果-3个浏览器实例打开而没有其他操作。没有URL导航,什么也没有。

  2. [Parallelizable(ParallelScope.All)]添加到类中,并将[Parallelizable(ParallelScope.Self)]添加到每个测试方法中。结果-3个浏览器实例打开。仅执行最后一个测试(NavigatoToYahoo)并提供结果。前2个-没有其他动作发生,浏览器窗口没有关闭,这意味着TearDown()方法没有执行。

  3. 只需将[Parallelizable(ParallelScope.Self)]添加到每种测试方法。结果-3个浏览器实例打开而没有其他操作。没有URL导航,什么也没有。

  4. [Parallelizable(ParallelScope.Self)]添加到类中,并将[Parallelizable(ParallelScope.Self)]属性添加到每个测试方法中。结果-3个浏览器实例打开。第二个测试(NavigateToMicrosoft)得到执行,其余的2 –没有其他动作,没有URL导航,什么也没有。

  5. [Parallelizable(ParallelScope.Self)]添加到类中,并将[Parallelizable(ParallelScope.All)]属性添加到每个测试方法中。结果-收到错误消息May not specify ParallelScope.Children on a non-parameterized test method-老实说不知道为什么

我在https://github.com/nunit/docs/wiki/Parallelizable-Attribute中浏览了文档,但我觉得没有实际的方法可以使用NUnit框架并行执行单元测试。

我只是想并行地独立运行这3个测试(在我的实际场景中,大约有100个)。

c# unit-testing parallel-processing nunit
2个回答
0
投票

如果单元测试在同一类中,则不会并行运行。如果您有3个单独的测试类,则应该可以使用。


0
投票

@@尼尔的答案是错误的。 NUnit将根据您指定的方式在一个程序集中并行运行测试。但是,您在这里处理的是两个软件,每个软件都有其自己的并行处理方式。我可以回答WRT NUnit,所以至少您不会浪费时间不必要地使用属性。

  1. [Parallelizable]与`[Parallelizable(ParallelScope.Self)]相同。 IMO最好的样式是不带属性使用它,但是两者是相等的。

  2. [[ParallelScope.All][ParallelScope.Self | ParallelScope.Children]的缩写。

  3. 因此,您只需要担心两个设置:自我(隐式或显式)和子代。

  4. Children放在类上与在每个测试用例上放置Self相同。在这两种情况下,测试可以并行运行。

  5. 当放置在灯具类上时,Self表示该灯具可以与上面也带有Self的其他灯具并行运行。如果该固定装置中的测试也可以并行化,则它们将与所有并行固定装置中的所有测试并行运行。

  6. 如果您仅运行NUnit,即不使用Selenium,则只需将[Parallelizable]放在每个测试上,或将'[Parallelizable(ParallelScope.Children)]`放在灯具上-要么做同样的事情。

    ] >
  7. 如果您有多个固定装置,并且

  8. 希望它们并行运行,则无需执行其他操作。如果您确实希望它们及其所有测试并行运行,则也将[Parallelizable]放在固定装置上,或将[Parallelizabel(ParallelScope.All)]放在固定装置上,而在测试用例上什么也不放。
  9. 一些人似乎很想念的东西:[Parallelizable]使您的测试并行运行。它

  10. 使它们能够并行运行。您必须这样做。该属性告诉NUnit,您已经确保测试可以并行运行,因此可以这样运行。

    NUnit就是这样。现在,如果将硒添加到混合物中,则取决于您的使用方式。如果Selenium正在为您启动流程,那么您在NUnit中所做的事情将不会产生影响。您需要了解Selenium并行化如何与NUnit交互。我只是告诉你NUnit的作用。

一个观察结果...除非您的测试用例很少或需要很长时间,否则您可能会获得性能相同或更好的并行运行夹具,并让测试在夹具中依次运行。

© www.soinside.com 2019 - 2024. All rights reserved.