You've just found a new way of mocking microservices!
An example config that demonstrates the common features of Mockintosh:
services:
- name: Mock for Service1
hostname: localhost
port: 8000
managementRoot: __admin # open http://localhost:8001/__admin it in browser to see the UI
endpoints:
- path: "/" # simplest mock
- path: "/api/users/{{param}}" # parameterized URLs
response: "simple string response with {{param}} included"
- path: /comprehensive-matching-and-response
method: POST
queryString:
qName1: qValue # will only match if query string parameter exists
qName2: "{{regEx '\\d+'}}" # will require numeric value
headers:
x-required-header: someval # will cause only requests with specific header to work
body:
text: "{{regEx '.+'}}" # will require non-empty POST body
response: # the mocked response specification goes below
status: 202
body: "It worked"
headers:
x-response-header: "{{random.uuid4}}" # a selection of random/dynamic functions is available
x-query-string-value: "{{request.queryString.qName2}}" # request parts can be referenced in response
Mockintosh is a service virtualization tool that's capable to generate mocks for RESTful APIs and communicate with message queues to either mimic asynchronous tasks or to simulate microservice architectures in a blink of an eye.
The state-of-the-art mocking capabilities of Mockintosh enables software development teams to work independently while building and maintaining a complicated microservice architecture.
Key features:
- Multiple services mocked by a single instance of Mockintosh
- Lenient configuration syntax
- Remote management UI+API
- Request scenarios support with multi-response endpoints and tags
- Mock Actor pattern for Kafka, RabbitMQ, Redis and some other message bus protocols
- GraphQL queries recognizing
In this article we explain how and why Mockintosh was born as a new way of mocking microservices.
Install Mockintosh app on Mac using Homebrew package manager:
$ brew install up9inc/repo/mockintoshDownload an installer from releases section and launch it. Follow the steps in wizard to install Mockintosh.
Install Mockintosh Python package using pip (or pip3 on some machines):
$ pip install -U mockintoshRun following command to generate example.yaml file in the current directory:
$ mockintosh --sample-config example.yamlthen, run that config with Mockintosh:
$ mockintosh example.yamlAnd open http://localhost:9999 in your web browser.
You can also issue some CURL requests against it:
curl -v http://localhost:8888/
curl -v http://localhost:8888/api/myURLParamValue123/action
curl -v "http://localhost:8888/someMoreFields?qName1=qValue&qName2=12345" -X POST -H"X-Required-Header: someval" --data "payload"The list of command-line arguments can be seen by running mockintosh --help.
If you don't want to listen all of the services in a configuration file then you can specify a list of service
names (name is a string attribute you can set per service):
$ mockintosh example.yaml 'Mock for Service1' 'Mock for Service2'Using --quiet and --verbose options the logging level can be changed.
Using --bind option the bind address for the mock server can be specified, e.g. mockintosh --bind 0.0.0.0
Using --enable-tags option the tags in the configuration file can be enabled in startup time,
e.g. mockintosh --enable-tags first,second
Note: This feature is experimental. One-to-one transpilation of OAS documents is not guaranteed.
It could be a good kickstart if you have already an OpenAPI Specification for your API. Mockintosh is able to transpile an OpenAPI Specification to its own config format in two different ways:
Using the --convert one can convert an OpenAPI Specification to Mockintosh config.
JSON output example:
$ wget https://petstore.swagger.io/v2/swagger.json
$ mockintosh swagger.json -c new_config.json jsonYAML example:
$ mockintosh swagger.json -c new_config.yaml yamlIf you start Mockintosh with a valid OpenAPI Specification file then it automatically detects that the input is an OpenAPI Specification file:
$ mockintosh swagger.jsonand automatically starts itself from that file. Without producing any new files. So you can start to edit this file through the management UI without even restarting Mockintosh.
Single-command from /docs to review docs locally:
docker run -p 8080:4000 -v $(pwd):/site bretfisher/jekyll-serveOr manual:
$ gem install jekyll bundlerInstall the gems:
$ cd docs/
$ bundle config set --local path 'vendor/bundle'
$ bundle installRun the server:
$ bundle exec jekyll serve