A lightweight HTTP mocking server for Python
Project description
Mimicker is a Python-native HTTP mocking server inspired by WireMock, designed to simplify the process of stubbing and mocking HTTP endpoints for testing purposes. Mimicker requires no third-party libraries and is lightweight, making it ideal for integration testing, local development, and CI environments.
Features
- Create HTTP stubs for various endpoints and methods
- Mock responses with specific status codes, headers, and body content
- Flexible configuration for multiple endpoints
Installation
Mimicker can be installed directly from PyPI using pip or Poetry:
Using pip:
pip install mimicker
Using poetry:
poetry add mimicker
Usage
To start Mimicker on a specific port with a simple endpoint, you can use the following code snippet:
from mimicker.mimicker import mimicker, get
mimicker(8080).routes(
get("/hello").
body({"message": "Hello, World!"}).
status(200)
)
Examples
Using Path Parameters
Mimicker can handle path parameters dynamically. Here's how you can mock an endpoint with a variable in the path:
from mimicker.mimicker import mimicker, get
mimicker(8080).routes(
get("/hello/{name}")
.body({"message": "Hello, {name}!"})
.status(200)
)
# When the client sends a request to /hello/world, the response will be:
# {"message": "Hello, world!"}
Using Headers
You can also mock responses with custom headers:
from mimicker.mimicker import mimicker, get
mimicker(8080).routes(
get("/hello")
.body("Hello with headers")
.headers([("Content-Type", "text/plain"), ("Custom-Header", "Value")])
.status(200)
)
# The response will include custom headers
Multiple Routes
Mimicker allows you to define multiple routes for different HTTP methods and paths. Here's an example with GET
and POST
routes:
from mimicker.mimicker import mimicker, get, post
mimicker(8080).routes(
get("/greet")
.body({"message": "Hello, world!"})
.status(200),
post("/submit")
.body({"result": "Submission received"})
.status(201)
)
# Now the server responds to:
# GET /greet -> {"message": "Hello, world!"}
# POST /submit -> {"result": "Submission received"}
Handling Different Status Codes
You can also mock different HTTP status codes for the same endpoint:
from mimicker.mimicker import mimicker, get
mimicker(8080).routes(
get("/status")
.body({"message": "Success"})
.status(200),
get("/error")
.body({"message": "Not Found"})
.status(404)
)
# GET /status -> {"message": "Success"} with status 200
# GET /error -> {"message": "Not Found"} with status 404
Mocking Responses with JSON Body
Mimicker supports JSON bodies, making it ideal for API testing:
from mimicker.mimicker import mimicker, get
mimicker(8080).routes(
get("/json")
.body({"message": "Hello, JSON!"})
.status(200)
)
# The response will be: {"message": "Hello, JSON!"}
Supporting Other Body Types (Text, Files, etc.)
In addition to JSON bodies, Mimicker supports other types of content for the response body. Here's how you can return text or file content:
Text Response:
from mimicker.mimicker import mimicker, get
mimicker(8080).routes(
get("/text")
.body("This is a plain text response")
.status(200)
)
# The response will be plain text: "This is a plain text response"
File Response:
You can also return files from a mock endpoint:
from mimicker.mimicker import mimicker, get
mimicker(8080).routes(
get("/file")
.body(open("example.txt", "rb").read()) # Mock a file response
.status(200)
)
# The response will be the content of the "example.txt" file
Available Features:
get(path)
: Defines aGET
endpoint.post(path)
: Defines aPOST
endpoint.put(path)
: Defines aPUT
endpoint.delete(path)
: Defines aDELETE
endpoint..body(content)
: Defines the responsebody
..status(code)
: Defines the responsestatus code
..headers(headers)
: Defines responseheaders
.
Requirements
Mimicker supports Python 3.7 and above.
License
Mimicker is released under the MIT License. see the LICENSE for more information.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file mimicker-0.1.2.tar.gz
.
File metadata
- Download URL: mimicker-0.1.2.tar.gz
- Upload date:
- Size: 8.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7e9929a5b70c312b2c2196c15b586dbb399b383ff4d7b221320f275d1edae575 |
|
MD5 | 17c96c120f27b6bd556a9311edc0a187 |
|
BLAKE2b-256 | a34064eb705df27aabd644063ef57fe9d942e851ef3aa14781c603d5330f426e |
File details
Details for the file mimicker-0.1.2-py3-none-any.whl
.
File metadata
- Download URL: mimicker-0.1.2-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e0ddeac5956c29d7a083b1195fe70a0f11c9118c9abba0660d36e0e6001adf4e |
|
MD5 | 63ccf20d3bfc5eaa0806b630edc4cfd2 |
|
BLAKE2b-256 | 37354cea4a4f47e0b5db03d881475dfc828381ae65f3a00b69027a7cc43f670f |