Тестирование HTTP-сервисов. HTTPСервисЗапрос
Тестирование HTTP-сервисов в 1С может быть достаточно сложной задачей. Основные трудности связаны с отсутствием возможности программного вызова HTTP-сервисов и создания объекта HTTPСервисЗапрос
из кода 1С. В данной статье мы рассмотрим, как можно обойти эти проблемы и упростить тестирование HTTP-сервисов с использованием заглушек и библиотеки YAxUnit.
Проблемы тестирования HTTP-сервисов
При тестировании HTTP-сервисов в 1С разработчики сталкиваются с двумя ключевыми проблемами:
-
Нет возможности программного вызова HTTP-сервисов.
В 1С отсутствуют встроенные средства для вызова HTTP-сервисов напрямую из кода, что делает тестирование сложным и требует дополнительных усилий. -
Нет возможности создать и настроить объект
HTTPСервисЗапрос
.
ОбъектHTTPСервисЗапрос
нельзя создать и настроить из кода 1С, что затрудняет тестирование сервисов, использующих этот объект.
Эти проблемы приводят к необходимости либо публиковать решение на web-сервере, либо вносить изменения в код сервиса, чтобы он принимал структуры вместо объекта HTTPСервисЗапрос
. Однако такие подходы не всегда удобны и требуют дополнительных усилий.
Решение проблемы программного вызова сервиса
Для решения проблемы программного вызова HTTP-сервисов рекомендуется вынести логику обработки запросов в общий модуль. Это позволяет тестировать методы сервиса независимо от его реализации.
Пример выноса логики в общий модуль:
Функция ПутьКТоваруGET(Запрос)
Возврат HTTPСервисТовары.ПутьКТоваруGET(Запрос);
КонецФункции
Функция ПутьКТоваруDELETE(Запрос)
Возврат HTTPСервисТовары.ПутьКТоваруDELETE(Запрос);
КонецФункции
Теперь методы сервиса можно вызывать из тестов, передавая заглушки вместо реальных объектов.
Проблема использования HTTPСервисЗапрос
Первоначально, при тестировании HTTP-сервисов, которые принимают на вход объект HTTPСервисЗапрос
, разработчики сталкивались с проблемой отсутствия возможности создать и настроить этот объект из кода 1С. Несколько первых тестов были реализованы с использованием структур, что, однако, не всегда было удобно и требовало дополнительных усилий для поддержания тестов.
Для эмуляции объекта HTTPСервисЗапрос
можно использовать объект HTTPЗапрос
, который реализует методы работы с телом запроса. Однако этот подход также имеет ограничения.
Возможности заглушки
Для упрощения процесса тестирования возникла идея создания заглушки, которая имитирует объект HTTPСервисЗапрос
и реализует его интерфейс. Эта заглушка может быть настроена из тестов, что значительно упрощает процесс тестирования HTTP-сервисов.
Заглушка для HTTPСервисЗапрос
, реализованная в библиотеке YAxUnit (ЮТест.Данные().HTTPСервисЗапрос
), предоставляет следующие возможности:
Реализация методов и свойств HTTPСервисЗапрос
-
Свойства:
HTTPМетод
/HTTPMethod
БазовыйURL
/BaseURL
Заголовки
/Headers
ОтносительныйURL
/RelativeURL
ПараметрыURL
/URLParameters
ПараметрыЗапроса
/QueryOptions
-
Методы:
ПолучитьТелоКакДвоичныеДанные()
/GetBodyAsBinaryData()
ПолучитьТелоКакПоток()
/GetBodyAsStream()
ПолучитьТелоКакСтроку()
/GetBodyAsString()
Методы настройки
Заглушка также предоставляет методы настройки, реализованные в виде текучих выражений (fluent API), что делает процесс настройки более удобным и читаемым.
-
Установка тела запроса:
УстановитьТелоКакДвоичныеДанные()
УстановитьТелоКакСтроку()
УстановитьТелоКакСтрокуJSON()
-
Методы установки свойств:
ДобавитьЗаголовок()
ДобавитьПараметрЗапроса()
ДобавитьПараметрURL()
Метод()
БазовыйURL()
ОтносительныйURL()
Пример использования заглушки
Пример использования заглушки для тестирования HTTP-сервиса:
Процедура ТестHTTPСервиса()
// Создаем заглушку HTTPСервисЗапрос
Запрос = ЮТест.Данные().HTTPСервисЗапрос();
// Настраиваем заглушку
Запрос.Метод("POST")
.БазовыйURL("http://example.com")
.ОтносительныйURL("/api/v1/resource")
.ДобавитьЗаголовок("Content-Type", "application/json")
.УстановитьТелоКакСтрокуJSON(Новый Структура("key", "value"));
// Вызываем тестируемый сервис
Результат = МойHTTPСервис.ОбработатьЗапрос(Запрос);
// Проверяем результат
ЮТест.ОжидаетЧто(Результат.ПолучитьТелоКакСтроку()).Равно("{""status"":""success""}");
КонецПроцедуры
Заключение
Использование заглушек для HTTPСервисЗапрос
значительно упрощает процесс тестирования HTTP-сервисов в 1С. Благодаря возможностям, предоставляемым библиотекой YAxUnit, теперь можно легко настраивать и тестировать HTTP-сервисы, не прибегая к дополнительным изменениям в коде или публикации на web-сервере. Это делает процесс разработки и тестирования более гибким и эффективным.