Современная разработка программного обеспечения все больше опирается на распределенные системы и микросервисы, что требует надежных методов обеспечения качества для проверки интеграции API и поведения сети. Инженеры по обеспечению качества сталкиваются с задачами, где необходимо:

  • Моделировать внутренние службы во время разработки интерфейса.

  • Иметь доступ к отладке сетевых ошибок в реальных средах.

Такие инструменты, как Mockoon (платформа имитации API с открытым исходным кодом) и Charles Proxy (HTTP-прокси), решают эти задачи, но обслуживают различные фазы жизненного цикла обеспечения качества.

Всем привет! Меня зовут Даша, я инженер по тестированию на платформе web в Иви. И сегодня я расскажу вам об интересном и малоизвестном инструменте Mockoon и сравню его со всеми любимым Charles Proxy — с упором на их технические возможности и удобство использования. Также замечу, что цель статьи поделиться проведенным сравнением инструментов и рассказать про Mockoon, о котором еще не очень много русскоязычных разборов.

Сравнивать два инструмента буду по следующим критериям:

  • Функциональная оценка: тестирование основных функций (например, имитация API, проверка трафика).

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

В ходе статьи буду опираться на официальную документацию к инструментам, собственные ощущения в работе и англоязычные статьи. А чтобы не быть голословной, постараюсь показать все на примерах из Demo API Mockoon. Это GET-запрос /template, в ответ на него приходит json с наполнением, показанным на картинке ниже. 

Пример demo API Mockoon
Пример demo API Mockoon

Mockoon

Mockoon — простой и быстрый способ разработки и запуска имитационных API. Не требуется удаленное развертывание, учетная запись, он бесплатный и с открытым исходным кодом, как написано на официальном сайте https://mockoon.com/ . 

Технические характеристики

Mockoon предназначен для моделирования API, позволяя:

  • Создавать подмены для RESTful или GraphQL с динамическими ответами с использованием шаблонов Handlebars и Faker.

  • Имитировать операции CRUD и задержку для реалистичного тестирования.

Основные технические выводы:

  • Mockoon порадовал быстротой настройки — начальная настройка среды заняла меньше времени по сравнению с Charles Proxy.

  • Mockoon не подходит для проверки живого трафика, т.к. отсутствуют функции расшифровки SSL. 

Настройка для работы:

Расскажу немного подробнее про настройку для Mockoon. Для использования инструмента в работе вам необходимо:

  1. Скачать и установить Mockoon с официального сайта https://mockoon.com/ , если еще не был установлен

  2. Настройка окружения:

    1. Если вы НЕ скачивали из репозитория подходящую группу моков, то необходимо:

      1. Нажать на "+" в верхней части окна программы

      2. Выбрать "New local environment"

      3. Указать любой удобный или новый созданный json-файл

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

      1. Нажать на "+" в верхней части окна программы

      2. Выбрать "Open local environment"

      3. Указать нужный json-файл или папку

  3. Вкладка Settings

    1. В блоке API URL в поле ввода порта ввести любой свободный порт

      1. Можно оставить, как есть

    2. В блоке TLS включить чек-бокс Enable TLS

      1. Если запросы по https

  4. Вкладка Proxy

    1. Включить чек-бокс Enable proxy mode 

      1. C Благодаря "Enable proxy mode" запросы будут идти минуя Mockoon, если в коллекции нет подходящих для ответа, и соответственно мокаться не будут.

    2. В поле ввода 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.

Пример с использованием Faker
Пример с использованием Faker
  • Параметризация ответа: "{{queryParam 'total' '3'}}" — генерирует количество постов на основе параметра запроса total (например, /posts?total=10 возвращает 10 постов). В нашем случае по умолчанию указано 3.

    1. Генерация данных: {{#repeat (queryParam 'total' '3')}} ... {{/repeat}} — создает полноценные объекты данных указанные ниже, в нашем случае repeat создаст новых пользователей с учетом значения total. А далее идет генерация данных внутри каждого ключа, к примеру, faker 'string.uuid' — генерирует уникальный UUID (например, "550e8400-e29b-41d4-a716-446655440000") и т.д.

    2. Создание условий в ответе: Внутри "Templating example" прописано условие, что если URL включает "?info=true", сообщение становится "Explore templating in Mockoon's docs". Если параметр info не указан, по умолчанию используется "For more info, click the blue 'i' above". Использовать условия можно также и в переменных, создавая более сложные моки.

    3. Форматирование ответа: Как часто в Charles Proxy, используя регулярные выражения в Rewrite, вы сталкивались с тем, что при подмене JSON был сломан из-за неправильной запятой? У меня такое случается нередко, и {{#unless @last}},{{/unless}} в Mockoon явно облегчила мне жизнь. {{#unless @last}},{{/unless}} — гарантирует, что запятые добавляются только между объектами пользователя, а не после последнего. Т.е. после каждого сгенерированного пользователя будет автоматически поставлена запятая.

    4. Бонус: Для расширенных вариантов использования Mockoon также поддерживает "корзины данных" (повторно используемые наборы данных) и "глобальные переменные" (переменные доступные во всех подменах инструмента). Данный функционал частично есть в Postman, но его нет в Charles Proxy.

  • Моделирование задержки

    • Функция: Mockoon позволяет добавлять искусственные задержки в ответы API для имитации реалистичной обработки данных на сервере.

    • Сравнение с Charles: Хотя Charles предлагает регулирование пропускной способности (Throttling), а также подмены в реальном времени с помощью точек останова (Breakpoints), но он не может имитировать задержки на уровне подмены. Т.е. при подмене ответа с помощью Rewrite или Map Local задержки не будет. Если же использовать Breakpoints, ожидая того же результата, то можно столкнуться с проблемой — запрос может упасть по таймауту.

    • Разбираемся на примере: Для того, чтобы подмена производилась не сразу же, а с задержкой в 650 мс (это показатель нижней границы времени отклика сервера), надо в поле Response latency (ms) указать значение 650. 

Пример настройки имитации задержки в 650 мс
Пример настройки имитации задержки в 650 мс
  • Выбор подмены в зависимости от правила

    • Функция: Вкладка "Rules" позволяет по условной логике контролировать какую подмену отдать в зависимости от внешних параметров. Можно создать правила не только для заголовков, как будет указано в примере ниже, и не только для определенного значения, но и для полноценной JSON или с использованием регулярных выражений.

    • Сравнение с Charles: В Charles также существуют правила, которые можно отключить и включить при необходимости, но автоматического переключения между правилами в зависимости от каких-то внешних параметров нет. Важно отметить, что в Charles также есть разнообразные варианты настройки правил для подмен, включая регулярные выражения.

    • Разбираемся на примере: Если заголовок 'Accept-Language' равен 'fr-FR', выдать ответ на французском языке без ручного вмешательства.

      • Варианты подмен: В случае, если нам необходима смена языка, в Mockoon надо создать не одну подмену, а 2. Одна на английском, а вторая на французком.

      • Вкладка "Rules": Создать правило в каждом из вариантов подмен в зависимости от языка для заголовка 'Accept-Language', который равен или НЕ равен (используя !) значению 'fr-FR'.

Пример правила для заголовка Accept-Language
Пример правила для заголовка Accept-Language
  • Интеграция с системой контроля версий GitLab

    • Функция: В Mockoon есть возможность выгрузить готовые коллекции в GitLab, и также легко склонировать и установить окружения оттуда. Это заметно облегчает актуализацию и контроль за моками.

    • Сравнение с Charles: Для Charles отсутствует возможность установки целых коллекций с различными запросами.

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

      • Читабельность:  То как мы назвали один из вариантов подмены указано в responses.label, описание отдельно взятого эндпоинта и подмен внутри него есть documentation. Форматирование документов и удобство читаемости — дело субъективное, поэтому оценивать не стану, лишь покажу вам, как оно выглядит на картинке ниже.

Пример отображения JSON
Пример отображения JSON

Немного о 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 и повторно обновить страницу для перехвата нужного запроса.

Пример заполнения окна Edit Breakpoint
Пример заполнения окна Edit Breakpoint
  • Регулирование пропускной способности сети

    • Функция: Charles Proxy может регулировать качество соединения для эмуляции медленных сетевых условий (например, скорости 3G).

    • Сравнение с Mockoon: Mockoon поддерживает моделирование задержки для отдельных точек, но не может регулировать общую пропускную способность сети.

    • Разбираемся на примере: Для имитации проблем с сетью необходимо в Throttle Settings добавить нужный хост и отредактировать значения пропускной способности как показано на картинке ниже. После сохранения настроек нужно обновить тестируемую страницу.

Пример заполнения окна Throttle Settings
Пример заполнения окна 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 и обновить страницу.

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

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

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

Пример использования переменных в Rewrite
Пример использования переменных в Rewrite

Сравним и обсудим

Возможно у вас появились вопросы вроде: "Какой же инструмент лучше для 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 могут работать с двумя инструментами, согласовывая их использование с определенными фазами жизненного цикла разработки и своими потребностями. 

В общем попрощаюсь как обычно, не стойте на месте, с удовольствием изучайте новое и улучшайте себя! До новых встреч на Хабре!

Комментарии (3)


  1. antonidas37
    02.06.2025 14:37

    А будет ли сравнение с Proxyman?
    Интересно было бы почитать :)


    1. Paczuk
      02.06.2025 14:37

      +1 Чарлик "всеми любимый" только если вы не пробовали Proxyman


      1. dmitrofanova Автор
        02.06.2025 14:37

        Привет) сравнение Proxyman vs Mockoon или Proxyman vs Charles Proxy?
        Если второе, то похожие статьи уже есть: https://habr.com/ru/companies/ozontech/articles/579392/