Современная разработка программного обеспечения все больше опирается на распределенные системы и микросервисы, что требует надежных методов обеспечения качества для проверки интеграции API и поведения сети. Инженеры по обеспечению качества сталкиваются с задачами, где необходимо:
Моделировать внутренние службы во время разработки интерфейса.
Иметь доступ к отладке сетевых ошибок в реальных средах.
Такие инструменты, как Mockoon (платформа имитации API с открытым исходным кодом) и Charles Proxy (HTTP-прокси), решают эти задачи, но обслуживают различные фазы жизненного цикла обеспечения качества.
Всем привет! Меня зовут Даша, я инженер по тестированию на платформе web в Иви. И сегодня я расскажу вам об интересном и малоизвестном инструменте Mockoon и сравню его со всеми любимым Charles Proxy — с упором на их технические возможности и удобство использования. Также замечу, что цель статьи поделиться проведенным сравнением инструментов и рассказать про Mockoon, о котором еще не очень много русскоязычных разборов.
Сравнивать два инструмента буду по следующим критериям:
Функциональная оценка: тестирование основных функций (например, имитация API, проверка трафика).
Оценка удобства использования: измерение сложности настройки и кривых обучения.
В ходе статьи буду опираться на официальную документацию к инструментам, собственные ощущения в работе и англоязычные статьи. А чтобы не быть голословной, постараюсь показать все на примерах из Demo API Mockoon. Это GET-запрос /template, в ответ на него приходит json с наполнением, показанным на картинке ниже.

Mockoon
Mockoon — простой и быстрый способ разработки и запуска имитационных API. Не требуется удаленное развертывание, учетная запись, он бесплатный и с открытым исходным кодом, как написано на официальном сайте https://mockoon.com/ .
Технические характеристики
Mockoon предназначен для моделирования API, позволяя:
Создавать подмены для RESTful или GraphQL с динамическими ответами с использованием шаблонов Handlebars и Faker.
Имитировать операции CRUD и задержку для реалистичного тестирования.
Основные технические выводы:
Mockoon порадовал быстротой настройки — начальная настройка среды заняла меньше времени по сравнению с Charles Proxy.
Mockoon не подходит для проверки живого трафика, т.к. отсутствуют функции расшифровки SSL.
Настройка для работы:
Расскажу немного подробнее про настройку для Mockoon. Для использования инструмента в работе вам необходимо:
Скачать и установить Mockoon с официального сайта https://mockoon.com/ , если еще не был установлен
-
Настройка окружения:
-
Если вы НЕ скачивали из репозитория подходящую группу моков, то необходимо:
Нажать на "+" в верхней части окна программы
Выбрать "New local environment"
Указать любой удобный или новый созданный json-файл
-
Если вы скачали из репозитория подходящую группу моков, то необходимо:
Нажать на "+" в верхней части окна программы
Выбрать "Open local environment"
Указать нужный json-файл или папку
-
-
Вкладка Settings
-
В блоке API URL в поле ввода порта ввести любой свободный порт
Можно оставить, как есть
-
В блоке TLS включить чек-бокс Enable TLS
Если запросы по https
-
-
Вкладка Proxy
-
Включить чек-бокс Enable proxy mode
C Благодаря "Enable proxy mode" запросы будут идти минуя Mockoon, если в коллекции нет подходящих для ответа, и соответственно мокаться не будут.
В поле ввода Target URL ввести хост с портом, который необходимо будет замокать
-
Так как Mockoon и Charles Proxy взаимодополняемы, необходимо настроить Map Remote в Charles Proxy, чтобы Host подменялся на localhost с портом из Mockoon вкладки Settings.
Что умеет Mockoon, но не умеет Charles Proxy
-
Генерация поддельных данных и динамическая шаблонизация
Функция: Mockoon предоставляет встроенные инструменты для создания моков с использованием шаблонизаторов, таких как Handlebars и Faker. Можно генерировать условную логику, поддельные данные, подготовленные с помощью ИИ (например, синтетические имена, адреса или UUID), или параметризованные ответы.
Сравнение с Charles: Charles Proxy не имеет встроенной поддержки динамического шаблонирования. И он не имеет собственных инструментов для поддельных данных. Пользователи должны вручную создавать статические файлы ответов.
Разбираемся на примере: У нас есть шаблон ответа на картинке выше. Нам необходимо для удобства добавить генерируемые данные, такие как userId, firsname и lastname, а также создать больше пользователей, как указано в total.

-
Параметризация ответа: "{{queryParam 'total' '3'}}" — генерирует количество постов на основе параметра запроса
total
(например,/posts?total=10
возвращает 10 постов). В нашем случае по умолчанию указано 3.Генерация данных: {{#repeat (queryParam 'total' '3')}} ... {{/repeat}} — создает полноценные объекты данных указанные ниже, в нашем случае repeat создаст новых пользователей с учетом значения total. А далее идет генерация данных внутри каждого ключа, к примеру, faker 'string.uuid' — генерирует уникальный UUID (например, "550e8400-e29b-41d4-a716-446655440000") и т.д.
Создание условий в ответе: Внутри "Templating example" прописано условие, что если URL включает "?info=true", сообщение становится "Explore templating in Mockoon's docs". Если параметр info не указан, по умолчанию используется "For more info, click the blue 'i' above". Использовать условия можно также и в переменных, создавая более сложные моки.
Форматирование ответа: Как часто в Charles Proxy, используя регулярные выражения в Rewrite, вы сталкивались с тем, что при подмене JSON был сломан из-за неправильной запятой? У меня такое случается нередко, и {{#unless @last}},{{/unless}} в Mockoon явно облегчила мне жизнь. {{#unless @last}},{{/unless}} — гарантирует, что запятые добавляются только между объектами пользователя, а не после последнего. Т.е. после каждого сгенерированного пользователя будет автоматически поставлена запятая.
Бонус: Для расширенных вариантов использования Mockoon также поддерживает "корзины данных" (повторно используемые наборы данных) и "глобальные переменные" (переменные доступные во всех подменах инструмента). Данный функционал частично есть в Postman, но его нет в Charles Proxy.
-
Моделирование задержки
Функция: Mockoon позволяет добавлять искусственные задержки в ответы API для имитации реалистичной обработки данных на сервере.
Сравнение с Charles: Хотя Charles предлагает регулирование пропускной способности (Throttling), а также подмены в реальном времени с помощью точек останова (Breakpoints), но он не может имитировать задержки на уровне подмены. Т.е. при подмене ответа с помощью Rewrite или Map Local задержки не будет. Если же использовать Breakpoints, ожидая того же результата, то можно столкнуться с проблемой — запрос может упасть по таймауту.
Разбираемся на примере: Для того, чтобы подмена производилась не сразу же, а с задержкой в 650 мс (это показатель нижней границы времени отклика сервера), надо в поле Response latency (ms) указать значение 650.

-
Выбор подмены в зависимости от правила
Функция: Вкладка "Rules" позволяет по условной логике контролировать какую подмену отдать в зависимости от внешних параметров. Можно создать правила не только для заголовков, как будет указано в примере ниже, и не только для определенного значения, но и для полноценной JSON или с использованием регулярных выражений.
Сравнение с Charles: В Charles также существуют правила, которые можно отключить и включить при необходимости, но автоматического переключения между правилами в зависимости от каких-то внешних параметров нет. Важно отметить, что в Charles также есть разнообразные варианты настройки правил для подмен, включая регулярные выражения.
-
Разбираемся на примере: Если заголовок 'Accept-Language' равен 'fr-FR', выдать ответ на французском языке без ручного вмешательства.
Варианты подмен: В случае, если нам необходима смена языка, в Mockoon надо создать не одну подмену, а 2. Одна на английском, а вторая на французком.
Вкладка "Rules": Создать правило в каждом из вариантов подмен в зависимости от языка для заголовка 'Accept-Language', который равен или НЕ равен (используя !) значению 'fr-FR'.

-
Интеграция с системой контроля версий GitLab
Функция: В Mockoon есть возможность выгрузить готовые коллекции в GitLab, и также легко склонировать и установить окружения оттуда. Это заметно облегчает актуализацию и контроль за моками.
Сравнение с Charles: Для Charles отсутствует возможность установки целых коллекций с различными запросами.
-
Разбираемся на примере: Если вы сделали все что указано в этой статье, то у вас появится первая коллекция с подменами. Все это есть в файле окружения, который вы создали при настройке окружения. Теперь в обычном порядке запуште в репозиторий полученный файл.
Читабельность: То как мы назвали один из вариантов подмены указано в responses.label, описание отдельно взятого эндпоинта и подмен внутри него есть documentation. Форматирование документов и удобство читаемости — дело субъективное, поэтому оценивать не стану, лишь покажу вам, как оно выглядит на картинке ниже.

Немного о Charles Proxy
Charles — это HTTP-прокси / HTTP-монитор / обратный прокси, который позволяет пользователю просматривать весь трафик HTTP и SSL / HTTPS между его машиной и Интернетом. Это включает запросы, ответы и заголовки HTTP (содержащие файлы cookie и информацию о кэшировании), как написано на официальном сайте https://www.charlesproxy.com/.
Технические характеристики:
Charles Proxy специализируется на анализе сетевого трафика, предлагая:
Проксирование SSL для проверки зашифрованного трафика HTTPS.
Регулирование пропускной способности для эмуляции условий низкой скорости сети (например, скорости 3G).
Основные технические выводы:
Charles Proxy требует больше времени по сравнению с Mockoon на начальную настройку из-за конфигурации сертификата SSL.
Charles Proxy задействует на 35% больше ЦП по сравнению с Mockoon.
Charles Proxy предоставляет возможность редактирования живого трафика.
Что умеет Charles Proxy, но не умеет Mockoon
-
Комплексная расшифровка трафика HTTPS/SSL
Функция: Charles Proxy расшифровывает и проверяет трафик HTTPS с помощью прокси-сервера SSL, что позволяет QA анализировать зашифрованные запросы/ответы, заголовки и файлы cookie.
Сравнение с Mockoon: Mockoon не расшифровывает живой трафик, поскольку он фокусируется исключительно на имитации API без проверки на уровне сети. Он может записать запросы и ответы входящие в "Logs" для дальнейшей работы с ними.
Разбираемся на примере: Чтобы нам перехватить какой-то запрос, необходимо как минимум настроить Charles. Установить и выдать доверенность сертификату и добавить верный хост в SSL Proxying Settings. Далее обновить страницу и, если все настройки выполнены верно, то вы увидите запросы и ответы на них.
-
Точки останова для изменения запросов/ответов в реальном времени
Функция: Charles Proxy позволяет пользователям устанавливать Breakpoints (точки останова) для приостановки, проверки и изменения HTTP-запросов/ответов в реальном времени. Это критически важно для отладки пограничных случаев (например, изменения полезных данных для проверки обработки ошибок).
Сравнение с Mockoon: Mockoon не хватает функциональности точек останова, поскольку он имитирует предопределенные ответы, а не перехватывает живой трафик.
Разбираемся на примере: Чтобы сработал Breakpoints нужно создать правило где указываются данные об адресе, а также что именно надо остановить: запрос или ответ. Пример точки останова показан ниже на картинке. После заполнения нужно сохранить настройки Breakpoint Setting и повторно обновить страницу для перехвата нужного запроса.

-
Регулирование пропускной способности сети
Функция: Charles Proxy может регулировать качество соединения для эмуляции медленных сетевых условий (например, скорости 3G).
Сравнение с Mockoon: Mockoon поддерживает моделирование задержки для отдельных точек, но не может регулировать общую пропускную способность сети.
Разбираемся на примере: Для имитации проблем с сетью необходимо в Throttle Settings добавить нужный хост и отредактировать значения пропускной способности как показано на картинке ниже. После сохранения настроек нужно обновить тестируемую страницу.

-
Расширенное переписывание и сопоставление трафика
Функция: Charles Proxy предлагает такие инструменты, как Map Remote (перенаправление запросов на разные URL-адреса), Map Local (обслуживание ответов из локальных файлов) и Rewrite (изменение заголовков/полезных данных).
Сравнение с Mockoon: Mockoon может записать входящий трафик и отображаться он будет во вкладке Logs, но эта функция представлена не для редактирования входящих запросов, а для быстрой записи. Т.е. если в Logs записаны запросы, можно их перенести во вкладку Routes и продолжить работать с ними с учетом функционала инструмента.
-
Разбираемся на примере:
Map Remote позволяет выполнить переадресацию с одного адреса (Map From) на другой (Map To), что полезно, к примеру, для пренаправления трафика в другой инструмент. На картинке ниже показана подмена для соединения Charles с Mockoon. Host в Map From — это хост от запросов вашего приложения, а на host и port в Map To — это host и port из вкладки Settings в Mockoon. Далее нужно сохранить настройки Map Remote и обновить страницу.

Map Local — подмена ответов на данные из файлов. Особенно удобно для подмены ответа на большой json. Для настройки указывается хост, который мы перехватываем, и файл, в котором хранится ответ. Далее, если вы обновите страницу вашего приложения после сохранения настроек, подмена будет применена.

Rewrite позволяет изменить определенный параметр или целостный ответ/запрос. Это самая частоиспользуемая функция Charles в Иви, и мы стараемся выкрутить ее пользу на максимум. Как вариант использования функции подмены, это написание регулярных выражений, как показано на картинке ниже. Варианты регулярных выражений для Rewrite можно найти в интернете, поэтому подробно останавливаться на них не стану. Но важно отметить, что такие подмены могут сломать JSON, а также требуют постоянного ручного вмешательства.

Бонус: В Charles можно создавать переменные внутри Rewrite, но данные внутри них не будут генерироваться, их необходимо править вручную. Как использовать переменную показано на картинке ниже. В подменяемом значении мы прописываем наименование переменной. В новом правиле для подмены мы пишем в блоке Match название переменной, указанной ранее, а в блоке Replace значение, которое хотим ей присвоить. После сохраняем нужные настройки и обновляем страницу. Такая функция облегчает использование и редактирование разных правил.

Сравним и обсудим
Возможно у вас появились вопросы вроде: "Какой же инструмент лучше для QA?" и "А зачем мне нужен Mockoon, если в Charles все умеет?". Давайте сравним Mockoon и Charles в плане удобства использования и обсудим, какой же из инструментов выбрать, опираясь на ваши потребности.
Удобство использования в сравнении
Критерии |
Mockoon |
Charles Proxy |
---|---|---|
Время настройки |
<5 минут |
~10 минут (конфигурация SSL) |
Стоимость лицензирования |
Бесплатно (с открытым исходным кодом) |
Платная |
Платформы |
iOS/Android/Web/SmartTV |
iOS/Android/Web/SmartTV |
Какой же инструмент лучше для QA?
Выбор зависит от конкретных потребностей контроля качества:
-
Выбирайте Mockoon, если:
Вам нужна быстрая мокировка API для тестирования интерфейса или моделирования внутренних служб.
Конфиденциальность и автономный доступ являются приоритетами.
Ваш рабочий процесс сосредоточен на предварительном тестировании, а не на проверке трафика в реальном времени.
-
Выбирайте Charles Proxy, если:
Отладка на уровне сети (например, ошибки SSL, проблемы с задержкой) имеет решающее значение.
Вам требуются подробные журналы трафика для анализа первопричин в мобильных или веб-приложениях.
Вашей команде нужны расширенные инструменты, такие как точки останова или тротлинг.
-
Синергия:
Для комплексных рабочих процессов QA объедините оба инструмента — используйте Mockoon для моделирования API на ранних этапах разработки, а также для генерации данных, и Charles Proxy для проверки трафика в реальном времени на более поздних этапах.
Но если вы еще не пробовали Mockoon и хотите отказаться от этой идеи только потому что "в Charles Proxy все есть", то не рубите с плеча. Когда вы начнете использовать Mockoon вам обязательно понравится.
Краткий обзор по сравнению
Если вы не хотите читать подробное описание и сравнение каждой функциональности, предлагаю просто заглянуть в таблицу ниже.

Заключение
Mockoon и Charles Proxy решают разные, но взаимодополняющие задачи в работе QA. Моделированием API Mockoon ускоряет тестирование на ранней стадии, в то время как детальный анализ трафика Charles Proxy обеспечивает надежность в средах, подобных производственным. На мой взгляд, для всестороннего покрытия тестами команды QA могут работать с двумя инструментами, согласовывая их использование с определенными фазами жизненного цикла разработки и своими потребностями.
В общем попрощаюсь как обычно, не стойте на месте, с удовольствием изучайте новое и улучшайте себя! До новых встреч на Хабре!
antonidas37
А будет ли сравнение с Proxyman?
Интересно было бы почитать :)
Paczuk
+1 Чарлик "всеми любимый" только если вы не пробовали Proxyman
dmitrofanova Автор
Привет) сравнение Proxyman vs Mockoon или Proxyman vs Charles Proxy?
Если второе, то похожие статьи уже есть: https://habr.com/ru/companies/ozontech/articles/579392/