テストランナー
はじめに
Playwright for .NETは特定のテストランナーやテストフレームワークに縛られませんが、私たちの経験では、MSTest、NUnit、xUnit、またはxUnit v3用に提供されている基本クラスを使用するのが最も簡単に始める方法です。これらのクラスは、複数のブラウザエンジンでのテスト実行、起動/コンテキストオプションの調整、そしてPage/BrowserContextインスタンスをテストごとにすぐに取得することをサポートしています。
PlaywrightとBrowserインスタンスは、パフォーマンス向上のためテスト間で再利用されます。各テストケースを新しいBrowserContextで実行することをお勧めします。これにより、テスト間でブラウザの状態が隔離されます。
- MSTest
- NUnit
- xUnit
- xUnit v3
Playwrightは、Microsoft.Playwright.NUnitパッケージを介してNUnitでテストを記述するための基本クラスを提供します。
Playwrightは、Microsoft.Playwright.MSTestパッケージを介してMSTestでテストを記述するための基本クラスを提供します。
Playwrightは、Microsoft.Playwright.Xunitパッケージを介してxUnitでテストを記述するための基本クラスを提供します。
Playwrightは、Microsoft.Playwright.Xunit.v3パッケージを介してxUnit v3でテストを記述するための基本クラスを提供します。
インストールガイドを確認して始めてください。
並行してテストを実行する
- MSTest
- NUnit
- xUnit
- xUnit v3
デフォルトでは、NUnitはすべてのテストファイルを並行して実行し、各ファイル内のテストは順番に実行します(ParallelScope.Self)。ホストシステム上のコアの数だけプロセスを作成します。この動作は、NUnit.NumberOfTestWorkersパラメーターを使用して調整できます。ParallelScope.Selfのみがサポートされています。
CPUバウンドのテストの場合、システム上のコア数 / 2のワーカー数を使用することをお勧めします。IOバウンドのテストの場合、コア数と同じ数のワーカーを使用できます。
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
デフォルトでconservative並列化アルゴリズムを使用するxUnit 2.8+をお勧めします。
デフォルトでは、xUnit v3はすべてのクラスを並行して実行し、各クラス内のテストは順番に実行します。デフォルトでは、システム上のコアの数だけプロセスを作成します。この動作は、以下のCLIパラメーターを使用するか、.runsettingsファイルを使用して調整できます。詳細については以下を参照してください。
dotnet test -- xUnit.MaxParallelThreads=5
xUnit v3は、デフォルトでconservative並列化アルゴリズムを使用します。
BrowserContextオプションのカスタマイズ
- MSTest
- NUnit
- xUnit
- xUnit v3
コンテキストオプションをカスタマイズするには、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",
};
}
}
コンテキストオプションをカスタマイズするには、Microsoft.Playwright.Xunit.v3.PageTestまたはMicrosoft.Playwright.Xunit.v3.ContextTestから派生したテストクラスのContextOptionsメソッドをオーバーライドできます。以下の例を参照してください。
using Microsoft.Playwright;
using Microsoft.Playwright.Xunit.v3;
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
- xUnit v3
例えば、ワーカー数を指定するには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>
例えば、ワーカー数を指定するには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>
例えば、ワーカー数を指定するには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>
例えば、ワーカー数を指定するには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
- xUnit v3
Microsoft.Playwright.NUnit名前空間で利用可能な基本クラスがいくつかあります。
Microsoft.Playwright.MSTest名前空間で利用可能な基本クラスがいくつかあります。
Microsoft.Playwright.Xunit名前空間で利用可能な基本クラスがいくつかあります。
Microsoft.Playwright.Xunit.v3名前空間で利用可能な基本クラスがいくつかあります。
| テスト | 説明 |
|---|---|
| PageTest | 各テストは、独自のBrowserContext内で作成されたWebPageの新しいコピーを取得します。このクラスを拡張することは、完全に機能するPlaywrightテストを記述する最も簡単な方法です。 注:各テストファイルで ContextOptionsメソッドをオーバーライドしてコンテキストオプションを制御できます。これは通常、Browser.NewContextAsync()メソッドに渡されるものです。これにより、テストファイルごとにあらゆる種類のエミュレーションオプションを個別に指定できます。 |
| ContextTest | 各テストはBrowserContextの新しいコピーを取得します。このコンテキスト内で好きなだけページを作成できます。このテストを使用することは、複数のタブが必要な複数ページシナリオをテストする最も簡単な方法です。 注:各テストファイルで ContextOptionsメソッドをオーバーライドしてコンテキストオプションを制御できます。これは通常、Browser.NewContextAsync()メソッドに渡されるものです。これにより、テストファイルごとにあらゆる種類のエミュレーションオプションを個別に指定できます。 |
| BrowserTest | 各テストはブラウザを取得し、好きなだけコンテキストを作成できます。各テストは、作成したすべてのコンテキストをクリーンアップする責任があります。 |
| PlaywrightTest | これにより、各テストにPlaywrightオブジェクトが与えられ、テストは好きなだけブラウザを起動および停止できます。 |