跳至主要内容

测试运行器

简介

虽然 Playwright for .NET 没有绑定到特定的测试运行器或测试框架,但根据我们的经验,最简单的入门方法是使用我们为MSTestNUnit提供的基类。这些类支持在多个浏览器引擎上运行测试,调整启动/上下文选项,并开箱即用地获取每个测试的Page/BrowserContext实例。

Playwright 和浏览器实例将在测试之间重复使用以提高性能。我们建议在新的 BrowserContext 中运行每个测试用例,这样可以隔离测试之间的浏览器状态。

MSTest

Playwright 通过Microsoft.Playwright.MSTest包提供了使用 MSTest 编写测试的基类。

查看安装指南以开始使用。

并行运行 MSTest 测试

默认情况下,MSTest 将并行运行所有类,同时按顺序运行每个类内的测试(ExecutionScope.ClassLevel)。它将创建与主机系统上的核心数量一样多的进程。您可以使用以下 CLI 参数或使用 .runsettings 文件来调整此行为,请参见下文。不支持在方法级别(ExecutionScope.MethodLevel)并行运行测试。

dotnet test --settings:.runsettings -- MSTest.Parallelize.Workers=4

自定义BrowserContext选项

要自定义上下文选项,您可以覆盖从 Microsoft.Playwright.MSTest.PageTestMicrosoft.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",
};
}
}

自定义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 日志时,您将在标准错误流中看到这些消息。在 MSTest 中,在 Visual Studio 中,这将是“输出”窗口的“测试”窗格。它也将显示在每个测试的“测试日志”中。

使用 .runsettings 文件

从 Visual Studio 运行测试时,您可以利用 .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>

Playwright 的基本 MSTest 类

Microsoft.Playwright.MSTest 命名空间中,您可以使用一些基类

测试描述
PageTest每个测试都会获得一个在其自己的唯一BrowserContext中创建的网页Page的新副本。扩展此类是编写功能齐全的 Playwright 测试的最简单方法。

注意:您可以在每个测试文件中覆盖 ContextOptions 方法以控制上下文选项,这些选项通常传递到Browser.NewContextAsync()方法。这样,您可以单独为您的测试文件指定各种模拟选项。
ContextTest每个测试都将获得一个BrowserContext的新副本。您可以在此上下文中创建任意数量的页面。使用此测试是在需要多个选项卡的多页面场景中进行测试的最简单方法。

注意:您可以在每个测试文件中覆盖 ContextOptions 方法以控制上下文选项,这些选项通常传递到Browser.NewContextAsync()方法。这样,您可以单独为您的测试文件指定各种模拟选项。
BrowserTest每个测试都将获得一个浏览器,并且可以创建任意数量的上下文。每个测试负责清理它创建的所有上下文。
PlaywrightTest这将为每个测试提供一个 Playwright 对象,以便测试可以启动和停止任意数量的浏览器。

NUnit

Playwright 通过Microsoft.Playwright.NUnit包提供了使用 NUnit 编写测试的基类。

查看安装指南以开始使用。

并行运行 NUnit 测试

默认情况下,NUnit 将并行运行所有测试文件,同时按顺序运行每个文件内的测试(ParallelScope.Self)。它将创建与主机系统上的核心数量一样多的进程。您可以使用 NUnit.NumberOfTestWorkers 参数调整此行为。仅支持 ParallelScope.Self

对于 CPU 密集型测试,我们建议使用系统上核心数量的一半作为工作程序数量。对于 IO 密集型测试,您可以使用与核心数量一样多的工作程序。

dotnet test -- NUnit.NumberOfTestWorkers=5

自定义BrowserContext选项

要自定义上下文选项,您可以覆盖从 Microsoft.Playwright.MSTest.PageTestMicrosoft.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",
};
}
}

自定义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 日志时,您将在标准错误流中看到这些消息。在 NUnit 中,在 Visual Studio 中,这将是“输出”窗口的“测试”窗格。它也将显示在每个测试的“测试日志”中。

使用 .runsettings 文件

从 Visual Studio 运行测试时,您可以利用 .runsettings 文件。以下显示了受支持值的参考。

例如,要指定工作程序的数量,可以使用 NUnit.NumberOfTestWorkers,或使用 RunConfiguration.EnvironmentVariables 启用 DEBUG 日志。

<?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>

Playwright 的基本 NUnit 类

Microsoft.Playwright.NUnit 命名空间中,您可以使用一些基类

测试描述
PageTest每个测试都会获得一个在其自己的唯一BrowserContext中创建的网页Page的新副本。扩展此类是编写功能齐全的 Playwright 测试的最简单方法。

注意:您可以在每个测试文件中覆盖 ContextOptions 方法以控制上下文选项,这些选项通常传递到Browser.NewContextAsync()方法。这样,您可以单独为您的测试文件指定各种模拟选项。
ContextTest每个测试都将获得一个BrowserContext的新副本。您可以在此上下文中创建任意数量的页面。使用此测试是在需要多个选项卡的多页面场景中进行测试的最简单方法。

注意:您可以在每个测试文件中覆盖 ContextOptions 方法以控制上下文选项,这些选项通常传递到Browser.NewContextAsync()方法。这样,您可以单独为您的测试文件指定各种模拟选项。
BrowserTest每个测试都将获得一个浏览器,并且可以创建任意数量的上下文。每个测试负责清理它创建的所有上下文。
PlaywrightTest这将为每个测试提供一个 Playwright 对象,以便测试可以启动和停止任意数量的浏览器。

xUnit 支持

虽然也支持使用 xUnit,但我们不支持运行并行测试。这是维护人员在多个问题中概述的一个众所周知的问题/设计限制。