Тестовые фреймворки
Введение
Хотя 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, чтобы тест мог запускать и останавливать столько браузеров, сколько захочет. |