测试运行器
简介
虽然 Playwright for .NET 并不依赖于特定的测试运行器或测试框架,但根据我们的经验,最简单的入门方法是使用我们为 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 密集型测试,我们建议使用系统核心数量除以 2 的工作线程数。对于 I/O 密集型测试,你可以使用与核心数量相同的工作线程数。
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()
{
// 以下 Page(和 BrowserContext)实例设置了自定义的 colorScheme、viewport 和 baseURL:
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()
{
// 以下 Page(和 BrowserContext)实例设置了自定义的 colorScheme、viewport 和 baseURL:
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()
{
// 以下 Page(和 BrowserContext)实例设置了自定义的 colorScheme、viewport 和 baseURL:
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/launch 选项
可以使用运行设置文件或通过 CLI 直接设置运行设置选项来覆盖 Browser/launch 选项。请参阅以下示例:
<?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 中,这些消息将显示在 “输出” 窗口的 “测试” 窗格中。它们也将显示在每个测试的 “测试日志” 中。
使用.runsettings文件
从 Visual Studio 运行测试时,可以利用 .runsettings
文件。以下展示了支持值的参考信息。
- MSTest
- NUnit
- xUnit
例如,要指定工作线程数,可以使用 NUnit.NumberOfTestWorkers
,或者要启用 DEBUG
日志,可以使用 RunConfiguration.EnvironmentVariables
。
<?xml version="1.0" encoding="utf-8"?>
<RunSettings>
<!-- NUnit 适配器 -->
<NUnit>
<NumberOfTestWorkers>24</NumberOfTestWorkers>
</NUnit>
<!-- 常规运行配置 -->
<RunConfiguration>
<EnvironmentVariables>
<!-- 为调试选择器,建议设置以下环境变量 -->
<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 适配器 -->
<MSTest>
<Parallelize>
<Workers>4</Workers>
<Scope>ClassLevel</Scope>
</Parallelize>
</MSTest>
<!-- 常规运行配置 -->
<RunConfiguration>
<EnvironmentVariables>
<!-- 为调试选择器,建议设置以下环境变量 -->
<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>
<!-- 请参阅 https://xunit.net/docs/runsettings -->
<xUnit>
<MaxParallelThreads>1</MaxParallelThreads>
</xUnit>
<!-- 常规运行配置 -->
<RunConfiguration>
<EnvironmentVariables>
<!-- 为调试选择器,建议设置以下环境变量 -->
<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 | 每个测试都会在其自己唯一的 BrowserContext 中创建一个全新的网页 Page 副本。继承此类是编写功能完备的 Playwright 测试的最简单方法。 注意:你可以在每个测试文件中重写 ContextOptions 方法,以控制上下文选项,这些选项通常会传递到 Browser.NewContextAsync() 方法中。这样,你就可以为每个测试文件单独指定各种模拟选项。 |
ContextTest | 每个测试都会获得一个全新的 BrowserContext 副本。你可以在此上下文中根据需要创建任意数量的页面。使用此测试是测试需要多个标签页的多页面场景的最简单方法。 注意:你可以在每个测试文件中重写 ContextOptions 方法,以控制上下文选项,这些选项通常会传递到 Browser.NewContextAsync() 方法中。这样,你就可以为每个测试文件单独指定各种模拟选项。 |
BrowserTest | 每个测试都会获得一个浏览器,并且可以根据需要创建任意数量的上下文。每个测试负责清理其创建的所有上下文。 |
PlaywrightTest | 这为每个测试提供了一个 Playwright 对象,以便测试可以根据需要启动和停止任意数量的浏览器。 |