hub.oscript.io
hub.oscript.io
Войти

httpbinпакет

Сервис тестирования HTTP клиента

автор: Dmitry Ivanovскачиваний: 20репозиторий: github.com/Stivo182/oscript-httpbin

Пакет лежит в основном пуле хаба, а opm знает этот хаб по умолчанию: короткой формы достаточно.

opm install httpbin

Скачанный файл ставится командой opm install -f <файл> — сеть для этого уже не нужна.

Описание

httpbin

Release Тестирование Статус порога качества

Локальный сервис для тестирования и отладки HTTP-запросов, реализованный на OneScript с использованием фреймворка WINOW. Проект предоставляет функциональность, аналогичную httpbin.org, поддерживая большинство оригинальных эндпоинтов.

Установка <a name="installation"></a>

opm install httpbin

Использование <a name="usage"></a>

CLI <a name="cli"></a>

Запустите сервис с помощью команды:

httpbin run

После запуска сервис будет доступен по адресу: http://127.0.0.1:3333

Опции команды:

Опция Описание Значение по умолчанию
-h, --host Имя хоста или IP-адрес сервиса 127.0.0.1
-p, --port TCP-порт сервиса 3333
-r, --routes, --routes-handlers Путь к файлу или каталогу с пользовательскими контроллерами

Тестирование через OneUnit <a name="testing-oneunit"></a>

# test.os

#Использовать asserts
#Использовать 1connector
#Использовать httpbin

Перем HttpBin;

&ТестовыйНабор(Характер = "Одиночка")
Процедура ПриСозданииОбъекта()
КонецПроцедуры

&ПередВсеми
Процедура ПередЗапускомТестов() Экспорт
    HttpBin = Новый HttpBin();
    HttpBin.Запустить();
КонецПроцедуры

&ПослеВсех
Процедура ПослеЗапускаТестов() Экспорт
    HttpBin.Остановить();
КонецПроцедуры

&Тест
Процедура ТестДолжен_ПроверитьПараметрыЗапроса() Экспорт

    ПараметрыЗапроса = Новый Структура();
    ПараметрыЗапроса.Вставить("key", "value");

    Ответ = КоннекторHTTP.Get(HttpBin.URL("/get"), ПараметрыЗапроса);

    Ожидаем.Что(Ответ.КодСостояния).Равно(200);
    Ожидаем.Что(Ответ.Заголовки["Content-Type"]).Содержит("application/json");
    Ожидаем.Что(Ответ.Json()["args"]["key"]).Равно("value");

КонецПроцедуры

Тестирование через 1testrunner <a name="testing-1testrunner"></a>

# test.os

#Использовать asserts
#Использовать 1connector
#Использовать httpbin

Перем HttpBin;

&Инициализация
Процедура ПередЗапускомТестов() Экспорт
    HttpBin = Новый HttpBin();
    HttpBin.Запустить();
КонецПроцедуры

&Завершение
Процедура ПослеЗапускаТестов() Экспорт
    HttpBin.Остановить();
КонецПроцедуры

&Тест
Процедура ТестДолжен_ПроверитьПараметрыЗапроса() Экспорт

    ПараметрыЗапроса = Новый Структура();
    ПараметрыЗапроса.Вставить("key", "value");

    Ответ = КоннекторHTTP.Get(HttpBin.URL("/get"), ПараметрыЗапроса);

    Ожидаем.Что(Ответ.КодСостояния).Равно(200);
    Ожидаем.Что(Ответ.Заголовки["Content-Type"]).Содержит("application/json");
    Ожидаем.Что(Ответ.Json()["args"]["key"]).Равно("value");

КонецПроцедуры

Swagger UI

На стартовой странице сервиса (по умолчанию: http://127.0.0.1:3333) доступна интерактивная документация API через Swagger UI, а также возможность отправки запросов и получения ответов.

Совместимость <a name="compatibility"></a>

Поддерживаемые платформы и версии OneScript::

ОС OneScript 1.9 OneScript 2.0
Windows ✅ ✅
Linux ✅ ✅
MacOS ✅ ✅

Программный интерфейс <a name="api"></a>

Класс HttpBin

Класс предназначен для управления жизненным циклом локального HTTP-сервиса. Поддерживает текучий интерфейс (fluent API).

Синтаксис

Новый HttpBin(<Хост>, <Порт>)

Параметры

<ins><Хост> (необязательный)</ins></br> Тип: Строка.</br> IP-адрес или имя хоста.</br> По умолчанию: 127.0.0.1

<ins><Порт> (необязательный)</ins></br> Тип: Число.</br> Номер TCP-порта.</br> По умолчанию: 3333

Методы

Метод Описание
Запустить() Запускает сервис в синхронном режиме с ожиданием полной готовности.
ЗапуститьАсинх() Запускает сервис в асинхронном режиме без ожидания готовности.
Остановить() Останавливает сервис.
ОжидатьЗавершения() Ожидает завершения работы сервиса, приостанавливая выполнение текущего потока.
Отвечает() Проверяет доступность сервиса через HTTP-запрос.
Активен() Проверяет, что процесс сервиса запущен и не завершен.
Порт() Возвращает номер TCP-порта, на котором работает сервис.
УстановитьПорт(<Порт>) Устанавливает TCP-порт для запуска сервиса.
Хост() Возвращает имя хоста или IP-адрес сервиса.
УстановитьХост(<Хост>) Устанавливает имя хоста или IP-адрес для запуска сервиса.
URL(<АдресРесурса>) Формирует полный URL-адрес сервиса с опциональным путем к ресурсу.
ТаймаутЗапуска() Возвращает текущее значение таймаута запуска сервиса.
УстановитьТаймаутЗапуска(<Таймаут>) Устанавливает максимальное время ожидания запуска сервиса. Применяется при синхронном запуске.
РасположениеКонтроллеров() Возвращает текущий путь к файлу или каталогу с кастомными контроллерами.
УстановитьРасположениеКонтроллеров(<Расположение>) Устанавливает путь к файлу или каталогу с кастомными контроллерами, определяющими точки маршрута сервиса.

Пользовательские эндпоинты <a name="custom-endpoints"></a>

Сервис поддерживает подключение пользовательских контроллеров.

Контроллер - это класс OneScript с аннотацией &Контроллер. В классе определяются точки маршрута (эндпоинты) аннотацией &ТочкаМаршрута. Подробнее см. в документации WINOW.

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

&Контроллер("/order")
Процедура ПриСозданииОбъекта()
КонецПроцедуры

&ТочкаМаршрута("add")
Процедура Главная(Ответ) Экспорт
    // Бизнес-логика
КонецПроцедуры

Подключение контроллеров

Через API

HttpBin = Новый HttpBin()
    .УстановитьРасположениеКонтроллеров("./path/to/routes")
    .Запустить();

Через CLI

httpbin run --routes './path/to/routes'

Ограничения <a name="limitations"></a>

  • Отсутствие поддержки HTTPS: Сервис работает только по протоколу HTTP.

Сравнение с httpbin.org <a name="comparison"></a>

Эндпоинт oscript-httpbin httpbin.org
/ip ✅ ✅
/uuid ✅ ✅
/uuid/:n ✅ ❌
/user-agent ✅ ✅
/headers ✅ ✅
/get ✅ ✅
/post ✅ ✅
/put ✅ ✅
/patch ✅ ✅
/delete ✅ ✅
/anything ✅ ✅
/anything/:anything ✅ ✅
/base64/:value ✅ ✅
/encoding/utf8 ✅ ✅
/gzip ✅ ✅
/deflate ✅ ✅
/brotli ✅ ✅
/zstd ✅ ❌
/status/:code ✅ ✅
/response-headers?key=val ✅ ✅
/redirect/:n ✅ ✅
/redirect-to?url=foo ✅ ✅
/redirect-to?url=foo&status_code=307 ✅ ✅
/relative-redirect/:n ✅ ✅
/absolute-redirect/:n ✅ ✅
/cookies ✅ ✅
/cookies/set?name=value ✅ ✅
/cookies/set/:name/:value ✅ ✅
/cookies/delete?name ✅ ✅
/basic-auth/:user/:passwd ✅ ✅
/hidden-basic-auth/:user/:passwd ✅ ✅
/digest-auth/:qop/:user/:passwd/:algorithm ❌ ✅
/digest-auth/:qop/:user/:passwd ❌ ✅
/bearer ✅ ✅
/stream/:n ❌ ✅
/delay/:n ✅ ✅
/drip?numbytes=n&duration=s&delay=s&code=code ❌ ✅
/range/:n?duration=s&chunk_size=code ❌ ✅
/html ✅ ✅
/robots.txt ✅ ✅
/deny ✅ ✅
/cache ✅ ✅
/cache/:n ✅ ✅
/etag/:etag ✅ ✅
/bytes/:n ✅ ✅
/stream-bytes/:n ❌ ✅
/links/:n ✅ ✅
/links/:n/:offset ✅ ✅
/image ✅ ✅
/image/png ✅ ✅
/image/jpeg ✅ ✅
/image/webp ✅ ✅
/image/svg ✅ ✅
/forms/post ✅ ✅
/xml ✅ ✅
/json ✅ ✅