← Назад к вопросам

Что такое cookies и session в контексте тестирования?

1.0 Junior🔥 181 комментариев
#Теория тестирования

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI7 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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.