Skip to main content

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=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=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.16.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

Metadata

Release files for mockly-driver 0.16.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mockly-driver 0.16.0
File Size Uploaded
mockly_driver-0.16.0.tar.gz 14.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mockly-driver 0.16.0
File Interpreter ABI Platform
mockly_driver-0.16.0-py3-none-any.whl Python 3 none any Details

Total release size: 25.8 kB

Release files / mockly_driver-0.16.0.tar.gz

Download URL mockly_driver-0.16.0.tar.gz
Size 14.4 kB
Tags Source
SHA-256 checksum
How to use checksums
277d716bdfd33386ba7172bf0e648e31693fd6932afeea902a8220170462d954
BLAKE2b-256 checksum
How to use checksums
84fe8ff78201efdd35fb89977a10d9141b746df43affb4b03fe857fa8310cdbb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release files / mockly_driver-0.16.0-py3-none-any.whl

Download URL mockly_driver-0.16.0-py3-none-any.whl
Size 11.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
af644bf552b3243d997f588cf4103bbecf25c2e3f7e81c25653dab74fc62bdf6
BLAKE2b-256 checksum
How to use checksums
5d9f23ae3e3d2dcdbb81cfa018923072532b022326e25fac14ac9d98ca62dea5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

0.16.0 This release

2 release files

0.13.1

2 release files

0.12.4

2 release files

0.12.3

2 release files

0.12.2

2 release files

0.12.1

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.10.0

2 release files

0.9.0

2 release files

0.8.1

2 release files

0.8.0

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

0.5.1

2 release files

0.5.0

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.4.5

2 release files

0.4.4

2 release files

0.4.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page