Веб-сервер
Введение
Playwright предоставляет опцию webserver
в файле конфигурации, которая позволяет запустить локальный сервер разработки перед выполнением ваших тестов. Это идеально подходит для написания тестов во время разработки, когда у вас нет URL для тестирования на промежуточной или производственной среде.
Настройка веб-сервера
Используйте свойство webserver
в вашей конфигурации Playwright, чтобы запустить веб-сервер разработки во время тестов.
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 | Команда оболочки для запуска локального сервера разработки вашего приложения. |
url | URL вашего 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 . |
Добавление таймаута для сервера
Веб-серверам иногда требуется больше времени для запуска. В этом случае вы можете увеличить таймаут, чтобы дождаться старта сервера.
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
.
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',
},
});
Теперь вы можете использовать относительный путь при навигации по странице:
import { test } from '@playwright/test';
test('test', async ({ page }) => {
// Это приведет к переходу на http://localhost:3000/login
await page.goto('./login');
});
Несколько веб-серверов
Несколько веб-серверов (или фоновых процессов) могут быть запущены одновременно, предоставив массив конфигураций webServer
. См. testConfig.webServer для получения дополнительной информации.
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',
},
});