Тестовые фреймворки
Введение
Хотя Playwright для .NET не привязан к какому-либо конкретному тестовому фреймворку или среде выполнения тестов, по нашему опыту, самый простой способ начать — это использовать базовые классы, которые мы предоставляем для MSTest, NUnit или xUnit. Эти классы поддерживают запуск тестов на нескольких движках браузеров, настройку параметров запуска/контекста и получение экземпляра Page/BrowserContext для каждого теста из коробки.
Экземпляры Playwright и Browser будут повторно использоваться между тестами для повышения производительности. Мы рекомендуем запускать каждый тестовый случай в новом BrowserContext, чтобы состояние браузера было изолировано между тестами.
- MSTest
- NUnit
- xUnit
Playwright предоставляет базовые классы для написания тестов с использованием NUnit через пакет Microsoft.Playwright.NUnit
.
Playwright предоставляет базовые классы для написания тестов с использованием MSTest через пакет Microsoft.Playwright.MSTest
.
Playwright предоставляет базовые классы для написания тестов с использованием xUnit через пакет Microsoft.Playwright.Xunit
.
Ознакомьтесь с руководством по установке, чтобы начать.
Запуск тестов в параллельном режиме
- MSTest
- NUnit
- xUnit
По умолчанию NUnit будет запускать все тестовые файлы параллельно, а тесты внутри каждого файла последовательно (ParallelScope.Self
). Он создаст столько процессов, сколько ядер на хост-системе. Вы можете настроить это поведение, используя параметр NUnit.NumberOfTestWorkers. Поддерживается только ParallelScope.Self
.
Для тестов, зависящих от процессора, мы рекомендуем использовать столько рабочих потоков, сколько ядер на вашей системе, деленное на 2. Для тестов, зависящих от ввода-вывода, вы можете использовать столько рабочих потоков, сколько у вас ядер.
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+, который по умолчанию использует консервативный
алгоритм параллелизма.
Настройка параметров BrowserContext
- MSTest
- NUnit
- xUnit
Чтобы настроить параметры контекста, вы можете переопределить метод ContextOptions
вашего тестового класса, производного от Microsoft.Playwright.MSTest.PageTest
или Microsoft.Playwright.MSTest.ContextTest
. См. следующий пример:
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",
};
}
}
Чтобы настроить параметры контекста, вы можете переопределить метод ContextOptions
вашего тестового класса, производного от Microsoft.Playwright.MSTest.PageTest
или Microsoft.Playwright.MSTest.ContextTest
. См. следующий пример:
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",
};
}
}
Чтобы настроить параметры контекста, вы можете переопределить метод ContextOptions
вашего тестового класса, производного от Microsoft.Playwright.Xunit.PageTest
или Microsoft.Playwright.Xunit.ContextTest
. См. следующий пример:
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
Параметры запуска 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
Когда вы включили подробный лог API через переменную окружения DEBUG
, вы увидите сообщения в стандартном потоке ошибок. В Visual Studio это будет панель Tests
окна Output
. Это также будет отображаться в Test Log
для каждого теста.
Использование файла .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
. Вы также можете включить логи DEBUG
через RunConfiguration.EnvironmentVariables
.
<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
. Вы также можете включить логи DEBUG
через RunConfiguration.EnvironmentVariables
.
<?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 | Каждый тест получает свежую копию веб-страницы Page, созданную в своем уникальном BrowserContext. Расширение этого класса — самый простой способ написания полнофункционального теста Playwright. Примечание: Вы можете переопределить метод ContextOptions в каждом тестовом файле, чтобы управлять параметрами контекста, которые обычно передаются в метод Browser.NewContextAsync(). Таким образом, вы можете указать все виды параметров эмуляции для вашего тестового файла индивидуально. |
ContextTest | Каждый тест получит свежую копию BrowserContext. Вы можете создать столько страниц в этом контексте, сколько захотите. Использование этого теста — самый простой способ тестирования многопользовательских сценариев, где вам нужно больше одной вкладки. Примечание: Вы можете переопределить метод ContextOptions в каждом тестовом файле, чтобы управлять параметрами контекста, которые обычно передаются в метод Browser.NewContextAsync(). Таким образом, вы можете указать все виды параметров эмуляции для вашего тестового файла индивидуально. |
BrowserTest | Каждый тест получит браузер и может создать столько контекстов, сколько захочет. Каждый тест несет ответственность за очистку всех созданных им контекстов. |
PlaywrightTest | Это дает каждому тесту объект Playwright, чтобы тест мог запускать и останавливать столько браузеров, сколько захочет. |