Базовая HTTP аутентификация — это один из стандартных механизмов защиты веб-приложений, требующий от пользователя предоставления имени пользователя и пароля для доступа к ресурсу. В контексте автоматизации тестирования с использованием Playwright, важно уметь правильно работать с этой аутентификацией, чтобы тесты могли взаимодействовать с защищёнными страницами.
Когда веб-приложение использует базовую аутентификацию, сервер запрашивает у пользователя логин и пароль. Эти данные передаются через HTTP заголовки в формате:
Authorization: Basic <credentials>
где <credentials> — это строка, представляющая
собой закодированное в base64 сочетание логина и пароля. Формат строки
выглядит следующим образом:
<username>:<password>
Затем эта строка кодируется в base64. Например, для пользователя с
логином user и паролем password123, строка
будет выглядеть так:
dXNlcjpwYXNzd29yZDEyMw==
С помощью Playwright можно автоматизировать этот процесс, предоставив нужные данные при отправке запроса, что позволит тестировать страницы, защищённые базовой аутентификацией.
Для работы с базовой аутентификацией в Playwright можно использовать
метод page.authenticate(). Этот метод позволяет задать имя
пользователя и пароль, которые Playwright будет использовать при доступе
к защищённым страницам.
page.authenticate():const { test, expect } = require('@playwright/test');
test('Базовая аутентификация', async ({ page }) => {
// Указываем логин и пароль
await page.authenticate({
username: 'user',
password: 'password123'
});
// Переходим на страницу, требующую аутентификацию
await page.goto('https://example.com/protected');
// Проверяем, что страница загружена
const title = await page.title();
expect(title).toBe('Protected Page');
});
В этом примере:
page.authenticate() принимает объект с полями
username и password.page.goto().Если на протяжении теста требуется несколько раз посещать защищённые
страницы, стоит помнить, что page.authenticate() работает
на уровне сессии. При изменении страницы или перезапуске сессии,
необходимо заново передавать данные аутентификации. Это особенно важно,
если используется кэширование или сессии в браузере.
Для многократного использования аутентификации можно использовать глобальные переменные, передавая данные аутентификации в несколько тестов.
Иногда нужно не только передавать логин и пароль при загрузке
страницы, но и перехватывать HTTP-запросы, чтобы манипулировать
заголовками. В этом случае можно использовать обработчик запросов с
методом page.on('route') для модификации запросов.
Пример перехвата и добавления заголовка
Authorization:
const { test, expect } = require('@playwright/test');
test('Перехват запросов с базовой аутентификацией', async ({ page }) => {
await page.route('**/protected/*', (route, request) => {
// Кодируем логин и пароль в base64
const encodedCredentials = Buffer.from('user:password123').toString('base64');
// Добавляем заголовок Authorization
request.headers()['Authorization'] = `Basic ${encodedCredentials}`;
// Продолжаем запрос
route.continue({ headers: request.headers() });
});
// Переходим на защищённую страницу
await page.goto('https://example.com/protected');
// Проверяем, что страница загружена
const title = await page.title();
expect(title).toBe('Protected Page');
});
Здесь:
page.route() позволяет перехватывать запросы,
направляемые на определённые URL.Authorization в запрос.Если введённые данные для аутентификации неверны, сервер может вернуть ошибку 401 (Unauthorized). В таком случае важно проверить, что тест корректно обрабатывает такие ситуации.
Пример обработки ошибки аутентификации:
const { test, expect } = require('@playwright/test');
test('Ошибки при неверных данных аутентификации', async ({ page }) => {
// Указываем неверный логин и пароль
await page.authenticate({
username: 'wronguser',
password: 'wrongpassword'
});
// Переходим на защищённую страницу
const response = await page.goto('https://example.com/protected');
// Проверяем, что сервер вернул ошибку 401
expect(response.status()).toBe(401);
});
В данном примере:
Избегайте использования реальных логинов и паролей. В тестах для базовой аутентификации можно использовать тестовые данные, чтобы минимизировать риски.
Обрабатывайте ошибки корректно. При автоматизации тестов важно учитывать все возможные статусы HTTP-ответов, чтобы правильно управлять ситуациями с ошибками.
Используйте сессии и cookies. В случае повторных запросов можно воспользоваться cookies, которые сохраняются браузером после успешной аутентификации, что позволяет избежать многократного ввода логина и пароля.
Рассмотрите использование переменных окружения. Для повышения безопасности можно хранить данные аутентификации в переменных окружения, чтобы не указывать их непосредственно в коде.
Использование базовой HTTP аутентификации в Playwright позволяет эффективно тестировать страницы, защищённые этим методом, обеспечивая стабильность и безопасность тестов.