Русский
Русский
English
Статистика
Реклама

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

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


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


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


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

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


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


import pytestfrom 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 getget('http://httpme.tk/408')  # <Response [408]>

А что внутри?


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


Ссылка на GitHub


На этом всё!


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

Источник: habr.com
К списку статей
Опубликовано: 20.07.2020 14:14:41
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Api

Тестирование веб-сервисов

Flask

Http-запрос

Http

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru