Dummy — open-source для быстрого тестирования даже ещё не созданных API

March 2022

Идея создать такой инструмент возникла, когда наш Golang-разработчик Александр Мелентьев работал над проектом одного из клиентов. Александру пришлось заниматься интеграцией с API партнёра. По ряду причин в процессе интеграции не хотелось обращаться к настоящему API, поэтому возникла необходимость использовать mock. Клиент предоставлял спецификацию OpenAPI, так что мы могли бы сгенерировать сервер с помощью swagger-codegen. Но у этого подхода есть нюанс —  генерируются только заглушки, которые выдают пустые ответы, так что тестовые ответы пришлось бы писать самим. На это обычно уходит очень много времени, а его не было. Поэтому мы решили написать инструмент, который на основе OpenAPI генерировал бы сервер, способный выдавать в ответ примеры из спецификации.

 

Мы начали искать инструменты, которые могут делать что-то подобное, нашли решение prism с открытым исходным кодом, написанное на NodeJS, и реализовали аналогичное решение на Go. Кстати, выяснилось, что QA-специалистам такой инструмент также полезен, он освобождает их от необходимости вручную писать код. Им достаточно взять спецификацию от партнёра и запустить тестовый сервер одной командой, сэкономив массу времени и ресурсов.

В итоге Александр создал dummy, очень полезный и востребованный инструмент, который помогает запустить mock-сервер на основе контракта API, чтобы протестировать API еще до того, как он будет создан. Вы можете запустить его локально: команда dummy server запустит ваш API на HTTP-сервере, с которым вы можете взаимодействовать.

Использование dummy

Использовать dummy очень просто: установите его, затем используйте команду server и укажите путь к спецификации. Поддерживаются как ссылки, так и пути к файлам — это очень полезно, когда нужно интегрироваться с реальным API, не создавая излишней нагрузки. Инструмент также удобен для тестирования API на локальном сервере — вы можете просто использовать dummy, а не писать mock API-сервер на Go вручную.

Инсталляция:

go install github.com/neotoolkit/dummy/cmd/dummy@latest

Использование:

Локально, с помощью команды  dummy s запустите API на HTTP-сервере, с которым вы можете взаимодействовать.

dummy s openapi.yml
dummy s https://raw.githubusercontent.com/neotoolkit/dummy/main/examples/docker/openapi.yml

Возможности

Если в процессе интеграции возникает необходимость в динамических данных, можно использовать встроенный генератор случайных данных faker. В спецификацию для полей необходимо добавить кастомное поле x-faker и передать в него требуемый тип данных. Например,  x-faker: firstname динамически сгенерирует имя.

Может возникнуть вопрос: а почему бы не использовать генераторы типа swagger-codegen? Дело в том, во-первых, чтобы swagger-codegen сгенерировал сервер, вам придется выполнить несколько действий вместо одного. Во-вторых, сервер будет сгенерирован, и вы сможете перейти по адресам, которые описаны в документации, но ответ будет пустым. Фактически, вы не проверите, удачно ли проходит интеграция, потому что не получите никаких данных на выходе. При использовании dummy в ответ придут примеры, описанные в  спецификации.

Планы на будущее

На данный момент поддерживается только OpenAPI, но мы планируем добавить поддержку для GraphQL, RAML и gRPC. Мы инициативны и понимаем, что нравится разработчикам и какие инструменты им нужны.  Подтверждение этому — наша работа над проектами с открытым исходным кодом, а также то, что мы ежемесячно выбираем несколько OSS-проектов и оказываем им спонсорскую поддержку. Если вам нужно разработать open-source-решение или вы ищете команду профессионалов, которые выполнят проект с нуля, свяжитесь с нами через форму ниже.

При интеграции с API вендора всегда нужно осознавать, что любой запрос — это нагрузка. Отсюда и возникла потребность в этом инструменте. Так же с подобным инструментом можно облегчить процесс разработки, так как, например, фронтенду не нужно ожидать реализации бэкенда — достаточно полностью описать контракт на этапе аналитики
Александр Мелентьев
Golang developer, Evrone
Будем на связи
Прикрепить файл
Максимальный размер файла: 8 МБ.
Допустимые типы файлов: jpg jpeg png txt rtf pdf doc docx ppt pptx.