← Cloudflare Turnstile / turnstile / tutorials
Исключение Turnstile из E2E-тестов
В этом руководстве показано, как работать с Turnstile в сквозных (E2E) тестах с помощью специальных тестовых ключей Turnstile.
Обзор
В E2E-тестах проверку Turnstile обычно нужно обойти или упростить. Для этого у Cloudflare есть официальные тестовые ключи, которые всегда проходят проверку и потому хорошо подходят для тестовых окружений:
- Тестовый sitekey:
1x00000000000000000000AA - Тестовый секретный ключ:
1x0000000000000000000000000000000AA
Подробнее см. в документация по тестированию.
Внедрение
Главное при определении тестовой среды: распознать тестовые запросы на стороне сервера. Вот простой способ:
// Detect test environments using IP addresses or headers
function isTestEnvironment(request) {
const testIPs = ['127.0.0.1', '::1'];
const isTestIP = testIPs.includes(request.ip);
const hasTestHeader = request.headers['x-test-environment'] === 'secret-token';
return isTestIP || hasTestHeader;
}
// Use the appropriate credentials based on the environment
function getTurnstileCredentials(request) {
if (isTestEnvironment(request)) {
return {
sitekey: '1x00000000000000000000AA',
secretKey: '1x0000000000000000000000000000000AA'
};
}
return {
sitekey: process.env.TURNSTILE_SITE_KEY,
secretKey: process.env.TURNSTILE_SECRET_KEY
};
}Интеграция на стороне сервера
При рендеринге страницы подставляйте sitekey, соответствующий окружению:
app.get('/your-form', (req, res) => {
const { sitekey } = getTurnstileCredentials(req);
res.render('form', { sitekey });
});Интеграция на стороне клиента
После этого шаблон может использовать переданный sitekey:
<div class="turnstile" data-sitekey="<%= sitekey %>"></div>Рекомендации
-
Определение окружения
- Определяйте тестовые среды по нескольким признакам (IP, заголовки и так далее).
- Если тестирование ведётся из публичной сети, не раскрывайте идентификаторы тестовой среды.
-
Управление учётными данными
- Храните рабочие учётные данные безопасно (например, в переменных окружения).
- Никогда не сохраняйте учётные данные в системе контроля версий.
- Используйте разные учётные данные для каждой среды.
-
Безопасность развёртывания
- Добавьте проверки, чтобы тестовые ключи не попали в рабочую среду.
- Добавьте проверку учётных данных в конвейер CI/CD.
- Следите за тем, чтобы тестовые ключи не использовались по ошибке.
Что учесть при тестировании
- Тестовые учётные данные всегда проходят проверку.
- Они отлично подходят для сред автоматизированного тестирования.
- Они помогают избежать ограничения частоты запросов при тестировании.
- Тесты становятся предсказуемее и быстрее.
Пример настройки тестов
Для Cypress и других подобных фреймворков E2E-тестирования:
// Set test header for all test requests
beforeEach(() => {
cy.intercept('*', (req) => {
req.headers['x-test-environment'] = 'secret-token';
});
});
// Your test can now interact with the form normally
it('submits form successfully', () => {
cy.visit('/your-form');
cy.get('form').submit();
// Turnstile will automatically pass verification
});Заключение
Тестовые ключи Turnstile вместе с корректным определением окружения позволяют строить надёжные E2E-тесты и не жертвовать безопасностью на боевом сайте. Тестовые ключи всегда держите отдельно от боевых и предусмотрите защитные проверки в процессе развёртывания.