Узнайте, как управлять хранилищем браузера Playwright для автоматизации тестирования.

Файлы cookie - это фрагменты информации, отправляемые веб-сервером для хранения в веб-браузере для последующего использования. Файлы cookie - это в основном текстовые файлы, которые содержат данные, такие как имя пользователя, пароль и токены аутентификации или состояние аутентификации.

Распространенным шаблоном для написания автоматизации тестирования является аутентификация в приложении через API, а не через пользовательский интерфейс. Инженеры создают эти рабочие процессы, чтобы сократить время тестирования и гарантировать, что объем тестов не расширяется.

Вход в систему через пользовательский интерфейс перед тестом - плохая практика, поскольку в вашей коллекции уже должен быть тест входа в систему. Вместо этого перед запуском теста используйте API в методе before. Чтобы записать метод входа в систему API, вы должны создать функцию для выполнения действительного запроса, перехвата ответа, а затем сохранить содержимое ответа как допустимый файл cookie браузера.

В этом руководстве вы узнаете, как создать метод запроса API, как сохранить ответ в виде файла cookie браузера с помощью Playwright и как убедиться, что процесс работает должным образом.

В качестве основы мы будем использовать страницу входа в приложение DemoQA Bookstore.

Начиная

Для этого урока вам нужно будет установить следующие пакеты с помощью Pip или менеджера пакетов по вашему выбору:

  • Pytest
  • Питест-Драматург
  • Драматург
  • Запросы

Библиотека pytest-playwright поддерживается создателями Playwright. Я настоятельно рекомендую использовать этот плагин, так как он сокращает время, затрачиваемое на создание тестовой архитектуры Playwright.

Мы будем использовать requests стандартную библиотеку, чтобы делать запросы к серверной части DemoQA.

Состояние входа

Успешный вход в приложение DemoQA Bookstore отправляет запрос с данными пользователя в конечную точку входа. Если это действительно так, конечная точка отвечает сообщением о состоянии и данными взамен.

Затем эти данные устанавливаются в виде серии файлов cookie браузера для обеспечения аутентификации на сервере.

Самый важный файл cookie - это токен. Это сообщает веб-серверу, что мы успешно прошли аутентификацию в качестве пользователя и имеем свободный доступ к веб-странице.

Написание метода запроса

Имея это в виду, мы сможем начать создание метода запроса с использованием библиотеки Python requests.

Здесь у нас есть начало нашего метода запроса, authenticate. Метод принимает параметр user, а затем устанавливает пару частных переменных. Теперь мы можем приступить к созданию нашего поста. Мы намерены передать словарь данных аутентификации в параметре пользователя, а затем использовать его в качестве тела запроса.

Мы добавили нашу публикацию и условное заявление о том, когда мы получим успешный ответ. Если получено 200 OK, наш метод вернет ответ в формате JSON.

Однако мы еще не закончили. Если ответ не равен 200 OK, то наш метод не может выдать ошибку. Нам нужно с этим справиться.

В случае отказа

Обработку ошибок можно выполнить, импортировав класс HTTPError запросов, а затем выдав новую ошибку, если ответ не 200 OK.

При обнаружении ошибки мы выдадим новую ошибку, содержащую сообщение об ошибке запроса и распечатку ответа в формате JSON. Этого должно быть достаточно для отладки, если во время разработки возникнут ошибки.

Помимо обработки ошибок, мы должны учитывать повторные запросы. Распространенным элементом новых сред автоматизации является автоматическое повторение запросов в случае сбоя в течение заданного периода времени. Для тех, кто знаком с Cypress, фреймворк будет повторять неудачные запросы до четырех раз (если для параметра retryOnStatusCodeFailure установлено значение true). Мы можем скопировать это поведение с помощью Python.

Теперь мы обрабатываем ошибки и случайные сбои сервера. Если запрос завершится неудачно, наш код засыпает на долю секунды, а затем повторите попытку до пяти попыток. Каждый последующий запрос будет уменьшать переменную _tries. Как только _tries достигает нуля, выдается ошибка, которая приводит к сбою теста.

Успешные запросы по-прежнему возвращают ответ в форме JSON.

Редактирование контекста браузера

Поскольку наш метод запроса был создан, мы можем сохранить результаты метода в виде файла cookie с помощью Playwright. Библиотека pytest-playwright делает это удобным за счет использования фикстур с привязкой к сеансу, таких как фикстура для установки аргументов контекста браузера.

Их можно добавить в ваш проект в conftest.py файле, который служит для настройки бегуна Pytest.

Приспособление Pytest browser_context_args возвращает словарь со значениями и устанавливает эти значения в класс browser_context. Согласно документации Playwright, может быть передано значение storage_state, содержащее файлы cookie.

Ключ cookies - это список словарей, которые будут добавлены в браузер после его инициализации. Этот список можно заполнить данными из нашего метода запроса.

Все тесты, выполняемые в этом репозитории, теперь будут автоматически аутентифицироваться на веб-сервере из-за наличия маркера cookie.

Проверка

Мы можем написать фиктивный тест, чтобы проверить, поддерживает ли наш браузер ожидаемый файл cookie.

Вышеупомянутый тест направляет нас на страницу профиля DemoQA. Эта страница доступна как для аутентифицированных, так и для не аутентифицированных пользователей. Однако элемент username_value виден только при аутентификации.

Мы сохраняем дескриптор элемента Playwright, а затем утверждаем, что проверка видимости вернула true.

Чтобы запустить этот тест, введите в терминал одну из следующих команд:

  • pytest бегать без головы
  • pytest --headful работать в головном состоянии

Для более глубокого изучения мы можем добавить breakpoint в тестовый код, чтобы файлы cookie можно было проверять из браузера с заголовком.

Каталог проектов

По завершении этого руководства ваш каталог должен выглядеть следующим образом:

tests
    |__ test_cookies.py
utilities
    |__ api_helpers
        |__ api.py
.gitignore
conftest.py
README.md
requirements.txt

Резюме

Добавить файлы cookie в браузер Playwright очень просто. Используя requests library Python и пакет pytest-playwight, мы можем быстро создать методы запроса, а затем добавить ответ в виде файла cookie в контекст браузера Playwright для быстрой аутентификации через API. Это позволяет нам входить в систему через API для автоматизации тестирования, парсинга веб-страниц или других автоматизированных рабочих процессов.

Ресурсы

  1. BrowserContext: драматург. RSS блога драматурга, playwright.dev/python/docs/api/class-browsercontext#browser_contextstorage_statekwargs.
  2. Файлы cookie - как это проверить? Официальный блог 360logica, 10 января 2013 г., www.360logica.com/blog/cookies-how-to-test-it/.

Джонатан Томпсон - старший инженер по качеству в Pendo.io, специализирующийся на автоматизации тестирования. В настоящее время он проживает в Роли, Северная Каролина, со своей женой и голдендудлом по имени Уинстон. Вы можете связаться с ним в LinkedIn или подписаться на него в Twitter или Github.