Skip to main content

Reverse engineer services with style

Project description

Meeshkan

CircleCI PyPI Code style: black License: MIT

Meeshkan is a tool that mocks HTTP APIs for use in sandboxes as well as for automated and exploratory testing. It uses a combination of API definitions, recorded traffic and code in order to make crafting mocks as enjoyable as possible.

Chat with us on Gitter to let us know about questions, problems or ideas!

What's in this document

Installation

Install via pip (requires Python 3.6+):

pip install meeshkan

macOS users can install Meeshkan with Homebrew:

brew tap meeshkan/tap
brew install meeshkan

Debian and Ubuntu users can install Meeshkan with apt:

echo "deb [trusted=yes] https://dl.bintray.com/meeshkan/apt all main" | tee -a /etc/apt/sources.list
apt-get -qq update && apt-get install meeshkan

Getting started with Meeshkan

The basic Meeshkan flow is collect, build and mock.

  1. First, collect data from recorded server traffic and/or OpenAPI specs.
  2. Then, build a schema that unifies these various data sources.
  3. Finally, use this schema to create a mock server of an API.

Tutorial

The quickest way to get an overview of Meeshkan is to complete our interactive tutorial. It walks you through the collect, build, and mock flow - while also covering the concepts necessary for development.

First, install meeshkan-tutorial via pip:

$ pip install meeshkan-tutorial
$ meeshkan-tutorial

Note: This tutorial has been tested on Python 3.6, 3.7, and 3.8.

After installing, you can begin the tutorial by invoking from the command line:

$ meeshkan-tutorial

Once you've run this, you should see:

                             __    __
   ____ ___  ___  ___  _____/ /_  / /______ _____
  / __ `__ \/ _ \/ _ \/ ___/ __ \/ //_/ __ `/ __ \
 / / / / / /  __/  __(__  ) / / / ,< / /_/ / / / /
/_/ /_/ /_/\___/\___/____/_/ /_/_/|_|\__,_/_/ /_/


The tutorial!!
Press ENTER to continue...

If not, it's probably our fault. Please let us know by filing an issue on the meeshkan-tutorial repo.

Collect recordings of API traffic

Let's look at how to build a Meeshkan spec. First, you have to collect recordings of server traffic and/or OpenAPI server specs.

To record API traffic, the Meeshkan CLI provides a record mode that captures API traffic using a proxy.

$ meeshkan record

This command starts Meeshkan as a reverse proxy on the default port of 8000 and creates two directories: logs and specs.

With curl, for example, you can use Meeshkan as a proxy like so:

$ curl http://localhost:8000/http://api.example.com

By default, the recording proxy treats the path as the target URL. It then writes a .jsonl file containing logs of all server traffic to the logs directory. All logs are created in the http-types format. This is because Meeshkan's build tool expects all recordings to be represented in a .jsonl file containing recordings represented in the http-types format.

For more information about recording, including direct file writing and kafka streaming, see the recording documentation.

Build a Meeshkan spec from recordings

Using the Meeshkan CLI, you can build an OpenAPI schema from a single .jsonl file, in addition to any existing OpenAPI specs that describe how your service works.

$ meeshkan build --input-file path/to/recordings.jsonl 

Note: The input file should be in JSON Lines format and every line should be in http-types JSON format. For an example input file, see recordings.jsonl.

Optionally, you can also specify an output directory using the --out flag followed by the path to this directory. By default, Meeshkan will build the new OpenAPI specifications in the specs directory.

Use dash (--input-file -) to read from standard input:

$ meeshkan build --input-file - < recordings.jsonl

Building modes

You can use a mode flag to indicate how the OpenAPI spec should be built, for example:

meeshkan build --input-file path/to/recordings.jsonl --mode gen

Supported modes are:

  • gen [default] - infer a schema from the recorded data
  • replay - replay the recorded data based on exact matching

For more information about building, including mixing together the two modes and editing the created OpenAPI schema, see the building documentation.

Mock server traffic using a Meeshkan spec

You can use an OpenAPI spec, such as the one created with meeshkan build, to create a mock server using Meeshkan.

$ meeshkan mock path/to/dir/

Note: You can specify a path to the directory your OpenAPI spec is in or a path to one specific file.

For more information about mocking, including adding custom middleware and modifying the mocking schema JIT via an admin API, see the mocking documentation.

Development

Here are some useful tips for building and running Meeshkan from source.

If you run into any issues, please reach out to our team on Gitter.

Getting started

  1. Clone this repository: git clone https://github.com/meeshkan/meeshkan
  2. Create a virtual environment: virtualenv .venv && source .venv/bin/activate
  3. Install dependencies: pip install --upgrade -e '.[dev]'

Tests

Run all checks:

$ python setup.py test

pytest

Run tests/ with pytest:

pytest
# or
python setup.py test

Configuration for pytest is found in pytest.ini.

Formatting

Formatting is checked by the above mentioned python setup.py test command.

To fix formatting:

$ python setup.py format

flake8

Run style checks:

$ flake8 .

pyright

You can run type-checking by installing pyright globally:

$ npm -i -g pyright

And then running:

$ pyright --lib
$ # or
$ python setup.py typecheck

Using the Pyright extension is recommended for development in VS Code.

Automated builds

Configuration for CircleCI build pipeline can be found in .circleci/config.yml.

Publishing Meeshkan as a PyPi package

To publish Meeshkan as a PyPi package, complete the following steps:

  1. Bump the version in setup.py if the version is the same as in the published package. Commit and push.
  2. Run python setup.py test to check that everything works
  3. To build and upload the package, run python setup.py upload. Insert PyPI credentials to upload the package to PyPI. The command will also run git tag to tag the commit as a release and push the tags to remote.

To see what the different commands do, see Command classes in setup.py.

Contributing

Thanks for your interest in contributing! Please take a look at our development guide for notes on how to develop the package locally. A great way to start contributing is to file an issue or make a pull request.

Code of Conduct

Please note that this project is governed by the Meeshkan Community Code of Conduct. By participating, you agree to abide by its terms.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

meeshkan-0.2.25.tar.gz (62.8 kB view details)

Uploaded Source

Built Distribution

meeshkan-0.2.25-py2.py3-none-any.whl (81.5 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file meeshkan-0.2.25.tar.gz.

File metadata

  • Download URL: meeshkan-0.2.25.tar.gz
  • Upload date:
  • Size: 62.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/45.1.0 requests-toolbelt/0.8.0 tqdm/4.36.1 CPython/3.6.8

File hashes

Hashes for meeshkan-0.2.25.tar.gz
Algorithm Hash digest
SHA256 cbbae23191d49c315a61a4a62404f7e18e17d1f02c597883fb4054c757349561
MD5 0aa02a3377fc87f3209a2b3a3efd0d81
BLAKE2b-256 1f3467bb87220c4f53584d80f7fa87f8e12ca6426d8ca0c1b14907cd52900888

See more details on using hashes here.

File details

Details for the file meeshkan-0.2.25-py2.py3-none-any.whl.

File metadata

  • Download URL: meeshkan-0.2.25-py2.py3-none-any.whl
  • Upload date:
  • Size: 81.5 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/45.1.0 requests-toolbelt/0.8.0 tqdm/4.36.1 CPython/3.6.8

File hashes

Hashes for meeshkan-0.2.25-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 cf50446dde02e4bf75ba71668d053a788538ad00dd01efab56464d68a46e612a
MD5 a120aa6fad077e2bf574b128f771f97f
BLAKE2b-256 5b8fb712581ec6b0373fb851be228f5509c0616bfd760f2e6dd74456b82a7b81

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page