Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/quii/mockingjay-server
Fake server, Consumer Driven Contracts and help with testing performance from one configuration file with zero system dependencies and no coding whatsoever
https://github.com/quii/mockingjay-server
Last synced: 6 days ago
JSON representation
Fake server, Consumer Driven Contracts and help with testing performance from one configuration file with zero system dependencies and no coding whatsoever
- Host: GitHub
- URL: https://github.com/quii/mockingjay-server
- Owner: quii
- License: mit
- Created: 2015-04-04T19:18:02.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2022-05-26T17:45:27.000Z (over 2 years ago)
- Last Synced: 2024-12-08T19:11:50.773Z (13 days ago)
- Language: Go
- Homepage:
- Size: 36.5 MB
- Stars: 561
- Watchers: 13
- Forks: 71
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
- awesome-go - mockingjay-server - Fake server, Consumer Driven Contracts and help with testing performance from one configuration file with zero system dependencies and no coding whatsoever - ★ 371 (Software Packages)
- awesome-go-extra - mockingjay-server - 04-04T19:18:02Z|2022-05-26T17:45:27Z| (Go Tools / Other Software)
README
# mockingjay server
[![Build Status](https://travis-ci.org/quii/mockingjay-server.svg?branch=master)](https://travis-ci.org/quii/mockingjay-server)[![Coverage Status](https://coveralls.io/repos/quii/mockingjay-server/badge.svg?branch=master)](https://coveralls.io/r/quii/mockingjay-server?branch=master)[![GoDoc](https://godoc.org/github.com/quii/mockingjay-server?status.svg)](https://godoc.org/github.com/quii/mockingjay-server)
![mj example](http://i.imgur.com/ZtI1Q39.gif)
Mockingjay lets you define the contract between a consumer and producer and with just a configuration file you get:
- A fast to launch fake server for your integration tests
- Configurable to simulate the eratic nature of calling other services
- [Consumer driven contracts (CDCs)](http://martinfowler.com/articles/consumerDrivenContracts.html) to run against your real downstream services.**Mockingjay makes it really easy to check your HTTP integration points**. It's fast, requires no coding and is better than other solutions because it will ensure your mock servers and real integration points are consistent so that you never have a green build but failing software.
- [Installation](https://github.com/quii/mockingjay-server/wiki/Installing) - [Download a binary](https://github.com/quii/mockingjay-server/releases/latest), [use a Docker image](https://hub.docker.com/r/quii/mockingjay-server/) or `go get`
- [Rationale](https://github.com/quii/mockingjay-server/wiki/Rationale)
- [See how mockingjay can easily fit into your workflow to make integration testing really easy and robust](https://github.com/quii/mockingjay-server/wiki/Suggested-workflow)## Running a fake server
````yaml
---
- name: My very important integration point
request:
uri: /hello
method: POST
body: "Chris" # * matches any body
response:
code: 200
body: '{"message": "hello, Chris"}' # * matches any body
headers:
content-type: application/json# define as many as you need...
````````bash
$ mockingjay-server -config=example.yaml -port=1234 &
2015/04/13 14:27:54 Serving 3 endpoints defined from example.yaml on port 1234
$ curl http://localhost:1234/hello
{"message": "hello, world"}
````## Check configuration is compatible with a real server
````bash
$ mockingjay-server -config=example.yaml -realURL=http://some-real-api.com
2015/04/13 21:06:06 Test endpoint (GET /hello) is incompatible with http://some-real-api - Couldn't reach real server
2015/04/13 21:06:06 Test endpoint 2 (DELETE /world) is incompatible with http://some-real-api - Couldn't reach real server
2015/04/13 21:06:06 Failing endpoint (POST /card) is incompatible with http://some-real-api - Couldn't reach real server
2015/04/13 21:06:06 At least one endpoint was incompatible with the real URL supplied
````
This ensures your integration test is working against a *reliable* fake.### Inspect what requests mockingjay has received
http://{mockingjayhost}:{port}/requests
Calling this will return you a JSON list of requests
## Make your fake server flaky
Mockingjay has an annoying friend, a monkey. Given a monkey configuration you can make your fake service misbehave. This can be useful for performance tests where you want to simulate a more realistic scenario (i.e all integration points are painful).
````yaml
---
# Writes a different body 50% of the time
- body: "This is wrong :( "
frequency: 0.5# Delays initial writing of response by a second 20% of the time
- delay: 1000
frequency: 0.2# Returns a 404 30% of the time
- status: 404
frequency: 0.3# Write 10,000,000 garbage bytes 9% of the time
- garbage: 10000000
frequency: 0.09
````````bash
$ mockingjay-server -config=examples/example.yaml -monkeyConfig=examples/monkey-business.yaml
2015/04/17 14:19:53 Serving 3 endpoints defined from examples/example.yaml on port 9090
2015/04/17 14:19:53 Monkey config loaded
2015/04/17 14:19:53 50% of the time | Body: This is wrong :(
2015/04/17 14:19:53 20% of the time | Delay: 1s
2015/04/17 14:19:53 30% of the time | Status: 404
2015/04/17 14:19:53 9% of the time | Garbage bytes: 10000000
````## Building
### Requirements
- Go 1.3+ installed ($GOPATH set, et al)
- golint https://github.com/golang/lint### Build application
````bash
$ go get github.com/quii/mockingjay-server
$ cd $GOPATH/src/github.com/quii/mockingjay-server
$ ./build.sh
````MIT license