Создаём мок в Конструкторе
Здесь описаны поля Конструктора. Для первого практического мока начните с обучения в интерфейсе или «Быстрого старта».
Поля и протоколы
Путь: /ui/constructor
Конструктор — это место, где вы создаёте и редактируете моки. Вместо того чтобы писать JSON вручную, вы заполняете пошаговую форму: выбираете протокол, задаёте маршрут, определяете условия и создаёте ответ. Это основной инструмент, который вы будете использовать в повседневной работе с Mockarty.
Первый HTTP-мок за пять шагов
- Выберите HTTP REST.
- Укажите метод и путь, например
GET /hello. - Впишите ответ в формате JSON. Для первого примера оставьте статус
200. - Нажмите «Проверить» и посмотрите, что получит приложение.
- Нажмите «Создать». После успешного сохранения вызовите мок из API-тестера или своего приложения.

Ниже разобраны остальные поля и протоколы — возвращайтесь к ним по мере необходимости.
Если удобнее описать мок словами, попробуйте Generate Mock. Кнопка Improve Mock предложит изменения для заполненной формы. Проверьте результат перед сохранением; подробнее — в разделе об AI-функциях.
Выбор протокола
Первый шаг в создании мока — выбор протокола. Конструктор поддерживает все протоколы, которые Mockarty может имитировать:
Прямые протоколы — обслуживаются нодой Mockarty по адресу /stubs/{namespace}/...:
- HTTP: RESTful HTTP-эндпоинты с параметрами маршрута, строками запроса и заголовками.
- GraphQL: Запросы и мутации, сопоставляемые по типу и имени операции.
- SOAP: SOAP/XML-сервисы, сопоставляемые по действию и пути.
- SSE: Server-Sent Events с сопоставлением по имени события.
- MCP: Инструменты, ресурсы и промпты Model Context Protocol.
Протоколы, которым нужен отдельный сервер — создайте мок здесь, затем сгенерируйте и запустите сервер, прежде чем отправлять запросы. См. «Руководство по генератору серверов».
- gRPC: Унарные и потоковые gRPC-методы с protobuf-данными.
- Kafka: Сообщения топиков. Нужен запущенный Kafka-кластер.
- RabbitMQ: Сообщения очередей и обменников. Нужен запущенный RabbitMQ.
- Socket: WebSocket, TCP и UDP коммуникация с сопоставлением по событиям.
- SMTP: Имитация SMTP-сервера электронной почты с сопоставлением по отправителю, получателю и содержимому сообщения.
После выбора протокола конструктор показывает поля конфигурации, специфичные для данного протокола.
Конфигурация HTTP-мока
Для HTTP-моков настройте следующие поля:
- Маршрут: Шаблон URL-пути для сопоставления. Поддерживает подстановочные сегменты (например,
/api/users/*) и точные пути. - HTTP-метод: HTTP-метод для сопоставления (GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS или ANY для сопоставления всех методов).
- Код состояния: Код HTTP-состояния для возврата (например, 200, 201, 400, 404, 500).
- Заголовки ответа: Пары ключ-значение для заголовков ответа (Content-Type, Cache-Control и др.).
- Тело ответа: Тело ответа в формате JSON, XML, простого текста или бинарных данных. Поддерживает переменные Faker и интерполяцию JsonPath.

Конфигурация gRPC-мока
Для gRPC-моков:
- Имя сервиса: Полное имя gRPC-сервиса (например,
mypackage.MyService). - Имя метода: Имя RPC-метода (например,
GetUser). - Тело ответа: JSON-представление protobuf-сообщения ответа. Имена полей должны соответствовать proto-определению.
- Код ошибки: Опциональный код состояния gRPC для возврата (OK, CANCELLED, UNKNOWN, INVALID_ARGUMENT и др.).
- Сообщение об ошибке: Опциональное сообщение об ошибке при возврате gRPC-ошибки.
Конфигурация MCP-мока
Для MCP (Model Context Protocol) моков:
- Имя сервера: Имя MCP-сервера для маршрутизации.
- Имя инструмента: Имя MCP-инструмента для имитации.
- Схема входных данных: JSON Schema, описывающая входные параметры инструмента.
- Тело ответа: Содержимое ответа инструмента, поддерживающее переменные Faker и ссылки на хранилища.
- URI ресурса: Для моков типа ресурса — шаблон URI для сопоставления.
- Имя промпта: Для моков типа промпта — идентификатор промпта.
Конфигурация GraphQL-мока
Для GraphQL-моков:
- Тип операции: Query, Mutation или Subscription.
- Имя операции: Именованная операция для сопоставления (необязательно; если не указано, сопоставляется с любой операцией указанного типа).
- Тело ответа: Тело ответа GraphQL в стандартном формате
{ "data": { ... } }. - Ответы с ошибками: Настройка ответов с ошибками, специфичными для GraphQL, в формате
{ "errors": [ ... ] }.
Конфигурация SOAP-мока
Для SOAP-моков:
- SOAP Action: Значение заголовка SOAPAction для сопоставления.
- Путь: Путь эндпоинта для сопоставления.
- Тело ответа: XML-конверт ответа. Поддерживает переменные Faker внутри XML-элементов.
- WSDL: Опциональное содержимое WSDL для валидации и автодополнения.
Конфигурация Kafka-мока
Для Kafka-моков:
- Топик: Имя Kafka-топика для сопоставления.
- Имя сервера: Логическое имя сервера для маршрутизации (привязывает мок к конкретному экземпляру Kafka-сервера).
- Тело ответа: Значение сообщения для возврата, поддерживающее JSON или простой текст с Faker-интерполяцией.
- Ключ: Опциональный ключ сообщения.
- Заголовки: Опциональные заголовки Kafka-сообщения.
Конфигурация RabbitMQ-мока
Для RabbitMQ-моков:
- Очередь / Обменник: Имя очереди или обменника для сопоставления.
- Ключ маршрутизации: Шаблон ключа маршрутизации.
- Имя сервера: Логическое имя сервера для маршрутизации.
- Тело ответа: Тело сообщения для возврата.
- Заголовки: Опциональные заголовки AMQP-сообщения.
Конфигурация SSE-мока
Для SSE (Server-Sent Events) моков:
- Имя события: Тип SSE-события для сопоставления.
- Имя сервера: Логическое имя сервера для маршрутизации.
- Тело ответа: Данные события для отправки.
- Повторное подключение: Опциональный интервал переподключения в миллисекундах.
- Идентификатор: Опциональный идентификатор события для отслеживания на стороне клиента.
Конфигурация Socket-мока
Для WebSocket и сырых сокет-моков:
- Имя сервера: Логическое имя сервера для маршрутизации (определяет, какой сгенерированный Socket-сервер обрабатывает этот мок).
- Имя события: Имя события для сопоставления (для маршрутизации сообщений WebSocket/TCP/UDP).
- Тело ответа: Сообщение для отправки обратно, поддерживающее JSON или текст.
Конфигурация SMTP-мока
Для SMTP-моков:
- Имя сервера: Логическое имя SMTP-сервера для маршрутизации.
- Отправитель (From): Шаблон адреса электронной почты отправителя для сопоставления.
- Получатель (To): Шаблон адреса электронной почты получателя для сопоставления.
- Тема: Тема письма для сопоставления.
- Тело ответа: SMTP-ответ для возврата, поддерживающий переменные Faker и ссылки на хранилища.
Вкладка условий

Условия определяют, когда мок должен быть выбран для данного запроса. Несколько условий можно комбинировать (все условия должны совпасть, чтобы мок был выбран — логика И).
Условия по телу (JsonPath)
Сопоставление по определённым полям в теле запроса с помощью выражений JsonPath:
-
JsonPath: Выражение пути для проверки тела запроса (например,
$.user.name,$.items[0].id). -
Действие проверки: Операция сравнения. Mockarty поддерживает 13 действий проверки:
Действие Значение в JSON Описание Пример Equals equalsТочное совпадение. Для строк сравнивает буквально. Для объектов и массивов выполняет глубокое сравнение. $.user.roleequals"admin"Contains containsДля строк – поиск подстроки. Для объектов – проверяет, что ожидаемые поля являются подмножеством. Для массивов – проверяет наличие элемента. У чисел и логических значений подстроки нет, поэтому проверяется точное совпадение: 100не содержит10.$.user.namecontains"john"Not Equals not_equalsОтрицание equals. Совпадает, когда значение НЕ равно ожидаемому.$.statusnot_equals"deleted"Not Contains not_containsОтрицание contains. Совпадает, когда значение НЕ содержит ожидаемую подстроку или подмножество, а для числа или логического значения – когда оно не равно этому значению.$.tagsnot_contains"deprecated"Any anyВсегда совпадает, независимо от значения. Действует как подстановочный знак – ожидаемое значение игнорируется. $.request_idanyNot Empty notEmptyСовпадает, когда значение непустое: не null, непустая строка, непустой массив или непустой объект. $.user.emailnotEmptyEmpty emptyСовпадает, когда значение пустое: null, пустая строка "", пустой массив[]или пустой объект{}.$.erroremptyMatches matchesСопоставление с регулярным выражением. Ожидаемое значение – шаблон регулярного выражения. $.emailmatches"^[a-z]+@example\\.com$"Not Matches not_matchesНегация Matches – совпадает, когда значение НЕ соответствует regex (отсутствующее поле совпадает). $.emailnot_matches"@blocked\\.com$"Is Number is_numberСовпадает, когда значение числовое. $.amountis_numberGreater Than gtСовпадает, когда значение численно больше ожидаемого числа. Обе стороны разбираются как числа. $.amountgt100Less Than ltСовпадает, когда значение численно меньше ожидаемого числа. Обе стороны разбираются как числа. $.qtylt10Больше или равно gteСовпадает, когда значение численно больше ИЛИ равно ожидаемому числу (включительно). $.amountgte100Меньше или равно lteСовпадает, когда значение численно меньше ИЛИ равно ожидаемому числу (включительно). $.qtylte10Num Digits num_digitsСовпадает, когда строка содержит ожидаемое число цифр. $.codenum_digits6Starts With starts_withСовпадает, когда строка начинается с ожидаемого префикса. $.skustarts_with"PRD-"Ends With ends_withСовпадает, когда строка заканчивается ожидаемым суффиксом. $.fileends_with".pdf"One Of one_ofСовпадает, когда значение входит в ожидаемый список. $.statusone_of["active","trial"]Примечание: Устаревший псевдоним
matchтакже принимается и работает идентичноmatches. -
Ожидаемое значение: Значение для сравнения.
Условия по заголовкам
Сопоставление по заголовкам запроса:
- Имя заголовка: Имя HTTP-заголовка (регистронезависимое для HTTP, регистрозависимое для gRPC-метаданных).
- Действие проверки: Те же варианты, что и для условий по телу.
- Ожидаемое значение: Значение заголовка для сравнения.
Условия по параметрам запроса
Сопоставление по параметрам URL-запроса (только HTTP):
- Имя параметра: Ключ параметра запроса.
- Действие проверки: Те же варианты, что и для условий по телу.
- Ожидаемое значение: Значение параметра для сравнения.
Можно добавить несколько условий каждого типа. Все условия должны быть выполнены для совпадения мока.
Расширенные поля условий (только API)
При создании условий через REST API (не в веб-интерфейсе) каждый объект условия поддерживает дополнительные поля:
| Поле | Тип | Описание |
|---|---|---|
decode |
string | Установите "base64" для base64-декодирования извлечённого значения перед сравнением. Полезно, когда запрос содержит base64-кодированные поля. |
sortArray |
bool | Сортировать массивы перед сравнением. Переопределяет глобальный флаг sortArray конфигурации протокола для данного условия. |
valueFromFile |
string | Путь к файлу, содержимое которого используется как значение условия вместо value. Путь поддерживает шаблонную обработку ($.fake.*, ссылки на хранилища). Имеет приоритет над value. |
Пример через API:
{
"path": "$.data",
"assertAction": "equals",
"value": "expected",
"decode": "base64",
"sortArray": true,
"valueFromFile": "/templates/expected-response.json"
}
Примечание:
decode,sortArrayиvalueFromFileне доступны в визуальном конструкторе Web UI. Используйте REST API (POST /api/v1/mocks) для установки этих полей.
Вкладка ответа

Вкладка ответа предоставляет полноценный редактор для создания ответа мока:
Редактор тела ответа
Редактор кода (с подсветкой синтаксиса для JSON и XML) для написания тела ответа. Редактор поддерживает:
-
Переменные Faker: Вставка динамических данных с помощью выражений
$.fake.*. Например:$.fake.UUID– генерирует случайный UUID.$.fake.FirstName– генерирует случайное имя.$.fake.Email– генерирует случайный адрес электронной почты.$.fake.Number– генерирует случайное целое число.- Полный список см. в Справочнике Faker-функций.
-
Интерполяция JsonPath: Ссылка на данные из входящего запроса (полный синтаксис см. в Руководстве по JsonPath):
$.req.fieldName– извлечение поля из тела запроса.$.queryParams.page– извлечение параметра запроса.$.reqHeader.Authorization[0]– извлечение заголовка запроса.
-
Ссылки на хранилища: Доступ к значениям из любого из трёх типов хранилищ (подробнее см. Системы хранилищ):
$.gS.keyName– чтение из Global Store.$.cS.keyName– чтение из Chain Store.$.mS.keyName– чтение из Mock Store.
-
Математические и логические операции: Динамическое вычисление значений:
$.sum(a, b)– сложение.$.multiply(a, b)– умножение.$.increment(key)– атомарное увеличение счётчика в хранилище.$.subtract(expr1, expr2)– вычитание expr2 из expr1 (напр.$.subtract($.gS.counter, 1)для уменьшения на 1).$.divide(expr1, expr2)– деление expr1 на expr2 (деление на ноль даёт 0).$.modulo(expr1, expr2)– остаток от деления expr1 / expr2.
Код состояния
Установка кода HTTP-состояния (или кода состояния gRPC для gRPC-моков). Интерфейс предоставляет выпадающий список с распространёнными кодами и их описаниями.
Заголовки ответа
Добавление пользовательских заголовков ответа в виде пар ключ-значение. Распространённые заголовки можно выбрать из выпадающего списка для удобства.
Задержка ответа
Настройка искусственной задержки (в миллисекундах) перед отправкой ответа. Полезно для имитации медленных сервисов и тестирования обработки таймаутов.
OneOf-ответы

Моки могут определять несколько вариантов ответов, которые возвращаются либо последовательно, либо случайно:
- Упорядоченные: Ответы возвращаются в определённом порядке, циклически возвращаясь к первому после использования всех. Полезно для имитации изменений состояния (например, первый вызов возвращает «pending», второй — «completed»).
- Случайные: Случайный ответ выбирается для каждого запроса. Полезно для имитации нестабильных сервисов или переменного поведения.
Каждый вариант ответа имеет собственные тело, код состояния, заголовки и конфигурацию задержки. Добавляйте варианты с помощью кнопки «Добавить ответ» на вкладке ответа.
Режим прокси
Вместо возврата статического или шаблонного ответа мок может проксировать запрос на реальный бэкенд-сервис:
- Целевой URL: Базовый URL бэкенд-сервиса для перенаправления запросов.
- Задержка ответа: Настраивается на вкладке Response (в миллисекундах) для имитации сетевой задержки или медленной обработки. Применяется как к статическим, так и к проксированным ответам.
- Заголовки ответа: Переопределение или добавление заголовков через вкладку Response — полезно для настройки CORS, добавления заголовков трассировки или изменения токенов аутентификации в проксированном ответе.
- Передавать полный путь запроса (HTTP): адрес на реальном сервисе — цель плюс путь, который запросил клиент. С целью
https://api.example.com/v2запрос/users/7уходит наhttps://api.example.com/v2/users/7. Выключено — цель соответствует маршруту самого мока. - Убрать префикс пути: отрезается от начала пути перед пересылкой —
/gatewayпревращает/gateway/usersв/users. - Заголовки для сервера назначения: по одному на строку в виде
Имя: значение, например API-ключ, который нужен реальному сервису. Они заменяют одноимённый заголовок клиента и не попадают в записанный запрос клиента. - Не пересылать заголовки клиента: имена через запятую (например,
Cookie), которые убираются перед отправкой запроса дальше. - Записывать сквозной трафик: при включении каждый проксированный запрос и реальный ответ апстрима захватываются в «Неопределённые запросы». Оттуда захваченный вызов конвертируется в настоящий мок в один клик — мок создаётся с наблюдённым методом, маршрутом, условиями по query/телу и предзаполненным реальным ответом. Захват работает для прокси-моков HTTP, SOAP, GraphQL, gRPC и MCP.
Режим прокси полезен для:
- Записи и сравнения реальных и мокированных ответов.
- Тестирования поведения при таймаутах (добавление задержки к реальным ответам).
- Добавления «токсичности» к реальным сервисам (прерывистые ошибки, медленные ответы).
- Записи реальных ответов при их прохождении.
- Изменения заголовков ответа без изменения бэкенда.
Экстракторы хранилищ
Экстракторы хранилищ захватывают данные из входящих запросов и сохраняют их в один из трёх типов хранилищ для последующего использования:
- Global Store (gS): Постоянное состояние в рамках пространства имён. Значения сохраняются между запросами и моками. Идеально для счётчиков, флагов функций и общего состояния.
- Chain Store (cS): Состояние в рамках цепочки запросов. Значения сохраняются между связанными моками в рабочем процессе (например, создание -> получение -> обновление). Связываются по идентификатору цепочки.
- Mock Store (mS): Эфемерное состояние на один запрос. Значения существуют только во время обработки одного разрешения мока. Полезно для промежуточных вычислений.
Для каждого экстрактора настройте:
- Источник: Откуда извлекать данные (тело, заголовок, параметр запроса, параметр пути).
- JsonPath: Выражение JsonPath для вычисления (для извлечения из тела).
- Тип хранилища: gS, cS или mS.
- Ключ: Ключ, под которым будет сохранено извлечённое значение.
TTL и лимиты использования
Управление жизненным циклом мока:
- TTL (Time to Live): Мок автоматически истекает после указанного срока (например, 1 час, 24 часа, 7 дней). После истечения мок больше не разрешает запросы. Полезно для временных тестовых сценариев.
- Лимит использования: Мок истекает после указанного количества разрешений. После достижения лимита последующие запросы не сопоставляются. Полезно для одноразовых тестовых сценариев.
Когда мок истекает (по TTL или лимиту использования), он остаётся видимым в списке моков с пометкой «истёкший». Его можно вручную повторно включить или удалить.
Настройка приоритета
Когда несколько моков совпадают с одним и тем же запросом, приоритет определяет, какой из них будет выбран:
- Более высокие значения приоритета имеют преимущество.
- Приоритет по умолчанию равен 0.
- Моки с условиями обычно получают более высокий приоритет, чем универсальные моки.
- Приоритет особенно важен при использовании широких шаблонов маршрутов наряду с конкретными.
Теги
Теги обеспечивают гибкую систему категоризации:
- Добавляйте один или несколько тегов к любому моку с помощью поля ввода тегов.
- Теги имеют цветовую кодировку для визуального различения.
- Используйте теги для сквозных задач (например, «payment», «v2», «regression», «flaky»).
- Фильтруйте моки по тегу на странице моков.
- Массово применяйте теги с помощью функции массовых операций.
Внешний вид
Конструктор работает в светлой и тёмной темах. Переключить тему можно в меню профиля.


Если запросы уже закрывает другой мок
Два мока на одном маршруте, у которых совпадают условия срабатывания, ловят одни и те же
запросы — а ответить может только один. Второй остаётся в списке, выглядит исправным и не
получает ни одного запроса. Разбираться в этом потом дорого: маршрут отвечает не тем телом,
а вы ищете ошибку в условиях, которые никто не проверял.
Поэтому при сохранении Mockarty заранее проверяет маршрут и, если такой мок уже есть,
показывает окно:
- какой именно мок мешает — с ссылкой, открывающей его в новой вкладке, чтобы посмотреть,
не закрывая заполненную форму; - кто его создал — чаще всего договориться быстрее, чем менять;
- почему выигрывает именно он — сравниваются приоритет и, при равном приоритете, время
сохранения (позже сохранённый выигрывает); - что можно сделать: поднять приоритет одному из них или добавить условие, чтобы каждый
отвечал на свой запрос.
Кнопки две: отменить создание и всё равно сохранить. Это предупреждение, а не запрет —
если вы намеренно заменяете старый мок, сохраните и удалите его.
Сравниваются только условия срабатывания, не ответы. Сообщение «этот мок перекрывается
таким-то» не значит, что тот мок вам подходит: он может отвечать совсем другое и существовать
для другой задачи. Речь только о том, что оба ловят один и тот же запрос.
Окно появляется, когда совпадение доказуемо: одинаковые маршрут и метод, и при этом либо
оба мока без условий, либо набор условий полностью совпадает. Частично пересекающиеся условия
не сообщаются: понять, пересекаются ли они на реальном трафике, без самого трафика нельзя, а
предупреждение, срабатывающее на нормальной паре моков, быстро приучает жать «всё равно
сохранить», не читая.