Запросы в Pytest

Python-библиотека Requests – хороший программный продукт. О достоинствах этой библиотеки в контексте автоматизации тестирования на Python мы и поговорим в нашей статье.

Давайте рассмотрим эту библиотеку на примере приложения Restful-Booker, которое создал Mark Winteringham.

У библиотеки Requests есть такие плюсы, как синтаксис, а также то, что она представляет собой полноформатную HTTP-библиотеку. И не столь важно, нужен вам одноразовый простой GET либо сложный запрос, который требует манипуляции заголовками и авторизацией вместе с кастомным телом запроса – библиотека может все.

Но при чем здесь Pytest и автоматизация? Дело в том, что от команд разработчиков нередко можно услышать 2 вопроса: 1. «Каким образом построить тест-фреймворк API?» 2. «Каким образом использовать API в автоматизированных тестах браузера для наибольшей стабильности?»

Ответ на эти вопросы можно дать один: постройте собственный фреймворк с Pytest и Requests.

Давайте приведем пример тестов API. Типичный случай – проверка кода статуса ответа. Сделать это с помощью requests довольно просто. Вот каким образом будут выглядеть типовые GET-тесты:

Согласно этим тестам, если тестируемое web-приложение функционирует, оно возвращает статус-коды состояний уровня 200 или 300, если же страница не существует – корректный код 404 (кстати, вот забавная справка по HTTP-статусам и их значениям).

Итак, в каждом случае метод get() вернет ответ, который можно будет использовать разным образом. Если первый тест применяет свойство requests Response.ok, то второй проверяет код ответа 404. Да, это элементарнейшие тесты, однако они дают представление об основных типах API-тестов: создание запроса и анализ ответа. Собственно говоря, Requests и Pytest – неплохая комбинация, позволяющая начать с простого, а потом перейти к надстройке тестов по мере надобности.

Следующая полезная особенность requests в контексте автоматизированного тестирования заключается в конструкции Requests Session. Эта конструкция дает возможность управлять серией HTTP-запросов, сохраняя при этом такие аспекты состояния сессии, как куки, авторизация и т. д.

Тут уже requests способна помочь с созданием API-утилит для браузерного тестирования. Давайте рассмотрим пример теста, где применяется API-запрос напрямую в целях авторизации в web-приложении без применения UI:

Как видите, все предельно просто! Даже есть возможность отделить сессии API и веб-браузера в разные фикстуры, разделяя тем самым действия с API и действия с веб-браузером в наборе автотестов. Можно вполне успешно применять Requests Session именно для этого. Кстати, если вас интересует пример фреймворка API-тестирования на основе requests, посмотрите на svp.

Вывод прост: библиотека requests — чудесный инструмент. Она уже сама по себе является поводом, чтобы тестировщики учили Python. :-)

По материалам статьи «Pytest, The Awesome Parts: Requests».