Руководство оператора#

Доступ к приложению#

В данном разделе описана Авторизация и Завершение работы пользователем в компоненте Сервис умных заглушек и контрактного тестирования (SberMock) (AMCS) (далее — Mock). Данный компонент предназначен для обеспечения прикладных команд разработки возможностью тестирования интеграционного взаимодействия до выхода на стенды, где представлены смежные системы или до реализации потребляемого сервиса/API только на основе контракта.

Для работы с сервисом можно использовать следующие браузеры:

  • Яндекс (19.10+) - рекомендовано

  • Google Chrome (79.0+) - опционально

  • Safari (10.12+) - опционально

Для корректной работы сервиса убедитесь, что следующие порты открыты:

  • 80 для HTTP

  • 443 для HTTPS

Авторизация#

Для перехода в Mock, откройте страницу в браузере и войдите на страницу Авторизации. Откроется страница, где необходимо ввести имя пользователя и пароль и нажать Войти:

Компонент платформы

В случае ввода некорректного имени пользователя или пароля кратковременно будет отображено соответствующее уведомление.

Если введенные данные были корректны, откроется Главная страница Mock:

Компонент платформы

Примечание

Все функции Mock доступны только авторизованным пользователям.

Завершение работы#

Для выхода из Mock (возврата к странице авторизации пользователя), в правом верхнем углу любой экранной формы Mock нажмите на имя пользователя, а затем выберите пункт Выход в выпадающем меню:

Компонент платформы

Откроется страница авторизации пользователя в Mock.

Использование приложения оператором#

Функциональность, описанная в данном разделе, доступна пользователю с ролью Пользователь.

Навигация в интерфейсе продукта#

Примечание

Все функции Mock доступны всем авторизованным пользователям.

В данном разделе описаны навигационные кнопки для работы с сервисом заглушек API — Mock.

Кнопка

Описание

Компонент платформы

Кнопка для перехода на главную страницу (с боковой панелью)

Компонент платформы

Кнопка для перехода на страницу проектных областей (с боковой панелью)

Конфигурация транспорта проектной области#

Примечание

Данная функциональность доступна пользователю с ролью Пользователь.

Для просмотра Конфигурации транспорта проектной области нажмите кнопку Конфигурация.

Компонент платформы

Ниже представлена открывшаяся форма Конфигурации транспорта проектной области. На ней представлены конфигурационные параметры для эмуляций выбранной проектной области:

Компонент платформы

REST-заглушки#

Примечание

Данная функциональность доступна пользователю с ролью Пользователь.

Добавление новой REST-заглушки#

В данном разделе описан процесс создания новой REST-заглушки для проектной области.

Примечание

Добавление REST-заглушки возможно только в проектной области, в которой включен транспортный модуль REST.

Установка обязательных параметров REST-эмуляции#
  1. На форме выбранной Проектной области нажмите кнопку Добавить и выберите RESТ эмуляция.

    Компонент платформы

    Ниже представлена открывшаяся форма Создания REST-эмуляции:

    Компонент платформы

  2. Введите наименование заглушки в поле Заголовок.

  3. В поле Endpoint URL введите значение, уникальное для REST-заглушек в выбранной проектной области. Значение должно начинаться с символа слеша (/).

    Вы можете использовать параметры в URL запроса при обращении к эмуляции. Для REST-эмуляций реализована возможность передать в URL запроса произвольный набор динамических параметров и обработать их определенным образом в теле эмуляции с помощью скрипта.

    Чтобы использовать динамический параметр, необходимо определить его как сегмент в endpoint URL /base/url/{dynamic}, где в {dynamic} пользователь может подставить произвольное значение при вызове эмуляции (например, /base/url/100500 или /base/url/some-text). В результате такого вызова эмуляции с параметром в Groovy скрипте тела эмуляции пользователю под именем dynamic должно быть доступно значение передаваемого параметра (100500 или some-text в примере).

    Если задать параметр в виде регулярного выражения (например, /base/url/{dynamic:\*regexp:\\\[0-9\\\]+\*}), то при вызове эмуляции будет проверяться, совпадает ли передаваемое значение с заданным регулярным выражением. Если значение передаваемого параметра не удовлетворяет условиям регулярного выражения, то такая эмуляция должна считаться неподходящей. В таком случае будет выдан ответ, что эмуляция не найдена (в примере будет совпадение только при вызове /base/url/100500).

    Также можно задать параметр в виде ключ:сегмент:количество (например, /base/url/{dynamic:segment:2}). В этом случае при вызове со значениями параметра вида /base/url/100500/one/two/three в переменной в скрипте значение dynamic будет состоять из количества сегментов, указанного в параметре segment после :. Значение segment указывает, сколько элементов сегмента пути вместе с текущим будет сохранено в переменную (в примере значение переменной будет равно 100500/one). Для сохранения в переменную всех сегментов из URL запроса необходимо указать dynamic:end. В этом случае будут сохранены все сегменты до конца, начиная с dynamic.

    Ниже представлен пример параметризации endpoint URL:

    /base/dynamic/{custom:segment:4}/{param1}/var/{param2}/{param3:end}/some/added/path/params

  4. Выберете из выпадающего списка одно значение HTTP-метода :

    • GET (установлен по умолчанию)

    • POST

    • PUT

    • DELETE

    • PATCH

    • HEAD

  5. Из выпадающего списка выберете стандартное для HTTP-протокола значение Код ответа, необходимое для возврата эмуляцией ответа на запрос (код 200:ОК установлен по умолчанию).

  6. В поле Domain необходимо выбрать одно из значений домена, зарегистрированных для текущей проектной области.

Установка необязательных параметров REST-эмуляции и HTTP-заголовков ответа эмуляции#

В средней части экранной формы на вкладках расположены поля ввода параметров, которые расширяют функциональность эмуляции и не являются обязательными:

Компонент платформы

  1. C помощью кнопки Добавить заголовок на вкладке Headers можно задать заголовки, которые эмуляция будет возвращать в ответе. Управлять созданными заголовками (удалять, изменять, отключать) можно через Список заголовков:

    Компонент платформы

  2. На вкладке Cookies с помощью кнопки Добавить Cookie можно задать параметры cookie, которые эмуляция будет возвращать в ответе. Управлять созданными cookie (удалять, изменять, отключать) можно через Список Cookies:

    Компонент платформы

  3. На вкладке Credeintials можно установить полномочия на обращение к этой эмуляции. По нажатию на кнопку Создать нового можно добавить новую учетную запись: задать имя пользователя и пароль Basic-авторизации для вызова этой эмуляции:

    Компонент платформы

  4. Если в тексте эмуляции используются переменные, на вкладке Область переменных можно выбрать из выпадающего списка ранее созданную Область переменных. Более подробную информацию вы можете найти в разделе Использование Stateful в REST-заглушке.

  5. На вкладке Прочее можно задать таймаут для эмуляции задержки ответа:

    Компонент платформы

  1. Выберите значение Тип шаблона:

    • Groovy

    • Json

    • Xml

  2. Заполните поле Текст эмуляции в соответствии с выбранным типом шаблона. Примеры скриптов для создания динамических сценариев представлены в разделах Использование Groovy и FreeMarker в REST-заглушках и Примеры Groovy шаблонов REST-эмуляций.

Для отмены создания новой заглушки нажмите кнопку Отмена.

Для завершения процесса по созданию новой заглушки и ее сохранения нажмите кнопку Сохранить.

На форме выбранной Проектной области в списке заглушек появится созданная заглушка.

Если одно или несколько обязательных полей формы создания новой заглушки не будет заполнено, заглушка не будет создана, и в экранной форме появится уведомление под каждым незаполненным обязательным полем:

Компонент платформы

Приватные REST-заглушки#

Примечание

Данная функциональность доступна пользователю с ролью Пользователь.

В данном разделе описан процесс создания и вызова пользователем приватных эмуляций типа REST.

Обычная REST-эмуляция доступна для вызова любым пользователям, имеющим сетевой доступ к серверу заглушек. Функционал приватности позволяет настроить вызов/доступ к эмуляции по ключу (API-key). Ключ доступа к REST-эмуляциям уникален в пределах проектной области, то есть все приватные эмуляции в проектной области доступны с одним ключом, но недоступны без ключа или с некорректным ключом.

Генерация ключа#

Генерация ключа выполняется пользователем Проектной области. Чтобы сгенерировать ключ, в пользовательском интерфейсе Mock откройте страницу конфигурации транспорта: Главная | Mock-проекты | Мои проекты | Выбрать проектную область | Конфигурация | Конфигурация транспорта. На открывшейся странице нажмите кнопку Обновить ключ для вызова приватных заглушек на панели REST:

Компонент платформы

После нажатия кнопки будет заполнено или обновлено значение ключа:

Компонент платформы

Настройка приватной заглушки#

При создании или редактировании REST-эмуляции на экранной форме можно выбрать опцию Сделать заглушку приватной.

Компонент платформы

Примечание

Опции видимости и приватности заглушки - это разные настройки. Видимость ограничивает доступ к содержимому эмуляции (PRIVATE ограничивает видимость заглушки только пределами проектной области, PUBLIC_READONLY предоставляет доступ на чтение параметров заглушки всем пользователям через каталог Публичных проектов). Приватность устанавливает ограничение на вызов этой заглушки.

При выборе опции Сделать заглушку приватной будет отображена подсказка и значение ключа, сгенерированного в конфигурации REST-транспорта:

Компонент платформы

Заглушка, сохраненная с опцией приватности, будет корректно отвечать только на те запросы, в которых присутствует заголовок private-emulation-key с корректным значением ключа. В остальных случаях заглушка вернет ответ об отсутствии ключа или о некорректном значении ключа.

На форме Проектной области в списке заглушек появится созданная заглушка.

Генерация REST-заглушки по спецификации OpenAPI (OAS3)#

Примечание

Данная функциональность доступна пользователю с ролью Пользователь.

В данном разделе описан процесс создания эмуляции типа REST по спецификации OpenAPI (OAS3).

Для генерации REST-эмуляции по файлу спецификации необходимо на экранной форме Проектной области нажать кнопку Загрузить OAS3. В открывшемся модальном окне нужно выбрать домен, в котором будет создана эмуляция (из числа заданных для текущей проектной области), и локальный файл спецификации (поддерживается спецификация в формате yaml или json).

Компонент платформы

При загрузке файла автоматически будут выполнены следующие проверки:

  • на соответствие формату (при некорректном формате пользователю возвращается сообщение с указанием причины отказа в создании эмуляции);

  • на наличие в загруженной спецификации примеров ответа для найденных в спецификации методов.

При успешной поверке файла на соответствие формату и наличие примеров выполняется проверка на наличие в текущей Проектной области эмуляций, описанных в спецификации. Если эмуляции с описанными в спецификации параметрами уже есть, пользователю возвращается сообщение с указанием причины отказа в создании эмуляции.

Если предыдущие проверки пройдены, автоматически создаются REST-эмуляции согласно описанным в спецификации параметрам. В данном случае пользователю возвращается сообщение об успешном создании эмуляций, и созданные эмуляции появляются в списке эмуляций на экранной форме Проектной области.

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

Компонент платформы

Для созданных по спецификации эмуляций на форме их редактирования доступен функционал просмотра спецификации через Swagger editor и отвязки от нее. После отвязки эмуляций от спецификации они доступны для редактирования аналогично созданным любым иным способом.

Использование Stateful в REST-заглушке#

Примечание

Данная функциональность доступна пользователю с ролью Пользователь.

В данном разделе описан процесс работы с Mock с применением языка скриптов Groovy и областей переменных.

1. Авторизация#

Выполните вход на стартовую страницу Mock по инструкции из раздела Доступ к приложению | Авторизация.

2. Создание области переменных#

  1. Выберите любую из доступных Проектных областей с включенным транспортом REST.

    Компонент платформы

  2. Нажмите кнопку Области переменных, чтобы перейти к форме Список областей.

    Компонент платформы

  3. Нажмите кнопку Создать новую область:

    Компонент платформы

  4. В открывшейся форме Создание области заполните следующие поля и нажмите кнопку Сохранить:

    • Наименование области: Демонстрационная область

    • Описание: Демонстрационная область переменных

    Компонент платформы

    Выполнится сохранение области переменных, и появятся элементы экранной формы для добавления переменных и пустой список переменных.

  5. Нажмите кнопку Добавить переменную:

    Компонент платформы

  6. Введите параметры переменной:

    • Имя: var01

    • Тип: Строка

    • Значение: 100500

    • Значение по умолчанию: 0

    • Переключатель Константа: выкл

    • Описание: Демонстрационная переменная 1

    Компонент платформы

  7. Нажмите кнопку Сохранить. В таблице Список переменных появится строка с записью о созданной переменной:

    Компонент платформы

    Также можно добавить необходимое количество других переменных (в том числе из файла).

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

    Компонент платформы

Нажатие строки с записью об области переменных откроет экранную форму Информация области переменных. На этой форме можно просмотреть список всех переменных этой области и их текущее значение. Также эта форма позволяет сбросить значение конкретной или всех переменных к значению по умолчанию.

Компонент платформы

3. Создание заглушки#

В созданной ранее Проектной области создайте новую REST-эмуляцию по инструкции Добавление новой REST-заглушки со следующими параметрами:

  • Наименование эмуляции: Тестовая заглушка REST 1

  • Endpoint URL: /mock007

  • HTTP метод: GET

  • Тип шаблона: groovy

  • Область переменных: Демонстрационная область (созданная на предыдущем шаге)

Введите следующий код в поле Текст эмуляции:

def* counter = Integer.valueOf(var01) // Считываем значение переменной и приводим его к целочисленному значению
++counter // Увеличиваем полученное значение на единицу
var01 = counter // Сохраняем инкрементированное значение обратно в переменную

return [
fromVar: var01 // Возвращаем в ответе эмуляции обновленное значение переменной
]

Для завершения процесса создания/добавления Новой заглушки нажмите кнопку Сохранить. На странице Проектной области появится новая строка с созданной заглушкой.

4. Получение полного URL эмуляции#

Нажмите на строку REST-заглушки на форме ее Проектной области:

Компонент платформы

В открывшейся форме с подробной информацией скопируйте полный endpoint URL для этой REST-эмуляции:

Компонент платформы

5. Вызов эмуляции#

В общем случае для тестового вызова REST-эмуляции рекомендуется использовать curl, Postman или другие инструменты, полноценно поддерживающие все методы и параметры протокола HTTP. Для демонстрации работы с переменными в созданной выше заглушке задан метод GET, для ее вызова будет достаточно браузера.

Вставьте в адресную строку браузера скопированный URL созданной REST-эмуляции и выполните HTTP-запрос. Браузер должен отобразить ответ эмуляции со значением переменной, заданной на этапе создания Области переменных:

Компонент платформы

При каждом следующем обращении к этой эмуляции (обновлении страницы браузера) Groovy-скрипт из тела эмуляции будет инкрементировать значение этой переменной и возвращать его в ответе эмуляции:

Компонент платформы

Это означает, что созданная заглушка с Groovy-скриптом и переменной работает корректно, а сохраненные в переменной данные доступны для последующего использования как этой, так и другими переменными, аналогично настроенными на эту же область переменных.

Использование Groovy и FreeMarker в REST-заглушках#

Примечание

Данная функциональность доступна пользователю с ролью Пользователь.

В REST-эмуляциях для формирования динамических данных в ответе на запрос можно воспользоваться двумя механизмами:

  • формирование данных на основе Groovy-скрипта, в том числе с использованием Spring Cloud Contract DSL Response,

  • формирование данных при помощи шаблонов FreeMarker.

Использование Groovy в REST-эмуляциях#

Для быстрого доступа к переменным запроса в редакторе текста эмуляции с Groovy-шаблоном воспользуйтесь кнопкой Переменные в заголовке блока:

Компонент платформы

Также в редакторе текста эмуляции доступна автоподстановка переменных (при нажатии Ctrl+Space):

Компонент платформы Компонент платформы

Для REST-эмуляций с Groovy-шаблоном в теле скрипта доступны следующие переменные:

  • request — запрос, включающий в себя следующие поля:

    Поле

    Тип

    Описание

    request.query

    Map<String, String>

    GET параметры запроса

    request.path

    List<String>

    сегменты пути запроса

    request.headers

    Map<String, String>

    заголовки запроса

    request.body

    если Content-Type = application/json, то Map<String, Object>,
    в остальных случаях — String

    тело запроса

    request.rawBody

    String

    необработанное тело запроса в текстовом формате

  • response — ответ, включающий в себя следующие поля:

    Поле

    Описание

    response.headers

    набор HTTP-заголовков

    response.statusCode

    HTTP-status

    response.cookies

    множество HTTP cookies

  • scopeVariables — ассоциативный массив, содержащий все переменные из области переменных, привязанной к текущей эмуляции. Ключом массива служит имя переменной, а значением — значение переменной. Например, если в области переменных есть переменная с именем counter, то получить её значение можно одним из следующих способов: scopeVariables.get('counter') или scopeVariables['counter'].

При использовании динамических переменных в URL заглушки (например, /base/path/clientId/{dynamicValue}) имя переменной будет доступно в скрипте. Значение переменной будет взято из URL. Для запроса вида /base/path/clientId/1234567890 значение переменной dynamicValue будет равно 1234567890 в строковом представлении.

Помимо переменных запроса, в скрипте доступны все переменные из области переменных, к которой привязана эмуляция. Результат исполнения Groovy-скрипта будет представлен в виде JSON. Обратите внимание, что скрипт не должен возвращать null.

Примечание

Если в скрипте должна быть реализована какая-либо сложная логика, можно писать скрипт локально в IDE, используя отладчик. При этом переменные из запроса (которые будут доступны в run time) для локальной отладки можно задать в коде.

Использование Spring Cloud Contract DSL response в REST-эмуляциях#

Для REST-эмуляций с Groovy-шаблоном доступны SCC DSL responses. Ниже представлен пример простейшего SCC DSL response:

return ResponseDsl.make {
    status OK()
    body(value: "some value")
    headers {
        header(HttpHeaders.AUTHORIZATION, "Bearer token\")
    }
    cookies {
        cookie(\"cookieName\", \"cookieValue\")\
    }
}

В случае использования DSL, скрипт тела эмуляции должен возвращать объект типа Response, полученный в результате вызова ResponseDsl.make.

Примечание

Если необходимо реализовать сложный сценарий, можно воспользоваться локальной отладкой скрипта в IDE, подключив зависимость GAV DSL, как показано ниже. Без этой зависимости скрипт будет обрабатываться, как обычная Groovy-заглушка.

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-contract-spec</artifactId>
    <version>2.1.4.RELEASE</version>
</dependency>

В теле SCC DSL Response доступны следующие параметры:

Параметр

Описание

body(...)

тело ответа

headers(...)

набор HTTP-заголовков

status(...)

HTTP-status

Использование FreeMarker в REST-эмуляциях#

Для быстрого доступа к переменным запроса в редакторе текста эмуляции с FreeMaker-шаблоном также можно воспользоваться кнопкой Переменные в заголовке блока:

Компонент платформы

Для REST-эмуляций с XML- и JSON-шаблоном можно использовать синтаксис шаблонизатора FreeMarker. При этом в контексте шаблонизатора доступны следующие переменные из запроса:

Переменная

Тип

Описание

request.query

Map<String, String>

query-параметры запроса

request.path

List<String>

сегменты пути запроса относительно базового URL проектной области

request.headers

Map<String, String>

заголовки запроса

request.body

Map<String, Object>

тело запроса (доступно, если тело запроса имеет тип application/json, application/xml или text/xml)

request.rawBody

String

необработанное тело запроса в текстовом формате

Также могут быть использованы статические методы из JDK c использованием statics:

${statics["java.util.UUID"].randomUUID().toString()}

Пример тела REST-эмуляции с применением шаблонизатора FreeMarker представлен ниже. Для проверки работы этой эмуляции в URL должен присутствовать query-параметр count: emulation_url?count=3.

{
    "id": "${statics["java.util.UUID"].randomUUID().toString()}",

    "result": {
    "code": 200,
    "message": "Ok",
    "items": [

         <#assign count = request.query['count']?number>
         <#list 1..count as idx>
             {
                 "index": ${idx},
                 "id": "${statics["java.util.UUID"].randomUUID().toString()}"
             }

         <#if idx?is_last == false>,</#if>
         </#list>
    ]
}

Также в контексте шаблонизатора доступны все переменные из области переменных, к которой привязана эмуляция. Данные переменные можно использовать так же, как и переменные запроса, используя следующий синтаксис: ${someVariable}.

Если при вызове эмуляции необходимо обновить и сохранить значения переменных, необходимо использовать предоставляемую сервисом директиву <@saveVariables parameters/>, где parameters — набор сохраняемых переменных в виде ключ=значение.

Например, предположим, что начальное значение переменной someVariable равно 1. Если в теле заглушки присутствуют приведенные ниже инструкции, в результате каждого вызова эмуляции значение переменной будет инкрементироваться:

<#assign countVar=someVariable?number>
<#assign countVar++>
<@saveVariables someVariable=countVar/>

Ниже представлен полный пример JSON-заглушки с синтаксисом FreeMarker, инкрементирующий statefull-переменную count (для работы заглушки данная переменная и сама заглушка должны быть в одной области переменных):

{
    "id": "$\{statics\["java.util.UUID"].randomUUID().toString()}",

    "result": {
        "code": "OK",
        "message": "Count from request ${count}",
        <#assign countVal=count?number>
        <#assign countVal++>
        "updated": "Count after increment ${countVal}"
        <@saveVariables count=countVal/>
    }
}

Асинхронный ответ REST-эмуляции#

Примечание

Данная функциональность доступна пользователю с ролью Пользователь.

В данном разделе описан процесс создания и вызова REST-эмуляции с асинхронным ответом.

Обычная REST-эмуляция подразумевает синхронный ответ: на обращение к ней эмуляция сразу же возвращает ответ в соответствии с HTTP-протоколом. На практике, бизнес-процессы часто требуют асинхронного ответа.

Например, простейший бизнес-сценарий обработки абстрактной заявки может выглядеть так:

  1. Отправка заявки (из тестируемого проекта в эмулируемую систему)

  2. Получение квитанции о приеме заявки в обработку (в тестируемый проект из эмулируемой системы)

  3. Асинхронный ответ (callback):

    1. Отправка результата обработки заявки (отчета) (из эмулируемой системы в тестируемый проект)

    2. Получение квитанции о получении отчета (в эмулируемую систему из тестируемого проекта)

Для реализации такого сценария достаточно двух последовательных встречных вызовов (запрос+ответ). В Mock для REST-эмуляций реализован функционал callbаck (обратный вызов), позволяющий эмулировать асинхронный ответ внешним вызовом с заданными пользователем параметрами.

Для создания RESТ-эмуляции с использованием асинхронного ответа создайте новую эмуляцию или откройте ранее созданную REST-эмуляцию (например, созданную по инструкции Использование Groovy и FreeMarker в REST-заглушках). В предлагаемом сценарии обычная заглушка отвечает за первую пару запрос-ответ из предложенного выше бизнес-сценария.

Чтобы активировать и настроить функционал асинхронного ответа, перейдите на вкладку Асинхронный ответ и активируйте его выключатель:

Компонент платформы

Компонент платформы

При активации выключателя откроются поля для ввода параметров обратного вызова (эмуляции асинхронного ответа):

Компонент платформы

Перечень и правила заполнения этих полей аналогичны параметрам обычной REST-эмуляции — для обратного вызова так же можно задать:

  • URL вызываемого API (в тестируемом проекте, ожидающем асинхронного ответа после вызова эмуляции);

  • метод запроса;

  • таймаут задержки (в миллисекундах), по истечении которого после ответа эмуляции будут выполнен обратный вызов (эмулирован асинхронный ответ);

  • заголовки запроса;

  • cookie запроса;

  • тип шаблона для формирования тела запроса;

  • тело запроса (допускается использование тех же переменных, что доступны для эмуляции).

Для завершения процесса по созданию/добавлению REST-эмуляции с функцией асинхронного ответа нажмите кнопку Сохранить.

При обращении к этой заглушке будет выполнена эмуляция синхронного ответа (обычный ответ на запрос) и эмуляция асинхронного ответа (обратный вызов). История обратных вызовов фиксируется в Истории так же, как и вызовы эмуляций, но с меткой Тип запроса = ASYNC.

Примеры groovy шаблонов REST-эмуляций#

Все заглушки можно вызвать, выполнив указанные команды в оболочке Linux или git bash на Windows (опционально).

Проверка наличия HTTP-заголовка в запросе#

В этом примере в возвращаемый объект добавляется дополнительное значение, если в полученном сообщении есть заголовок X-Request-Type со значением Accepted.

Проверка наличия HTTP-заголовка

def restResponse = ['value': 100, 'headerDetected': false]

if (request.headers['x-request-type'] == 'Accepted') {
    restResponse['headerDetected'] = true
}
return [data : restResponse]

Вызов эмуляции

curl "http://examples.mock.ru/example/check-header" --header "x-request-type:Accepted"

Добавление произвольного HTTP-заголовка в ответ#

В этом примере в ответное сообщение будет добавлен заголовок с помощью встроенных переменных. Если в коде задан заголовок с таким же именем, как и в настройках эмуляции, то значение будет заменено значением указанным в скрипте.

Добавление произвольного HTTP-заголовка в ответ

def restResponse = ['value': 100]
response.headers['newHeader'] = 'some-value'
return ["data" : restResponse]

Вызов эмуляции

curl --verbose "http://examples.mock.ru/example/header/add-custom"

Добавление произвольного HTTP-заголовка в ответ (DSL)#

В этом примере в ответное сообщение будет добавлен заголовок с помощью Spring Cloud DSL. Если в DSL задан заголовок с таким же именем, как и в переменной response.headers, то значение будет заменено значением указанным в DSL.

Добавление произвольного HTTP-заголовка в ответ (DSL)

def restResponse = ['value': 100]
return ResponseDsl.make {
    status OK()
    body(restResponse)
    headers {
        header('x-custom-header', 'header-value')
        header('x-additional-rate', '399')
    }
}

Вызов эмуляции

curl --verbose "http://examples.mock.ru/example/header/add-custom-dsl"

В этом примере cookie из запроса сохраняются в словарь, из которого затем происходит чтение нужного значения и его анализ.

Чтение HTTP cookie из запроса

def restResponse = ['value': 100]
Set<String> cookies = request.headers['cookie'].split(';')
Map<String, String> cookieAsMap = new HashMap<>()
cookies.forEach {record -> String[] s = record.split('='); cookieAsMap.put(s[0], s[1])}
if (Integer.parseInt(cookieAsMap['tracker-id']) > 100) {
    restResponse['limit'] = 'exceed'
}
return ["data" : restResponse]

Вызов эмуляции

curl --verbose "http://examples.mock.ru/example/read-coockie-from-request" --cookie "tracker-id=101;user-name=robert"

Переопределение кода ответа в Groovy скрипте#

В этом примере переопределяется код ответа, который был задан в настройках эмуляции.

Переопределение кода ответа в Groovy скрипте

def restResponse = ['value': 100]
response.statusCode = 201
return ['data' : restResponse]

Вызов эмуляции

curl --verbose "http://examples.mock.ru/example/response-code-set-in-script"

Переопределение кода ответа в Groovy скрипте (DSL)#

def restResponse = ['value': 100]
response.statusCode = 201
return ['data' : restResponse]

Вызов эмуляции

curl --verbose "http://examples.mock.ru/example/response-code-set-in-groovy-dsl"

В этом примере в ответное сообщение добавляется два параметра cookie.

def restResponse = ['value': 100]
return ResponseDsl.make {
    status CREATED()
    body(restResponse)
    cookies {
        cookie('user-tracker-id', '100500')
        cookie('device-id', '888')
    }
}

Вызов эмуляции

curl --verbose "http://examples.mock.ru/example/add-cookie-dsl"

Чтение query-параметров запроса#

В этом примере считается количество query-параметров, и затем они выводятся в ответном сообщении:

return ['query-params-count': request.query.size(), 'query-param-values': request.query]

Вызов эмуляции

curl --verbose "http://examples.mock.ru/example/query-param?size=100&height=30&width=20"

Выдача ответа, длина которого превышает 400.000 символов#

Если длина ответа превышает 400.000 символов, ответ необходимо хранить как переменную в области переменных. Для использования переменной нужно выполнить следующие действия:

  1. Создать область переменных.

  2. Создать в области переменных новую переменную и в качестве значения указать ответное сообщение.

return longJsonResponse

Вызов эмуляции

curl --verbose "http://examples.mock.ru/example/var-scope/long-response"

Доступ к переменным из области переменных через scopeVariables#

Если переменные добавляются и удаляются из области переменных динамически, но при этом в скрипте необходимо иметь возможность получить имена всех доступных переменных на момент выполнения скрипта, можно воспользоваться переменной scopeVariables. Эта переменная содержит все переменные из выбранной области на момент выполнения.

def result = new HashMap<String, String>()
scopeVariables.forEach {key, value -> result.put('var name = ' + key, 'var value = ' + value)}
return result

Вызов эмуляции

curl --verbose http://examples.mock.ru/variables/as-map

Вызов с типом данных application/x-www-form-urlencoded#

При использовании Groovy-шаблона переменная request включает переменную типа Map<String, String> с именем form. form содержит значения, переданные в запросе с типом контента application/x-www-form-urlencoded.

String result = "";
request.form.each {key, value -> result = result+"$key = $value ⁣ ⁣"};
return "Parameters in request: "+result;

Вызов эмуляции

curl "http://{mock-host}/{mock-endpoint}" --header "Content-Type: application/x-www-form-urlencoded" --header "Host: project302.mock.ru" --data-urlencode "param1=1234" --data-urlencode "param2=5678"

Ответ эмуляции

"Parameters in request: param1 = 1234 param2 = 5678"

Изменение объекта, хранящегося в переменной в области переменных#

В этом примере при каждом POST запросе к эмуляции содержимое переменной будет преобразовано из JSON в объект с помощью JsonSlurper. После преобразования переменной в объект к свойству balance будет добавлено значение переменной value из запроса. Далее изменённый объект будет преобразован в текст и сохранен в переменную с помощью JsonOutput. Таким образом появляется возможность хранить состояние объекта между запросами.

Для выполнения этого кода необходимо в существующей или вновь созданной области переменных создать новую переменную с именем personData и следующим содержимым:

{
"name": "Ivan",
"surname": "Ivanov",
"balance": 42
}

Код эмуляции

import groovy.json.JsonSlurper
import groovy.json.JsonOutput

def jsonSlurper = new JsonSlurper() // объект для преобразования JSON в объект
def jsonOutput = new JsonOutput() // объект для преобразования объекта в JSON

def person = jsonSlurper.parseText(personData) // преобразование текстовой переменной в объект

def increment = jsonSlurper.parseText(request.rawBody) // преобразование данных запроса в объект

person.balance += increment.value // увеличение баланса на значение из запроса

personData = jsonOutput.toJson(person) // присвоение переменной нового текстового значения

return personData // отправка переменной в ответ (для наглядности изменения значения переменной)

Вызов эмуляции

curl --verbose -X POST "http://examples.mock.ru/dynamic-variable-change" -d "{\"value\": 42}" -H "Content-Type: application/json"

Группировка и маркирование заглушек#

Примечание

Данная функциональность доступна пользователю с ролью Пользователь.

В данном разделе описаны варианты группировки пользователем эмуляций в Проектной области для облегчения процесса поиска.

Пользователь может маркировать эмуляции произвольными тегами в доступной ему Проектной области. Назначение тега эмуляции не добавляет никакой функциональности самой эмуляции, но позволяет пользователю организовать группировку и поиск эмуляций по заданным тегам.

Установить или удалить теги для эмуляции можно двумя способами:

  1. Непосредственно в списке эмуляций на экранной форме Проектной области:

    Компонент платформы

    Компонент платформы

    Компонент платформы

  2. Через экранную форму создания/редактирования эмуляции:

    Компонент платформы

Фильтрация по тегам доступна на экранной форме Проектной области в заголовке таблицы со списком эмуляций:

Компонент платформы

История вызовов#

Примечание

Данная функциональность доступна пользователю с ролью Пользователь.

Историю и результаты вызова эмуляций в рамках проектной области можно посмотреть непосредственно в интерфейсе Mock.

На экранной форме проектной области нажмите кнопку История:

Компонент платформы

На открывшейся экранной форме История представлен список записей об обращениях к эмуляциям.

Выберите запись, соответствующую необходимому вызову (по времени ее вызова):

Компонент платформы

Нажмите на строку с выбранной записью, чтобы открыть форму с параметрами вызова эмуляции и информацией об ответе:

Компонент платформы

Публичные проекты#

Примечание

Данная функциональность доступна пользователю с ролью Пользователь.

В данном разделе описан принцип предоставления общего доступа к созданным Mock эмуляциям.

Чтобы пользователи, не имеющие доступа к Проектной области Пользователя, могли обращаться к эмуляции, необходимо пометить ее публичной. В этом случае эмуляция будет доступна для просмотра всем пользователям продукта в каталоге Публичные проекты.

Чтобы сделать эмуляцию публичной, необходимо при создании новой или редактировании уже существующей установить PUBLIC_READONLY уровень видимости эмуляции для пользователей других проектных областей:

Компонент платформы

Публичные эмуляции в структуре пользовательского интерфейса представлены аналогично собственным эмуляциям пользователя, но разделены по каталогам (Мои проекты, Публичные проекты):

Компонент платформы

Структура каталога Публичные проекты аналогична структуре Мои проекты: на экранной форме отображаются все проектные области, в которых есть хотя бы одна публичная эмуляция:

Компонент платформы

На экранной форме Проектной области, содержащей публичные эмуляции, отображается их список:

Компонент платформы

Выберите публичную эмуляцию из списка, чтобы просмотреть ее параметры (доступны только для чтения):

Компонент платформы

Эти параметры можно использовать для обращения к этой эмуляции в своем проекте.

Часто встречающиеся проблемы и пути их устранения#

В текущей версии продукта не было выявлено проблем при использовании сервисов компонента AMCS оператором.

Параметры настройки#

Параметры настройки сервиса описаны в разделе Использование приложения оператором.

Правила эксплуатации#

Входящие в состав приложения программные и программно-аппаратные средства защиты информации#

В состав сервиса входят следующие программные и программно-аппаратные средства защиты информации:

  • mTLS

  • HTTPS

Правила эксплуатации средств защиты информации осуществляется в соответствии с документацией на данные средства.