Python client for Mockly — start/stop servers and manage HTTP mocks in tests
Project description
mockly-driver
Python client for Mockly — download, start, and control a Mockly mock HTTP server from your Python/pytest test suite.
Table of Contents
Installation
pip install mockly-driver
Then download the Mockly binary once:
mockly-install
# binary is placed in ./bin/mockly (or ./bin/mockly.exe on Windows)
Quick Start
pytest fixture
import pytest
from mockly_driver import MocklyServer, Mock, MockRequest, MockResponse
@pytest.fixture(scope="session")
def mockly():
# Downloads binary if needed, then starts the server
server = MocklyServer.ensure()
yield server
server.stop()
def test_my_service(mockly):
mockly.add_mock(Mock(
id="get-users",
request=MockRequest(method="GET", path="/users"),
response=MockResponse(status=200, body='[{"id":1}]',
headers={"Content-Type": "application/json"}),
))
# Your service under test talks to mockly.http_base
import urllib.request
with urllib.request.urlopen(f"{mockly.http_base}/users") as resp:
assert resp.status == 200
mockly.reset()
Scenarios
from mockly_driver import Scenario, ScenarioPatch
server = MocklyServer.ensure(
scenarios=[
Scenario(
id="slow-api",
name="Slow API",
patches=[ScenarioPatch(mock_id="get-users", delay="2s")],
)
]
)
server.activate_scenario("slow-api")
# ... run slow-path tests ...
server.deactivate_scenario("slow-api")
Faults
from mockly_driver import FaultConfig
server.set_fault(FaultConfig(enabled=True, status_override=503, error_rate=0.5))
# ... run fault-tolerance tests ...
server.clear_fault()
API Reference
MocklyServer.ensure(scenarios=None, **install_kwargs) -> MocklyServer
Downloads the binary (if not already present) and starts the server.
install_kwargs are forwarded to install() — see below.
MocklyServer.create(scenarios=None) -> MocklyServer
Starts the server using an already-installed binary.
Raises RuntimeError if no binary is found.
server.stop() -> None
Kills the Mockly process and removes the temp config file.
server.add_mock(mock: Mock) -> None
Registers a new HTTP mock at runtime.
Mock(
id="my-mock",
request=MockRequest(method="POST", path="/echo",
headers={"X-Api-Key": "secret"}),
response=MockResponse(status=201, body='{"ok":true}',
headers={"Content-Type": "application/json"},
delay="10ms"),
)
server.delete_mock(mock_id: str) -> None
Removes a previously registered mock by ID.
server.reset() -> None
Removes all dynamic mocks, deactivates all scenarios, and clears any active fault.
server.activate_scenario(scenario_id: str) -> None
Activates a pre-configured scenario.
server.deactivate_scenario(scenario_id: str) -> None
Deactivates a scenario.
server.set_fault(config: FaultConfig) -> None
Enables a fault injection policy.
FaultConfig(
enabled=True,
delay="200ms", # add latency to all responses
status_override=503, # force every response to 503
error_rate=0.3, # randomly fail 30% of requests
)
server.clear_fault() -> None
Removes the active fault policy.
install(version=None, base_url=None, bin_dir=None, force=False) -> str
Downloads the Mockly binary for the current platform. Returns the path.
get_binary_path(bin_dir=None) -> str | None
Returns the path to an existing binary, or None if not found.
Environment Variables
| Variable | Description | Default |
|---|---|---|
MOCKLY_BINARY_PATH |
Absolute path to a pre-staged binary — skips all download logic | — |
MOCKLY_VERSION |
Binary version to download | v0.1.0 |
MOCKLY_DOWNLOAD_BASE_URL |
Override the GitHub releases base URL (for mirrors/Artifactory) | https://github.com/dever-labs/mockly/releases/download |
MOCKLY_NO_INSTALL |
If set, install() raises RuntimeError instead of downloading |
— |
HTTPS_PROXY / HTTP_PROXY |
Route downloads through an HTTP proxy | — |
Proxy / Artifactory / Air-gap
HTTP/HTTPS proxy
export HTTPS_PROXY=http://proxy.corp.example.com:3128
mockly-install
Internal mirror / Artifactory
Set MOCKLY_DOWNLOAD_BASE_URL to your internal artifact repository:
export MOCKLY_DOWNLOAD_BASE_URL=https://artifactory.corp.example.com/mockly/releases/download
mockly-install
Air-gap / pre-staged binary
Copy the binary for your platform to a known location and set:
export MOCKLY_BINARY_PATH=/opt/mockly/mockly
export MOCKLY_NO_INSTALL=1 # optional: prevents accidental downloads
CLI
mockly-install [--version VERSION] [--base-url URL] [--bin-dir DIR] [--force]
Downloads the platform binary to <bin-dir>/mockly[.exe] (default: ./bin/).
License
MIT © dever-labs
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mockly_driver-0.4.6.tar.gz.
File metadata
- Download URL: mockly_driver-0.4.6.tar.gz
- Upload date:
- Size: 10.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29ff35d205fcc4257eb932126a30efee2cef741e3552329d089f41fc8f745520
|
|
| MD5 |
c1b70d3aa7059c5329dc736011676238
|
|
| BLAKE2b-256 |
a84165f2749cb4e7f73348438360c5369830fecc4f8da1317a5c205758d6ea95
|
File details
Details for the file mockly_driver-0.4.6-py3-none-any.whl.
File metadata
- Download URL: mockly_driver-0.4.6-py3-none-any.whl
- Upload date:
- Size: 10.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eec1072a41962226aba6f7a58784bb726cc1a02f34d60ec91dbcde10ec11d4df
|
|
| MD5 |
6b3f610c6391cb7c0497de6952dd4237
|
|
| BLAKE2b-256 |
40c85ca6794632cc47802827bd639f04710ea430f728971a553ee4b1b6934785
|