Перейти к основному содержимому

Тестирование HTTP-сервисов. HTTPСервисЗапрос

Тестирование HTTP-сервисов в 1С может быть достаточно сложной задачей. Основные трудности связаны с отсутствием возможности программного вызова HTTP-сервисов и создания объекта HTTPСервисЗапрос из кода 1С. В данной статье мы рассмотрим, как можно обойти эти проблемы и упростить тестирование HTTP-сервисов с использованием заглушек и библиотеки YAxUnit.

Проблемы тестирования HTTP-сервисов

При тестировании HTTP-сервисов в 1С разработчики сталкиваются с двумя ключевыми проблемами:

  1. Нет возможности программного вызова HTTP-сервисов.
    В 1С отсутствуют встроенные средства для вызова HTTP-сервисов напрямую из кода, что делает тестирование сложным и требует дополнительных усилий.

  2. Нет возможности создать и настроить объект 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-сервере. Это делает процесс разработки и тестирования более гибким и эффективным.