API для генерации ответов сервера с любыми кодами статусов

от автора

Привет, Хабр! Работая над библиотекой-обёрткой REST API, я столкнулся с проблемой. Для тестирования обработки ошибочных кодов ответа сервера (400, 500, 403 и т.д.) необходимо искусственно создавать условия на сервере для получения соответствующих кодов. При правильно настроенном сервере, например, непросто получить ошибку 500. А тестировать функции-обработчики ошибок как-то надо. Я написал небольшое API, которое генерирует ошибочные ответы сервера — httpme.tk

Как применять в тестировании?

Например, есть такой код (python3):

from requests import session as requests_session  session = requests_session() session.hooks = {     'response': lambda r, *args, **kwargs: raise AccessError('Доступ закрыт, т.к. сервер подключен к другой БД') if r.status_code == 403  else pass }  class AccessError(Exception):     """ 'своя' ошибка """     pass  def getter(url):     return session.get(url) 

Если кратко — в коде есть функция, которая возвращает ответ сервера на GET-запрос на заданный URL, если в результате выполнения запроса возникает ошибка 403 — вызывается внутреннее исключение модуля AccessError.

Этот код надо протестировать и отладить. Cоздать вручную условия для ошибки 403, а уж тем более, например, 500 (сервер слишком хорошо работает) довольно непросто. Тестировщику не важно, при каких условиях сервер выдаст ошибку 403: он тестирует не само API (например), а функцию, которая к нему обращается. Поэтому для тестирования вызова исключения при коде статуса 403 он может сделать вот так (python3 + pytest):

import pytest from mymodule import   def test_forbidden():     with pytest.raises(AccessError):         getter('http://httpme.tk/403')

Как пользоваться?

Очень просто. Отправьте на сервер GET-запрос в формате http://httpme.tk/<status_code>. Например так (cURL):

curl -G http://httpme.tk/500

Или так (python3):

from requests import get  get('http://httpme.tk/408')  # <Response [408]>

А что внутри?

А внутри маленькое Flask-приложение, вызывающее функцию abort(status_code) на каждый запрос.

Ссылка на GitHub

На этом всё!

Интересно услышать оценку полезности данного сервиса сообществом.

ссылка на оригинал статьи https://habr.com/ru/post/511422/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *