[英]Running one tests on multiple browsertypes in parallel using Selenium, NUnit and C#
[英]Selenium C# / NUnit 3.12.0 is not running tests in parallel
我正在 Visual Studio Enterprise 2019 版本 16.3.9 / 測試資源管理器 window 中執行我的測試。 我的架構是 Intel(R) Core(TM) i7-7600 CPU @ 2.80Ghz(4 個 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();
}
所以這是我已經嘗試過的但沒有用
將[Parallelizable(ParallelScope.Children)]
添加到 class 和[Parallelizable(ParallelScope.Self)]
屬性到每個測試方法。 結果 - 3 個瀏覽器實例在沒有其他操作的情況下打開。 沒有 URL 導航,什么都沒有。
將[Parallelizable(ParallelScope.All)]
添加到 class 和[Parallelizable(ParallelScope.Self)]
到每個測試方法。 結果 - 打開了 3 個瀏覽器實例。 僅執行最后一個測試 (NavigatoToYahoo) 並提供結果。 第一個 2 - 沒有其他動作發生,瀏覽器 windows 沒有關閉,這意味着 TearDown() 方法沒有執行。
只需將[Parallelizable(ParallelScope.Self)]
添加到每個測試方法。 結果 - 3 個瀏覽器實例在沒有其他操作的情況下打開。 沒有 URL 導航,什么都沒有。
將[Parallelizable(ParallelScope.Self)]
添加到 class 和[Parallelizable(ParallelScope.Self)]
屬性到每個測試方法。 結果 - 打開了 3 個瀏覽器實例。 第二個測試(NavigateToMicrosoft)被執行,rest 2 - 沒有其他操作,沒有 URL 導航,什么都沒有。
將[Parallelizable(ParallelScope.Self)]
添加到 class 和[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 個)。
如果單元測試在同一個 class 中,它們將不會並行運行。 如果您有 3 個單獨的測試類,它應該可以工作。
@Neil 的回答是錯誤的。 NUnit 將根據您指定的方式並行運行程序集中的測試。 但是,您在這里處理兩個軟件,每個軟件都有自己的並行化方式。 我可以回答 WRT NUnit,這樣至少你不會浪費時間不必要地玩屬性。
[Parallelizable]
與 `[Parallelizable(ParallelScope.Self)] 相同。 最好的風格,IMO,是在沒有屬性的情況下使用它,但兩者是相等的。
[ParallelScope.All]
是[ParallelScope.Self | ParallelScope.Children]
的縮寫。 [ParallelScope.Self | ParallelScope.Children]
。
因此,您只需要擔心兩個設置:Self(隱式或顯式)和 Children。
將Children
放置在 class 上與將Self
放置在每個測試用例上相同。 在這兩種情況下,測試都可以彼此並行運行。
當放置在夾具 class 上時, Self
表示夾具可以與其他也具有Self
的夾具並行運行。 如果該夾具中的測試也是可並行的,那么它們將與所有並行夾具中的所有測試並行運行。
如果您只運行 NUnit,即沒有 Selenium,您只需將[Parallelizable]
放在每個測試上或 '[Parallelizable(ParallelScope.Children)] 放在夾具上 - 任何一個都做同樣的事情。
如果您有多個夾具並且您不希望它們並行運行,則無需再做任何事情。 如果您確實希望它們及其所有測試並行運行,那么也將[Parallelizable]
放在夾具上,或者將[Parallelizabel(ParallelScope.All)]
放在夾具上,而在測試用例上什么也不放。
許多人似乎錯過了一些重要的事情: [Parallelizable]
使您的測試並行運行。 它不會使它們能夠並行運行。 你必須這樣做。 該屬性告訴 NUnit 你已經確保測試可以並行運行,所以它以這種方式運行。
NUnit 就是這樣。 現在,如果您將 Selenium 添加到混合物中,則取決於您如何使用它。 如果 Selenium 正在為您啟動進程,那么您在 NUnit 中所做的事情沒有影響。 您需要了解 Selenium 並行化如何與 NUnit 交互。 我只是告訴你 NUnit 是做什么的。
觀察...除非您的測試用例很少或單獨花費很長時間,否則您可能會獲得同樣好的或更好的性能並行運行夾具並讓測試在夾具內按順序運行。
更新 - 在您的后續評論中,您說您只有一個夾具。 我的回答是處理一個更復雜的假設。 對於一個夾具,如果您希望所有測試並行運行,請在夾具上使用 ParallelScope.Children。 如果一兩個測試不能並行工作,則將它們標記為 NonParallelizable。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.