測試執行器
簡介
雖然適用於 .NET 的 Playwright 並未與特定的測試執行器或測試框架綁定,但根據我們的經驗,最簡單的入門方式是使用我們為 MSTest、NUnit 或 xUnit 提供的基底類別。這些類別支援在多個瀏覽器引擎上執行測試、調整啟動/內容選項,並為每個測試提供開箱即用的 Page/BrowserContext 執行個體。
Playwright 和 Browser 執行個體將在測試之間重複使用,以獲得更好的效能。我們建議在新的 BrowserContext 中執行每個測試案例,這樣瀏覽器狀態將在測試之間隔離。
- MSTest
- NUnit
- xUnit
Playwright 提供基底類別,透過 Microsoft.Playwright.NUnit
套件使用 NUnit 編寫測試。
Playwright 提供基底類別,透過 Microsoft.Playwright.MSTest
套件使用 MSTest 編寫測試。
Playwright 提供基底類別,透過 Microsoft.Playwright.Xunit
套件使用 xUnit 編寫測試。
查看安裝指南以開始使用。
平行執行測試
- MSTest
- NUnit
- xUnit
預設情況下,NUnit 將平行執行所有測試檔案,同時依序執行每個檔案內的測試 (ParallelScope.Self
)。它將建立與主機系統上核心數量相同的處理程序。您可以使用 NUnit.NumberOfTestWorkers 參數調整此行為。僅支援 ParallelScope.Self
。
對於 CPU 密集型測試,我們建議使用與系統核心數量相同的 worker 數量,再除以 2。對於 IO 密集型測試,您可以使用與核心數量相同的 worker 數量。
dotnet test -- NUnit.NumberOfTestWorkers=5
預設情況下,MSTest 將平行執行所有類別,同時依序執行每個類別內的測試 (ExecutionScope.ClassLevel
)。它將建立與主機系統上核心數量相同的處理程序。您可以使用以下 CLI 參數或使用 .runsettings
檔案來調整此行為,請參閱下文。不支援在方法層級 (ExecutionScope.MethodLevel
) 平行執行測試。
dotnet test --settings:.runsettings -- MSTest.Parallelize.Workers=4
預設情況下,xUnit 將平行執行所有類別,同時依序執行每個類別內的測試。預設情況下,它將建立與系統上核心數量相同的處理程序。您可以使用以下 CLI 參數或使用 .runsettings
檔案來調整此行為,請參閱下文。
dotnet test -- xUnit.MaxParallelThreads=5
我們建議使用 xUnit 2.8+,預設情況下使用conservative
平行處理演算法。
自訂 BrowserContext 選項
- MSTest
- NUnit
- xUnit
若要自訂內容選項,您可以覆寫衍生自 Microsoft.Playwright.MSTest.PageTest
或 Microsoft.Playwright.MSTest.ContextTest
的測試類別的 ContextOptions
方法。請參閱以下範例
using Microsoft.Playwright.NUnit;
namespace PlaywrightTests;
[Parallelizable(ParallelScope.Self)]
[TestFixture]
public class MyTest : PageTest
{
[Test]
public async Task TestWithCustomContextOptions()
{
// The following Page (and BrowserContext) instance has the custom colorScheme, viewport and baseURL set:
await Page.GotoAsync("/login");
}
public override BrowserNewContextOptions ContextOptions()
{
return new BrowserNewContextOptions()
{
ColorScheme = ColorScheme.Light,
ViewportSize = new()
{
Width = 1920,
Height = 1080
},
BaseURL = "https://github.com",
};
}
}
若要自訂內容選項,您可以覆寫衍生自 Microsoft.Playwright.MSTest.PageTest
或 Microsoft.Playwright.MSTest.ContextTest
的測試類別的 ContextOptions
方法。請參閱以下範例
using System.Threading.Tasks;
using Microsoft.Playwright;
using Microsoft.Playwright.MSTest;
using Microsoft.VisualStudio.TestTools.UnitTesting;
namespace PlaywrightTests;
[TestClass]
public class ExampleTest : PageTest
{
[TestMethod]
public async Task TestWithCustomContextOptions()
{
// The following Page (and BrowserContext) instance has the custom colorScheme, viewport and baseURL set:
await Page.GotoAsync("/login");
}
public override BrowserNewContextOptions ContextOptions()
{
return new BrowserNewContextOptions()
{
ColorScheme = ColorScheme.Light,
ViewportSize = new()
{
Width = 1920,
Height = 1080
},
BaseURL = "https://github.com",
};
}
}
若要自訂內容選項,您可以覆寫衍生自 Microsoft.Playwright.Xunit.PageTest
或 Microsoft.Playwright.Xunit.ContextTest
的測試類別的 ContextOptions
方法。請參閱以下範例
using Microsoft.Playwright;
using Microsoft.Playwright.Xunit;
namespace PlaywrightTests;
public class UnitTest1 : PageTest
{
[Fact]
public async Task TestWithCustomContextOptions()
{
// The following Page (and BrowserContext) instance has the custom colorScheme, viewport and baseURL set:
await Page.GotoAsync("/login");
}
public override BrowserNewContextOptions ContextOptions()
{
return new BrowserNewContextOptions()
{
ColorScheme = ColorScheme.Light,
ViewportSize = new()
{
Width = 1920,
Height = 1080
},
BaseURL = "https://github.com",
};
}
}
自訂 Browser/啟動選項
Browser/啟動選項可以透過執行設定檔或直接透過 CLI 設定執行設定選項來覆寫。請參閱以下範例
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<Playwright>
<BrowserName>chromium</BrowserName>
<LaunchOptions>
<Headless>false</Headless>
<Channel>msedge</Channel>
</LaunchOptions>
</Playwright>
</RunSettings>
dotnet test -- Playwright.BrowserName=chromium Playwright.LaunchOptions.Headless=false Playwright.LaunchOptions.Channel=msedge
使用詳細 API 記錄
當您透過 DEBUG
環境變數啟用詳細 API 記錄時,您將在標準錯誤串流中看到訊息。在 Visual Studio 中,那將是 Output
視窗的 Tests
窗格。它也會顯示在每個測試的 Test Log
中。
使用 .runsettings 檔案
從 Visual Studio 執行測試時,您可以利用 .runsettings
檔案。以下顯示支援值的參考。
- MSTest
- NUnit
- xUnit
例如,若要指定 worker 數量,您可以使用 NUnit.NumberOfTestWorkers
,或啟用 DEBUG
記錄 RunConfiguration.EnvironmentVariables
。
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- NUnit adapter -->
<NUnit>
<NumberOfTestWorkers>24</NumberOfTestWorkers>
</NUnit>
<!-- General run configuration -->
<RunConfiguration>
<EnvironmentVariables>
<!-- For debugging selectors, it's recommend to set the following environment variable -->
<DEBUG>pw:api</DEBUG>
</EnvironmentVariables>
</RunConfiguration>
<!-- Playwright -->
<Playwright>
<BrowserName>chromium</BrowserName>
<ExpectTimeout>5000</ExpectTimeout>
<LaunchOptions>
<Headless>false</Headless>
<Channel>msedge</Channel>
</LaunchOptions>
</Playwright>
</RunSettings>
例如,若要指定 worker 數量,您可以使用 MSTest.Parallelize.Workers
。您也可以使用 RunConfiguration.EnvironmentVariables
啟用 DEBUG
記錄。
<RunSettings>
<!-- MSTest adapter -->
<MSTest>
<Parallelize>
<Workers>4</Workers>
<Scope>ClassLevel</Scope>
</Parallelize>
</MSTest>
<!-- General run configuration -->
<RunConfiguration>
<EnvironmentVariables>
<!-- For debugging selectors, it's recommend to set the following environment variable -->
<DEBUG>pw:api</DEBUG>
</EnvironmentVariables>
</RunConfiguration>
<!-- Playwright -->
<Playwright>
<BrowserName>chromium</BrowserName>
<ExpectTimeout>5000</ExpectTimeout>
<LaunchOptions>
<Headless>false</Headless>
<Channel>msedge</Channel>
</LaunchOptions>
</Playwright>
</RunSettings>
例如,若要指定 worker 數量,您可以使用 xUnit.MaxParallelThreads
。您也可以使用 RunConfiguration.EnvironmentVariables
啟用 DEBUG
記錄。
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- See https://xunit.net/docs/runsettings -->
<xUnit>
<MaxParallelThreads>1</MaxParallelThreads>
</xUnit>
<!-- General run configuration -->
<RunConfiguration>
<EnvironmentVariables>
<!-- For debugging selectors, it's recommend to set the following environment variable -->
<DEBUG>pw:api</DEBUG>
</EnvironmentVariables>
</RunConfiguration>
<!-- Playwright -->
<Playwright>
<BrowserName>chromium</BrowserName>
<ExpectTimeout>5000</ExpectTimeout>
<LaunchOptions>
<Headless>false</Headless>
<Channel>msedge</Channel>
</LaunchOptions>
</Playwright>
</RunSettings>
Playwright 的基底類別
- MSTest
- NUnit
- xUnit
在 Microsoft.Playwright.NUnit
命名空間中有一些可用的基底類別
在 Microsoft.Playwright.MSTest
命名空間中有一些可用的基底類別
在 Microsoft.Playwright.Xunit
命名空間中有一些可用的基底類別
測試 | 描述 |
---|---|
PageTest | 每個測試都會取得網頁 Page 的全新複本,該複本在其自己唯一的 BrowserContext 中建立。擴充此類別是編寫功能完整的 Playwright 測試的最簡單方式。 注意:您可以在每個測試檔案中覆寫 ContextOptions 方法,以控制內容選項,這些選項通常傳遞到 Browser.NewContextAsync() 方法中。這樣,您可以個別為您的測試檔案指定各種模擬選項。 |
ContextTest | 每個測試都會取得 BrowserContext 的全新複本。您可以在此內容中建立任意數量的頁面。使用此測試是測試需要多個索引標籤的多頁場景的最簡單方式。 注意:您可以在每個測試檔案中覆寫 ContextOptions 方法,以控制內容選項,這些選項通常傳遞到 Browser.NewContextAsync() 方法中。這樣,您可以個別為您的測試檔案指定各種模擬選項。 |
BrowserTest | 每個測試都會取得一個瀏覽器,並且可以建立任意數量的內容。每個測試都負責清除其建立的所有內容。 |
PlaywrightTest | 這為每個測試提供一個 Playwright 物件,以便測試可以啟動和停止任意數量的瀏覽器。 |