Ответ
Да, постоянно. Работа с cookies — это ключевой навык при тестировании веб-приложений, особенно для эмуляции состояния пользовательской сессии и тестирования функций, зависящих от аутентификации.
Конкретные кейсы применения в моей практике:
-
Тестирование аутентификации и сессий:
- Сценарий: После успешного логина сервер устанавливает cookie
sessionId. Все последующие запросы должны содержать этот cookie для доступа к защищенным страницам. - Подход в Selenium WebDriver (Java): Я автоматизировал сценарий, где тест логинится один раз, сохраняет cookie, а затем использует его для доступа к другим разделам без повторного ввода пароля, что ускоряет прогон тестов.
// 1. Логин и получение cookie driver.get("https://app.example.com/login"); driver.findElement(By.id("username")).sendKeys("testuser"); driver.findElement(By.id("password")).sendKeys("pass123"); driver.findElement(By.id("submit")).click();
// Сохраняем важную cookie Cookie sessionCookie = driver.manage().getCookieNamed("SESSION_ID"); String cookieValue = sessionCookie.getValue();
// 2. Новый браузер/сессия - используем сохраненную cookie для доступа WebDriver newDriver = new ChromeDriver(); newDriver.get("https://app.example.com"); // На главной странице newDriver.manage().addCookie(new Cookie("SESSION_ID", cookieValue)); // Инжектируем cookie newDriver.navigate().refresh(); // Обновляем страницу с новой cookie // Проверяем, что пользователь авторизован и видит личный кабинет assertTrue(newDriver.findElement(By.id("dashboard")).isDisplayed());
- Сценарий: После успешного логина сервер устанавливает cookie
-
Тестирование функционала, зависящего от cookies:
- Корзина покупок: Проверял, что товары, добавленные в корзину (часто хранятся в cookie
cartItems), сохраняются при переходе между страницами и после перезагрузки браузера. - Языковые настройки/тема: Эмулировал установку cookie
locale=frилиtheme=darkи проверял, корректно ли применяются соответствующие настройки интерфейса.
- Корзина покупок: Проверял, что товары, добавленные в корзину (часто хранятся в cookie
-
API-тестирование с cookies: При тестировании бэкенда с помощью REST Assured или Postman cookies передаются в заголовках. Это необходимо для тестирования эндпоинтов, которые требуют сессионной аутентификации (например, старые системы на основе JSESSIONID).
// REST Assured: Использование cookie в запросе given() .cookie("session_token", "abc123xyz") .when() .get("/api/secure-data") .then() .statusCode(200);
Важные аспекты для QA:
- Очистка состояния: Перед каждым тестом важно удалять cookies (
driver.manage().deleteAllCookies()), чтобы избежать взаимного влияния тестов. - Безопасность: Тестирование атрибутов cookies:
HttpOnly(защита от XSS),Secure(передача только по HTTPS),SameSite(защита от CSRF). - Срок жизни: Проверка корректности работы сессии после истечения срока жизни cookie (
Max-AgeилиExpires).
Ответ 18+ 🔞
Ну ты представляешь, эта работа с куками — это как будто ты не тестировщик, а какой-то печеньковый магнат, ёпта. Без этого навыка — вообще никуда, особенно когда нужно прикинуться пользователем, который уже вошёл в систему, или проверить штуки, которые без авторизации просто не работают.
Конкретно, где я с этим сталкивался, и не раз:
-
Проверка входа и сессий — тут вообще волнение ебать:
- Сценарий: Пользователь залогинился — сервер ему в ответ суёт куку
sessionId. И теперь все дальнейшие запросы должны таскать эту куку с собой, как пропуск, иначе охрана не пустит на закрытые страницы. - Как это в Selenium WebDriver (Java) выглядит: Я автоматизировал такую штуку, чтобы тест один раз зашёл, схватил эту священную печеньку, а потом тыкался по всему личному кабинету, не вводя пароль каждый раз. Скорость тестов вырастает просто овердохуища.
// 1. Логинимся и выковыриваем куку driver.get("https://app.example.com/login"); driver.findElement(By.id("username")).sendKeys("testuser"); driver.findElement(By.id("password")).sendKeys("pass123"); driver.findElement(By.id("submit")).click();
// Хватаем самую важную куку за её ценное содержимое Cookie sessionCookie = driver.manage().getCookieNamed("SESSION_ID"); String cookieValue = sessionCookie.getValue();
// 2. Открываем новый браузер (чистый, как слеза младенца) и впендюриваем туда нашу куку WebDriver newDriver = new ChromeDriver(); newDriver.get("https://app.example.com"); // Просто главная newDriver.manage().addCookie(new Cookie("SESSION_ID", cookieValue)); // Подкидываем печеньку newDriver.navigate().refresh(); // Обновляемся — и вуаля! // Проверяем, что нас пустило в личный кабинет, а не выкинуло на мороз assertTrue(newDriver.findElement(By.id("dashboard")).isDisplayed());
- Сценарий: Пользователь залогинился — сервер ему в ответ суёт куку
-
Тестирование фич, которые на куках завязаны:
- Корзина в интернет-магазине: Проверял, что товары, которые ты накидал в корзину (а они часто в куке
cartItemsживут), не испаряются, когда ты прыгаешь по страницам или вообще браузер перезапускаешь. А то бывает такое — закрыл вкладку, открыл, а корзина пуста. Пиздец, а не магазин. - Язык или тема оформления: Ставил куку
locale=frи смотрел, превращается ли интерфейс во французский, илиtheme=dark— чтобы всё потемнело, как моя душа в понедельник утром.
- Корзина в интернет-магазине: Проверял, что товары, которые ты накидал в корзину (а они часто в куке
-
Тестирование API с куками: Когда ковыряешь бэкенд через REST Assured или Postman, куки тоже в заголовках таскаешь. Особенно в старых системах, где до сих пор JSESSIONID царит, без этого вообще нихуя не протестируешь.
// REST Assured: Кидаем куку в запрос, как кость собаке given() .cookie("session_token", "abc123xyz") .when() .get("/api/secure-data") .then() .statusCode(200);
На что ещё смотреть надо, а то подгоришь:
- Чистота эксперимента: Перед каждым тестом надо зачищать куки (
driver.manage().deleteAllCookies()), чтобы один тест другому хвост не наступил. Иначе потом охуеешь искать, откуда глюки лезут. - Безопасность, ёпта: Обязательно глядеть на атрибуты кук:
HttpOnly(чтобы через JS её не украли),Secure(чтобы только по HTTPS летала),SameSite(защита от некоторых атак). Если этого нет — фронтендеры и бэкендеры получают по заслугам. - Срок годности: Проверить, что будет, когда у куки срок жизни (
Max-Age) выйдет. Сессия должна корректно завершиться, а не висеть, как призрак. Иначе получается пользователь-зомби — вроде вышел, но доступ ещё есть.