Перейти к содержанию
вторник, 4 августа 2026 г.

ИИ Вестник

Главные новости о развитии искусственного интеллекта в России

Разработчик создал WiremockJs — собственный скриптовый язык для WireMock на основе ANTLR

Источник: Все публикации в потоке Разработка
A developer coding a custom scripting language at a desk, IDE on screen.
Generated by Sourceful Riverflow (RouterAI)

Автор UI-инструмента для WireMock представил WiremockJs — упрощённый скриптовый язык, который позволяет задавать гибкую логику моков без Java-расширений. Проект стал ответом на потребность в быстрой настройке заглушек для автотестов и на ограничения существующих решений.

Разработчик, известный под псевдонимом WiremockJs, опубликовал подробный рассказ о создании собственного скриптового языка для WireMock. В статье, размещённой в потоке «Разработка», он описывает путь от идеи до рабочего прототипа, включая проектирование грамматики, выбор инструментов и преодоление ограничений. Проект возник как логичное продолжение предыдущей работы — UI для WireMock, который автор создал несколько месяцев назад. Тот интерфейс включал визуальный конструктор стабов, дерево API с поиском, историю запросов и профили, но в нём не хватало поддержки скриптов, необходимых для создания динамических моков. Автор подчёркивает, что профили стали ключевым решением, избавившим его от головной боли при переключении между проектами, однако скрипты остались нереализованной мечтой, которую он решил воплотить в новом проекте.

Ключевым стимулом стала необходимость дать автотестировщикам инструмент для гибкой настройки заглушек без участия разработчика. Автор отмечает, что команды тестировщиков часто обращались к нему с вопросами по мокам, и обучение новых сотрудников нюансам WireMock занимало колоссальное время. Существующие решения, такие как WireMockCoolExtensions, не обновлялись около десяти лет и не выглядели законченными продуктами. Интеграция же полноценного JavaScript через Nashorn или GraalVM Polyglot вызывала опасения по безопасности и тянула за собой тяжёлые зависимости, особенно учитывая, что WireMock до сих пор работает на Java 11. Взвесив все за и против, автор решил создать собственный упрощённый диалект, названный WiremockJs, который покрывает лишь необходимый минимум возможностей. Это решение продиктовано практичностью: для большинства сценариев моков не нужны все возможности JavaScript, а вот простота и безопасность критичны.

Технически проект построен на ANTLR — мощном генераторе парсеров, который позволяет формально описать грамматику языка. Первая версия грамматики включает операторы if-else, return, арифметические и логические выражения, вызовы функций, доступ к полям, литералы и JSON-объекты. Синтаксис намеренно приближен к JavaScript, чтобы облегчить восприятие тестировщиками, но при этом исключены циклы, переменные и другие сложные конструкции. Автор подчёркивает, что на начальном этапе важнее было создать работающее расширение и простую грамматику, которую можно легко привязать к стабу. Для интеграции с WireMock используется официальный шаблон wiremock-extension-template, а в Gradle-зависимости добавляются antlr и antlr4-runtime версии 4.13.2. Такой подход позволяет быстро подключать язык к существующей инфраструктуре WireMock, не требуя глубоких изменений в коде.

Контекст разработки включает и более широкую проблему: автор упоминает, что в его компании не всегда создаются условия для разработки инструментов, и часто инициатива исходит от конкретных людей. За 15 лет опыта он пришёл к выводу, что если нужен инструмент, экономящий время, его проще создать самому. UI для WireMock стал своего рода пет-проектом, приносящим удовольствие и снижающим риск выгорания. В предыдущей версии интерфейса скрипты отсутствовали, и автор мечтал о возможности редактировать логику моков на лету, без перезапуска WireMock. Традиционный подход с JAR-расширениями на Java требовал сборки, деплоя и перезапуска, что занимало минуты, а не секунды, и отпугивало тестировщиков, пишущих на Python. Автор также критикует подход с папками в UI, как в Postman, предпочитая профили, которые проще и практичнее для управления заглушками.

Для российского рынка и сообщества разработчиков этот проект интересен как пример самостоятельного решения типовой задачи. Многие команды сталкиваются с необходимостью настраивать моки для автотестов, и готовые инструменты часто не отвечают специфическим требованиям. WiremockJs предлагает альтернативу: лёгкий язык, который можно освоить за несколько минут, и который не требует глубоких знаний Java. Автор также отмечает, что в отличие от UI, где он критикует подход с папками как в Postman, в скриптах он сознательно повторяет синтаксис JavaScript, чтобы снизить порог входа. Это решение выглядит прагматичным, хотя и ограничивает выразительность языка. Тем не менее, для большинства задач автотестирования минимального набора конструкций достаточно, а сложные случаи можно решать через Java-расширения, если это действительно необходимо.

Сравнение с альтернативами показывает, что WiremockJs занимает нишу между статичными стабами и полноценными Java-расширениями. Он проще, чем использование GraalVM Polyglot, и безопаснее, чем выполнение произвольного JavaScript в JVM. Однако у языка есть очевидные ограничения: отсутствие циклов и переменных может затруднить написание сложной логики. Автор признаёт, что это осознанный компромисс на старте, и не исключает расширения грамматики в будущем. Пока же проект находится на стадии прототипа, и автор приглашает сообщество к обсуждению и тестированию. Важно отметить, что WiremockJs не претендует на замену полноценных языков, а предлагает узкоспециализированное решение, которое закрывает конкретную потребность — быструю настройку динамических моков без лишних зависимостей.

Перспективы WiremockJs выглядят многообещающими, но остаются открытые вопросы. Во-первых, неизвестно, насколько активно тестировщики будут использовать новый язык в реальных проектах. Во-вторых, автору предстоит решить, добавлять ли поддержку циклов, переменных и более сложных конструкций, чтобы приблизить язык к полноценному JavaScript. В-третьих, важна обратная связь от сообщества: если проект найдёт отклик, он может стать полноценным инструментом, который войдёт в экосистему WireMock. Пока же автор продолжает развивать свой пет-проект, получая удовольствие от творчества и надеясь, что его опыт вдохновит других разработчиков на создание собственных решений. Возможно, в будущем WiremockJs станет стандартом для настройки моков в русскоязычном сообществе, но это зависит от того, насколько активно разработчики и тестировщики примут его в свою практику.

Читайте также