Перейти к основному содержимому

Веб-сервер

Введение

Playwright предоставляет опцию webserver в файле конфигурации, которая позволяет запустить локальный сервер разработки перед выполнением ваших тестов. Это идеально подходит для написания тестов во время разработки, когда у вас нет URL для тестирования на промежуточной или производственной среде.

Настройка веб-сервера

Используйте свойство webserver в вашей конфигурации Playwright, чтобы запустить веб-сервер разработки во время тестов.

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
// Запустите ваш локальный сервер разработки перед началом тестов
webServer: {
command: 'npm run start',
url: 'http://localhost:3000',
reuseExistingServer: !process.env.CI,
stdout: 'ignore',
stderr: 'pipe',
},
});
СвойствоОписание
testConfig.webServerЗапускает веб-сервер разработки (или несколько) во время тестов.
commandКоманда оболочки для запуска локального сервера разработки вашего приложения.
urlURL вашего HTTP-сервера, который должен возвращать статус 2xx, 3xx, 400, 401, 402 или 403, когда сервер готов принимать соединения.
reuseExistingServerЕсли true, будет повторно использовать существующий сервер по указанному URL, если он доступен. Если на этом URL нет работающего сервера, будет выполнена команда для запуска нового сервера. Если false, будет выброшено исключение, если существующий процесс слушает указанный URL. Чтобы увидеть stdout, вы можете установить переменную окружения DEBUG=pw:webserver.
ignoreHTTPSErrorsУказывает, следует ли игнорировать ошибки HTTPS при получении url. По умолчанию false.
cwdТекущий рабочий каталог запущенного процесса, по умолчанию соответствует каталогу файла конфигурации.
stdoutЕсли "pipe", будет перенаправлен stdout команды в stdout процесса. Если "ignore", будет проигнорирован stdout команды. По умолчанию "ignore".
stderrУказывает, следует ли перенаправлять stderr команды в stderr процесса или игнорировать его. По умолчанию "pipe".
timeoutВремя ожидания запуска процесса и его доступности в миллисекундах. По умолчанию 60000.
gracefulShutdownСпособ завершения работы процесса. Если не указано, группа процессов будет принудительно завершена с помощью SIGKILL. Если установлено в { signal: 'SIGTERM', timeout: 500 }, группе процессов будет отправлен сигнал SIGTERM, за которым последует SIGKILL, если она не завершится в течение 500 мс. Вы также можете использовать SIGINT в качестве сигнала. Таймаут 0 означает, что сигнал SIGKILL не будет отправлен. Windows не поддерживает сигналы SIGTERM и SIGINT, поэтому этот параметр игнорируется в Windows. Обратите внимание, что завершение работы контейнера Docker требует SIGTERM.

Добавление таймаута для сервера

Веб-серверам иногда требуется больше времени для запуска. В этом случае вы можете увеличить таймаут, чтобы дождаться старта сервера.

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
// Остальная часть вашей конфигурации...

// Запустите ваш локальный сервер разработки перед началом тестов
webServer: {
command: 'npm run start',
url: 'http://localhost:3000',
reuseExistingServer: !process.env.CI,
timeout: 120 * 1000,
},
});

Добавление baseURL

Также рекомендуется указать baseURL в секции use: {} вашей конфигурации, чтобы тесты могли использовать относительные URL и вам не приходилось постоянно указывать полный URL.

При использовании page.goto(), page.route(), page.waitForURL(), page.waitForRequest() или page.waitForResponse() учитывается базовый URL с помощью конструктора URL() для построения соответствующего URL. Например, установив baseURL на http://localhost:3000 и переходя к /login в ваших тестах, Playwright выполнит тест, используя http://localhost:3000/login.

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
// Остальная часть вашей конфигурации...

// Запустите ваш локальный сервер разработки перед началом тестов
webServer: {
command: 'npm run start',
url: 'http://localhost:3000',
reuseExistingServer: !process.env.CI,
},
use: {
baseURL: 'http://localhost:3000',
},
});

Теперь вы можете использовать относительный путь при навигации по странице:

test.spec.ts
import { test } from '@playwright/test';

test('test', async ({ page }) => {
// Это приведет к переходу на http://localhost:3000/login
await page.goto('./login');
});

Несколько веб-серверов

Несколько веб-серверов (или фоновых процессов) могут быть запущены одновременно, предоставив массив конфигураций webServer. См. testConfig.webServer для получения дополнительной информации.

playwright.config.ts
import { defineConfig } from '@playwright/test';

export default defineConfig({
webServer: [
{
command: 'npm run start',
url: 'http://localhost:3000',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
},
{
command: 'npm run backend',
url: 'http://localhost:3333',
timeout: 120 * 1000,
reuseExistingServer: !process.env.CI,
}
],
use: {
baseURL: 'http://localhost:3000',
},
});