Dummy — open-source для быстрого тестирования даже ещё не созданных API
Идея создать такой инструмент возникла, когда наш 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-решение или вы ищете команду профессионалов, которые выполнят проект с нуля, свяжитесь с нами через форму ниже.