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

Сеть и моки

Анализируйте сетевой трафик, подменяйте ответы API и тестируйте поведение без подключения к сети.

Просмотр сетевых запросов​

requests выводит нумерованный список запросов, выполненных с момента загрузки страницы. Успешно загруженные статические ресурсы (изображения, шрифты, таблицы стилей, скрипты) по умолчанию скрыты, чтобы список оставался компактным.

playwright-cli requests # fetch/XHR и все запросы, завершившиеся с ошибкой
playwright-cli requests --static # включить успешно загруженные статические ресурсы
playwright-cli requests --filter="/api/.*" # только URL, соответствующие этому регулярному выражению
playwright-cli requests --clear # очистить журнал
$ playwright-cli requests --filter="/api/"
# 1. [GET] https://api.example.com/users => [200] OK
# 2. [POST] https://api.example.com/users/create => [201] Created
# 3. [GET] https://api.example.com/prefs => [FAILED] net::ERR_ABORTED
#
# Примечание: 14 запросов статических ресурсов не показаны; запустите с параметром --static, чтобы увидеть их.

Просмотр отдельного запроса​

Используйте номер из списка requests:

КомандаОписание
request <index>Полная информация — заголовки и тело запроса, заголовки и тело ответа
request-headers <index>Только заголовки запроса
request-body <index>Только тело запроса
response-headers <index>Только заголовки ответа
response-body <index>Только тело ответа
playwright-cli request 2
playwright-cli response-body 2
playwright-cli response-body 2 --filename=users.json

Все пять команд принимают параметр --filename, позволяющий записать результат в файл вместо возврата в виде текста. response-body выводит текстовые тела ответов непосредственно, а двоичные сохраняет в файл, выводя путь к нему.

Подмена ответов API​

playwright-cli route <pattern> [options]
ПараметрОписание
--status=<code>Код состояния HTTP (по умолчанию: 200)
--body=<text>Тело ответа (текст или строка JSON)
--content-type=<type>Заголовок Content-Type подменённого ответа
--header="<name>: <value>"Заголовок, добавляемый к исходящему запросу (можно указать несколько раз)
--remove-header=<names>Разделённые запятыми имена заголовков, которые нужно удалить из запроса

Маршрут либо возвращает подменённый ответ, либо изменяет запрос. Передача --body или --status позволяет ответить на запрос подменённым ответом, при этом страница вообще не обращается к сети. Передача только --header / --remove-header позволяет запросу продолжить выполнение на реальном сервере с изменёнными заголовками.

Подмена ответа конечной точки API​

playwright-cli route "**/api/users" \
--body='[{"name":"Alice"},{"name":"Bob"}]' \
--content-type=application/json

Тестирование обработки ошибок​

playwright-cli route "**/api/data" --status=500
playwright-cli route "**/api/data" --status=503

Блокировка ресурсов​

playwright-cli route "**/*.jpg" --status=404
playwright-cli route "**/analytics/**" --status=204

Изменение заголовков запроса​

# удалить учётные данные из каждого запроса
playwright-cli route "**/*" --remove-header=cookie,authorization

# добавить заголовок к вызовам API
playwright-cli route "**/api/**" --header="X-Debug: 1"

Управление маршрутами​

playwright-cli route-list # вывести список активных маршрутов
playwright-cli unroute "**/api/users" # удалить конкретный маршрут
playwright-cli unroute # удалить все маршруты

Шаблоны URL​

**/api/users - соответствует этому пути на любом источнике (origin)
**/api/*/details - сегмент с подстановочным символом
**/*.{png,jpg,jpeg} - соответствие расширениям файлов
**/search?q=* - соответствие параметрам запроса

Условная подмена ответов с помощью кода​

Для сложных сценариев -- задержек, ответов в зависимости от условий или анализа тела запроса -- используйте run-code:

playwright-cli run-code "async (page) => {
await page.route('**/api/users', async route => {
const body = route.request().postDataJSON();
if (body.role === 'admin') {
await route.fulfill({
body: JSON.stringify({ permissions: ['read', 'write', 'delete'] })
});
} else {
await route.fulfill({
body: JSON.stringify({ permissions: ['read'] })
});
}
});
}"

Рабочий процесс: тестирование обработки ошибок​

# 1. Настроить подмену ответа API, чтобы возвращался код 503
playwright-cli route "**/api/users" --status=503

# 2. Перезагрузить страницу, чтобы вызвать ошибку
playwright-cli reload

# 3. Проверить страницу ошибки
playwright-cli snapshot
# - heading "Something went wrong" [level=1]
# - button "Retry" [ref=e5]

# 4. Сделать снимок экрана в состоянии ошибки
playwright-cli screenshot --filename=error-state.png

# 5. Удалить подмену и повторить попытку
playwright-cli unroute
playwright-cli click e5
playwright-cli snapshot
# - heading "Users" [level=1]

Тестирование автономного режима​

playwright-cli network-state-set offline # отключить подключение к сети
playwright-cli reload # страница показывает состояние без подключения к сети
playwright-cli snapshot
# - heading "No internet connection" [level=1]

playwright-cli network-state-set online # восстановить подключение
playwright-cli reload # страница загружается в обычном режиме