Использовал ли Cookies для тестирования?

Ответ

Да, постоянно. Работа с cookies — это ключевой навык при тестировании веб-приложений, особенно для эмуляции состояния пользовательской сессии и тестирования функций, зависящих от аутентификации.

Конкретные кейсы применения в моей практике:

  1. Тестирование аутентификации и сессий:

    • Сценарий: После успешного логина сервер устанавливает 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());

  2. Тестирование функционала, зависящего от cookies:

    • Корзина покупок: Проверял, что товары, добавленные в корзину (часто хранятся в cookie cartItems), сохраняются при переходе между страницами и после перезагрузки браузера.
    • Языковые настройки/тема: Эмулировал установку cookie locale=fr или theme=dark и проверял, корректно ли применяются соответствующие настройки интерфейса.
  3. 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+ 🔞

Ну ты представляешь, эта работа с куками — это как будто ты не тестировщик, а какой-то печеньковый магнат, ёпта. Без этого навыка — вообще никуда, особенно когда нужно прикинуться пользователем, который уже вошёл в систему, или проверить штуки, которые без авторизации просто не работают.

Конкретно, где я с этим сталкивался, и не раз:

  1. Проверка входа и сессий — тут вообще волнение ебать:

    • Сценарий: Пользователь залогинился — сервер ему в ответ суёт куку 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());

  2. Тестирование фич, которые на куках завязаны:

    • Корзина в интернет-магазине: Проверял, что товары, которые ты накидал в корзину (а они часто в куке cartItems живут), не испаряются, когда ты прыгаешь по страницам или вообще браузер перезапускаешь. А то бывает такое — закрыл вкладку, открыл, а корзина пуста. Пиздец, а не магазин.
    • Язык или тема оформления: Ставил куку locale=fr и смотрел, превращается ли интерфейс во французский, или theme=dark — чтобы всё потемнело, как моя душа в понедельник утром.
  3. Тестирование 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) выйдет. Сессия должна корректно завершиться, а не висеть, как призрак. Иначе получается пользователь-зомби — вроде вышел, но доступ ещё есть.