Небольшой учебный проект по Python, который показывает, как тестировать работу с внешним API с помощью мокирования.
Автор: Георгий Белянин (Georgy Belyanin) — georgy.belyanin@gmail.com
Проект решает простую задачу:
- делает запрос к TheCatAPI;
- получает URL случайного изображения кошки;
- проверяет успешный и неуспешный сценарии через
pytestиpytest-mock.
- работа с HTTP API через
requests; - извлечение данных из JSON-ответа;
- изоляция тестов от сети;
- мокирование
requests.get; - проверка обработки успешного ответа и ошибки API.
- Python
- requests
- pytest
- pytest-mock
.
├── .gitignore
├── README.md
├── main.py
├── pytest.ini
├── requirements.txt
└── test.py
Функция get_random_cat_image_url() обращается к:
https://api.thecatapi.com/v1/images/search
Ожидаемое поведение:
- если API возвращает статус-код
200, функция достаетurlиз первого элемента JSON-списка и возвращает строку; - если API возвращает неуспешный статус-код, функция возвращает
None.
Для Windows 11:
py -3 -m venv .venv
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install -r requirements.txt.\.venv\Scripts\python.exe -m pytestПодробный вывод (какие тесты выполнены) включён по умолчанию. Для краткого вывода используйте -q.
-
Успешный ответ API:
status_code == 200;- функция возвращает корректный URL изображения.
-
Неуспешный ответ API:
- например,
status_code == 404; - функция возвращает
None.
- например,
Тесты не должны зависеть от интернета, доступности TheCatAPI и случайных данных.
Поэтому в тестах подменяется requests.get, а ответы API задаются вручную через мок-объект.
Это делает тесты быстрыми, предсказуемыми и воспроизводимыми.
Этот репозиторий показывает базовый, но важный навык: как безопасно тестировать интеграцию с внешним API, не выполняя реальные HTTP-запросы во время тестов.