Client certificates (клиентские сертификаты) представляют собой метод аутентификации в веб-приложениях, при котором сервер проверяет личность клиента с помощью сертификата. В контексте автоматизированного тестирования с использованием Playwright, работа с клиентскими сертификатами становится важной частью процесса, когда необходимо симулировать действия пользователей, которые используют такие сертификаты для доступа к защищённым ресурсам.
Playwright предоставляет возможность использовать клиентские сертификаты в тестах через настройку сессии браузера. Это важно в тех случаях, когда приложение требует от пользователя представления сертификата для аутентификации. Наиболее распространённый способ использования сертификатов — это их добавление через профиль браузера или конфигурацию браузера на этапе создания сессии.
Для того чтобы передавать клиентский сертификат в Playwright, нужно
использовать параметр context.addCookies() или настроить
сертификат на уровне браузера перед запуском тестов.
Пример загрузки сертификата с помощью Playwright:
const { chromium } = require('playwright');
const fs = require('fs');
(async () => {
const browser = await chromium.launch();
const context = await browser.newContext({
// Указываем путь к файлу сертификата
httpsCredentials: {
certificate: fs.readFileSync('path/to/certificate.crt'),
privateKey: fs.readFileSync('path/to/privateKey.key'),
passphrase: 'your-passphrase'
}
});
const page = await context.newPage();
await page.goto('https://example.com');
// Дополнительные действия с тестируемым сайтом
await browser.close();
})();
В данном примере, сертификат и закрытый ключ загружаются с файловой
системы с помощью модуля fs, и передаются в контекст
браузера. После этого в тестах можно работать с защищёнными ресурсами,
которые требуют клиентский сертификат.
После того как сертификат добавлен в сессию, Playwright будет использовать его для аутентификации при обращении к серверу. Это может быть полезно при автоматизации тестов для приложений, где аутентификация по сертификату обязательна, например, для API, банковских сайтов, сервисов с повышенной безопасностью.
Playwright позволяет взаимодействовать с приложением, как если бы пользователь подключался с использованием своего сертификата, и, следовательно, открывает возможность тестировать такие механизмы, как:
Важно, что Playwright не предоставляет встроенной поддержки управления паролями для сертификатов. В случае, если сертификат защищён паролем, его нужно передавать в процессе создания сессии.
В случае неправильной конфигурации сертификата или при отсутствии необходимых файлов, Playwright будет выбрасывать ошибки, которые можно перехватывать и обрабатывать в тестах. Часто возникающие ошибки включают:
Пример обработки ошибок:
try {
const browser = await chromium.launch();
const context = await browser.newContext({
httpsCredentials: {
certificate: fs.readFileSync('invalid/path/to/certificate.crt'),
privateKey: fs.readFileSync('invalid/path/to/privateKey.key'),
passphrase: 'wrong-passphrase'
}
});
} catch (error) {
console.error('Ошибка загрузки сертификата:', error);
}
В некоторых случаях может возникнуть необходимость работать с несколькими сертификатами. Например, если приложение требует разных сертификатов для разных частей системы. В этом случае можно добавить несколько контекстов браузера с разными сертификатами.
Пример:
const { chromium } = require('playwright');
const fs = require('fs');
(async () => {
const browser = await chromium.launch();
// Первый контекст с первым сертификатом
const context1 = await browser.newContext({
httpsCredentials: {
certificate: fs.readFileSync('path/to/certificate1.crt'),
privateKey: fs.readFileSync('path/to/privateKey1.key'),
passphrase: 'passphrase1'
}
});
// Второй контекст с вторым сертификатом
const context2 = await browser.newContext({
httpsCredentials: {
certificate: fs.readFileSync('path/to/certificate2.crt'),
privateKey: fs.readFileSync('path/to/privateKey2.key'),
passphrase: 'passphrase2'
}
});
const page1 = await context1.newPage();
await page1.goto('https://example1.com');
const page2 = await context2.newPage();
await page2.goto('https://example2.com');
await browser.close();
})();
Этот подход полезен, если требуется протестировать работу с разными сертификатами на одном браузере.
Для API тестирования, где сервисы могут требовать клиентскую аутентификацию с помощью сертификатов, Playwright может взаимодействовать не только с браузером, но и непосредственно с HTTP-запросами. В таких случаях сертификаты также могут быть использованы для аутентификации на уровне сетевых запросов.
Однако для такого рода тестов Playwright ограничен в возможностях
работы с сертификатами напрямую через сетевые запросы. В этом случае
будет целесообразно использовать другие инструменты, такие как
axios или fetch, которые могут отправлять
запросы с сертификатами, но эти запросы нужно будет интегрировать в
тесты вместе с Playwright.
Работа с клиентскими сертификатами в Playwright открывает множество возможностей для тестирования приложений, требующих аутентификации с помощью сертификатов. Возможность настройки сертификатов в контексте браузера позволяет тестировать приложения с повышенными требованиями безопасности, имитируя действия реальных пользователей, которые используют сертификаты для аутентификации.