Что такое cookies и session в контексте тестирования?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Cookies и Session в контексте тестирования веб-приложений
При тестировании веб-приложений, особенно в автоматизации (QA Automation), понимание механизмов cookies и session (сессии) критически важно для проверки авторизации, персистентности данных, безопасности и корректности пользовательских сценариев.
Что такое Cookies?
Cookies (куки) — это небольшие фрагменты данных, которые сервер отправляет браузеру пользователя, и браузер сохраняет их на стороне клиента (локально). При последующих запросах к тому же домену браузер автоматически включает эти данные в заголовки HTTP (Cookie:), позволяя серверу "узнавать" пользователя или сохранять состояние.
С точки зрения тестирования куки проверяются на:
- Корректность установки (правильные имя, значение, домен, путь).
- Срок жизни (
Expires/Max-Age): сессионные (удаляются после закрытия браузера) vs. персистентные. - Флаги безопасности:
HttpOnly(доступ только через HTTP, не через JavaScript),Secure(передача только по HTTPS),SameSite(защита от CSRF-атак). - Влияние на функциональность: корзина покупок, предпочтения языка, трекинг аналитики.
Пример проверки cookie в автотесте на Python (Selenium WebDriver):
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com/login")
# ... выполнение логина ...
# Получение и проверка cookie авторизации
auth_cookie = driver.get_cookie("session_id")
assert auth_cookie is not None, "Cookie session_id не установлен!"
assert auth_cookie['secure'] == True, "Cookie должен быть Secure!"
assert 'HttpOnly' in auth_cookie.get('httpOnly', ''), "Cookie должен быть HttpOnly!"
# Удаление cookie для теста "логаут"
driver.delete_cookie("session_id")
driver.refresh()
# Проверяем, что пользователь разлогинен
assert "Login" in driver.title
Что такое Session (Сессия)?
Session (сессия) — это механизм хранения данных на стороне сервера, связанный с конкретным пользователем во время его взаимодействия с приложением. Идентификатор сессии (session_id) обычно передается клиенту через cookie (реже через URL). Сервер использует этот ID для доступа к хранилищу данных сессии (в памяти, БД, Redis).
Ключевые аспекты для тестирования:
- Независимость сессий: разные пользователи не должны видеть данные чужих сессий.
- Таймаут неактивности: сессия должна корректно завершаться после периода бездействия.
- Безопасность: ID сессии должен быть криптостохастическим, защищен от перехвата и подбора.
- Инвалидация при логауте: все данные сессии должны очищаться на сервере после выхода.
Пример тестирования сессии через API-запросы (Python, requests):
import requests
# Начало сессии: логин
session = requests.Session()
login_response = session.post("https://api.example.com/login", json={"user": "test", "pass": "123"})
assert login_response.status_code == 200
# Проверка, что сессия активна и данные сохраняются
profile_response = session.get("https://api.example.com/profile")
assert profile_response.json()["username"] == "test"
# Эмуляция таймаута сессии (зависит от приложения)
# Например, тест ожидания и повторного запроса
import time
time.sleep(3601) # Ждем дольше времени жизни сессии
expired_response = session.get("https://api.example.com/profile")
assert expired_response.status_code == 401 # Ожидаем Unauthorized
Сравнение и ключевые отличия для QA-инженера
| Аспект | Cookies (Клиентская сторона) | Session (Серверная сторона) |
|---|---|---|
| Хранение данных | Локально в браузере | На сервере (память, БД, Redis) |
| Объем данных | Ограничен (~4KB на cookie) | Существенно больше (зависит от сервера) |
| Безопасность | Менее безопасны, доступны для JS-атак | Более безопасны, данные на сервере |
| Тестовые сценарии | Проверка срока жизни, флагов, значений | Проверка таймаутов, инвалидации, изоляции |
| Инструменты проверки | Браузерные DevTools, Selenium API | Логи сервера, мониторинг хранилища, API |
Практические сценарии тестирования
- Тест "Запомнить меня": проверка, что персистентный cookie корректно восстанавливает сессию после перезапуска браузера.
- Тест параллельных сессий: один пользователь может иметь только одну активную сессию.
- **Тест кросс.
- Тест кросс-доменных cookie (если приложение использует несколько поддоменов).
- Тест очистки данных: удаление cookie должно приводить к потере соответствующих данных сессии на сервере.
Понимание этих механизмов позволяет автоматизировать сложные сценарии аутентификации, выявлять уязвимости безопасности (например, фиксация сессии) и гарантировать, что состояние приложения сохраняется корректно при навигации пользователя. В современных SPA (Single Page Applications) и REST API тестирование cookies и session часто комбинируется с анализом JWT-токенов, хранящихся в localStorage.