Selenium C#/NUnit 3.12.0没有并行运行测试
我正在Visual Studio Enterprise 2019版本16.3.9/测试浏览器窗口中执行测试。我的体系结构是Intel(R)Core(TM)i7-7600 CPU@2.80Ghz(4个CPU),~2.9GhzSelenium C#/NUnit 3.12.0没有并行运行测试,c#,unit-testing,parallel-processing,nunit,C#,Unit Testing,Parallel Processing,Nunit,我正在Visual Studio Enterprise 2019版本16.3.9/测试浏览器窗口中执行测试。我的体系结构是Intel(R)Core(TM)i7-7600 CPU@2.80Ghz(4个CPU),~2.9Ghz 下面是我的伪Selenium C#代码: [TestFixture] internal class TestClass{ [OneTimeSetUp] public void OneTimeSetUp() { initializeExt
下面是我的伪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();
}
这就是我已经尝试过的,但没有成功
[Parallelizable(ParallelScope.Children)]
添加到类中,并将[Parallelizable(ParallelScope.Self)]
属性添加到每个测试方法中。结果-3个浏览器实例打开,没有其他操作。没有URL导航,什么都没有[Parallelizable(ParallelScope.All)]
添加到类中,并将[Parallelizable(ParallelScope.Self)]
添加到每个测试方法中。结果-打开3个浏览器实例。只执行最后一个测试(NavigationToYahoo)并提供结果。前2个-没有其他操作发生,浏览器窗口没有关闭,这意味着没有执行TearDown()方法[Parallelizable(ParallelScope.Self)]
。结果-3个浏览器实例打开,没有其他操作。没有URL导航,什么都没有[Parallelizable(ParallelScope.Self)]
添加到类中,并将[Parallelizable(ParallelScope.Self)]
属性添加到每个测试方法中。结果-打开3个浏览器实例。第二个测试(NavigateToMicrosoft)被执行,其余的2个-没有其他操作,没有URL导航,什么都没有[Parallelizable(ParallelScope.Self)]
添加到类中,并将[Parallelizable(ParallelScope.All)]
属性添加到每个测试方法中。结果-获取错误消息可能没有指定ParallelScope。使用非参数化测试方法的孩子们真的不知道为什么
我只想独立地并行运行这3个测试(在我的实际场景中,大约有100个测试) 如果单元测试在同一个类中,它们将不会并行运行。如果你有3个独立的测试类,它应该可以工作。@Neil的答案是错误的。NUnit将根据您指定的方式在程序集中并行运行测试。然而,这里处理的是两个软件,每个都有自己的并行方式。我可以回答WRT NUnit,这样至少你不会浪费时间玩不必要的属性
[Parallelizable]
与“[Parallelizable(ParallelScope.Self)]相同。依我看,最好的风格是不使用属性,但两者是相等的[ParallelScope.All]
是[ParallelScope.Self | ParallelScope.Children]
的缩写子类
与在每个测试用例上放置Self
是相同的。在这两种情况下,测试可以彼此并行运行Self
表示该fixture可以与在其上也有Self
的其他fixture并行运行。如果该夹具中的测试也是可并行的,那么它们将与所有并行夹具中的所有测试并行运行[Parallelizable]
,或者在夹具上放置“[Parallelizable(ParallelScope.Children)]”——任何一个都做相同的事情[Parallelizable]
也放在夹具上,或者将[Parallelizabel(ParallelScope.all)]
放在夹具上,而不放在测试用例上[Parallelizable]
使您的测试并行运行。它不能使它们并行运行。你必须这么做。该属性告诉NUnit您已确保测试可以并行运行,因此它以这种方式运行更新-在你的后续评论中,你说你只有一个装置。我的回答涉及一个更复杂的假设。对于一个fixture,如果希望所有测试并行运行,请在fixture上使用ParallelScope.Children。如果一个或两个测试不能并行工作,那么将它们标记为不可并行。真的吗?文档中没有说我不能并行运行测试。如果我不能并行运行我的测试,这是一个糟糕的设计。这不是NUnit,而是整个VisualStudio测试框架。在许多方面,这是一个很好的设计选择,因为通常在同一测试类中测试同一对象。我相信如果你把你的测试分为不同的类,你的方案会成功的。谢谢。我只有一个[TestFixture](类)和100多个[Test]方法。也许这是个糟糕的设计,我不知道。所以你的答案是——不是并行运行测试,只是标记方法,让它们可以以这种方式运行。我不确定你是从哪里得出这个结论的。NUnit将在中运行您的测试