aiohttp mock library that routes requests through a real test server
Project description
aiointercept
Mock aiohttp HTTP requests by routing them through a real aiohttp.web test server. Inspired by aioresponses, with a largely compatible API.
import aiohttp
from aiointercept import aiointercept
async with aiointercept() as m:
m.get(f"{m.server_url}/users", payload=[{"id": 1}])
async with aiohttp.ClientSession() as session:
resp = await session.get(f"{m.server_url}/users")
assert await resp.json() == [{"id": 1}]
Why aiointercept?
Testing code that makes HTTP requests usually means either hitting a real server (slow, fragile, requires network) or replacing the HTTP layer with fake objects (fast, but disconnected from reality).
aiointercept takes a third path: it starts a real aiohttp.web server on localhost and redirects your client's requests to it — either by pointing the client at m.server_url directly, or by patching the DNS resolver so existing URLs are transparently intercepted. Your code runs its full HTTP stack; only the remote endpoint is replaced.
- Real serialization. Headers, body encoding, and content-type negotiation all go through the actual aiohttp stack.
- Inspectable requests. Callbacks receive a real
aiohttp.web.Request— read the body, headers, and query params the server saw. - Minimal patching. The default mode touches nothing globally. When you need to intercept hardcoded URLs, only the DNS resolver is patched, so redirects and connection pooling still behave as in production.
Installation
pip install aiointercept
Requirements: Python ≥ 3.10, aiohttp ≥ 3.13.
Documentation
Full documentation is at aiointercept.readthedocs.io:
- Quickstart — context manager, decorator, pytest fixture, and
start()/stop()usage. - Usage guide — interception modes, registering responses, regex patterns, callbacks, and passthrough.
- Assertions —
assert_called_withand friends. - API reference — every public class and method.
Sharing the server across tests
Starting and stopping a server for every test adds up. aiointercept ships an
auto-discovered pytest plugin (requires pytest-asyncio) that starts the server
once per session and hands each test a cleared mock via the
aiointercept_mock fixture:
async def test_users(aiointercept_mock):
m = aiointercept_mock
m.get(f"{m.server_url}/users", payload=[{"id": 1}])
async with aiohttp.ClientSession() as session:
resp = await session.get(f"{m.server_url}/users")
assert await resp.json() == [{"id": 1}]
The fixture calls m.clear() between tests, so registered handlers and recorded
requests never leak from one test to the next. The session-scoped server itself
is exposed as aiointercept_server if you need it directly.
Coming from aioresponses?
aiointercept aims to be a near drop-in replacement. The migration guide (MIGRATING.md) covers every breaking change. If you hit an incompatibility it doesn't cover, please open an issue.
Contributing
uv sync --group dev --group tests # install everything
uv run pytest tests/ # run the suite
uv run ruff check . # lint
uv run mypy aiointercept # type check
Pre-commit hooks run ruff and mypy on every commit; do not bypass them with --no-verify.
License
aiointercept is released under the MIT License.
Attribution
Built on ideas and API conventions from aioresponses by Pawel Nuckowski (MIT License). tests/test_aioresponse.py is a lightly adapted port of the original test suite, used to verify compatibility.
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 aiointercept-0.1.9.tar.gz.
File metadata
- Download URL: aiointercept-0.1.9.tar.gz
- Upload date:
- Size: 164.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f1996e0d4dc69024f48a408a4c9749e42821022241bc722203c3c84144d44f2
|
|
| MD5 |
069bf25d5a1d706862d5275d9b0d8cf9
|
|
| BLAKE2b-256 |
c762f310cd6002a5e4f9993e7b8cd776f90a44254ab8cf2fc0cb5638317573b9
|
Provenance
The following attestation bundles were made for aiointercept-0.1.9.tar.gz:
Publisher:
publish.yml on Polandia94/aiointercept
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aiointercept-0.1.9.tar.gz -
Subject digest:
4f1996e0d4dc69024f48a408a4c9749e42821022241bc722203c3c84144d44f2 - Sigstore transparency entry: 2119316607
- Sigstore integration time:
-
Permalink:
Polandia94/aiointercept@3201dbdcab8f20b512ec7eeef0c1aa1c2571fa0a -
Branch / Tag:
refs/tags/v0.1.9 - Owner: https://github.com/Polandia94
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3201dbdcab8f20b512ec7eeef0c1aa1c2571fa0a -
Trigger Event:
push
-
Statement type:
File details
Details for the file aiointercept-0.1.9-py3-none-any.whl.
File metadata
- Download URL: aiointercept-0.1.9-py3-none-any.whl
- Upload date:
- Size: 19.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef89ea659e3c6aded2140cf4b66dd1ce2ceb4c3ada4f5df27696d613a1fc175c
|
|
| MD5 |
f1e2d45daa27e2d305df34551c1997e3
|
|
| BLAKE2b-256 |
636ec6d8fe7160f2a97d313d1a86b6d90575d44d4017dbd5065f9843ac88de6d
|
Provenance
The following attestation bundles were made for aiointercept-0.1.9-py3-none-any.whl:
Publisher:
publish.yml on Polandia94/aiointercept
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
aiointercept-0.1.9-py3-none-any.whl -
Subject digest:
ef89ea659e3c6aded2140cf4b66dd1ce2ceb4c3ada4f5df27696d613a1fc175c - Sigstore transparency entry: 2119316649
- Sigstore integration time:
-
Permalink:
Polandia94/aiointercept@3201dbdcab8f20b512ec7eeef0c1aa1c2571fa0a -
Branch / Tag:
refs/tags/v0.1.9 - Owner: https://github.com/Polandia94
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@3201dbdcab8f20b512ec7eeef0c1aa1c2571fa0a -
Trigger Event:
push
-
Statement type: