Mock out requests made by ClientSession from aiohttp package
Project description
Aioresponses is a helper to mock/fake web requests in python aiohttp package.
For requests module there are a lot of packages that help us with testing (eg. httpretty, responses, requests-mock).
When it comes to testing asynchronous HTTP requests it is a bit harder (at least at the beginning). The purpose of this package is to provide an easy way to test asynchronous HTTP requests.
Installing
$ pip install aioresponses
Usage
To mock out HTTP request use aioresponses as a method decorator or as a context manager.
Response status code, body, payload (for json response) and headers can be mocked.
Supported HTTP methods: GET, POST, PUT, PATCH, DELETE and OPTIONS.
import aiohttp
import asyncio
from aioresponses import aioresponses
@aioresponses()
def test_request(mocked):
loop = asyncio.get_event_loop()
mocked.get('http://example.com', status=200, body='test')
session = aiohttp.ClientSession()
resp = loop.run_until_complete(session.get('http://example.com'))
assert resp.status == 200
for convenience use payload argument to mock out json response. Example below.
as a context manager
import asyncio
import aiohttp
from aioresponses import aioresponses
def test_ctx():
loop = asyncio.get_event_loop()
session = aiohttp.ClientSession()
with aioresponses() as m:
m.get('http://test.example.com', payload=dict(foo='bar'))
resp = loop.run_until_complete(session.get('http://test.example.com'))
data = loop.run_until_complete(resp.json())
assert dict(foo='bar') == data
aioresponses allows to mock out any HTTP headers
import asyncio
import aiohttp
from aioresponses import aioresponses
@aioresponses()
def test_http_headers(m):
loop = asyncio.get_event_loop()
session = aiohttp.ClientSession()
m.post(
'http://example.com',
payload=dict(),
headers=dict(connection='keep-alive'),
)
resp = loop.run_until_complete(session.post('http://example.com'))
# note that we pass 'connection' but get 'Connection' (capitalized)
# under the neath `multidict` is used to work with HTTP headers
assert resp.headers['Connection'] == 'keep-alive'
allows to register different responses for the same url
import asyncio
import aiohttp
from aioresponses import aioresponses
@aioresponses()
def test_multiple_responses(m):
loop = asyncio.get_event_loop()
session = aiohttp.ClientSession()
m.get('http://example.com', status=500)
m.get('http://example.com', status=200)
resp1 = loop.run_until_complete(session.get('http://example.com'))
resp2 = loop.run_until_complete(session.get('http://example.com'))
assert resp1.status == 500
assert resp2.status == 200
allows to passthrough to a specified list of servers
import asyncio
import aiohttp
from aioresponses import aioresponses
@aioresponses(passthrough=['http://backend'])
def test_passthrough(m, test_client):
session = aiohttp.ClientSession()
# this will actually perform a request
resp = loop.run_until_complete(session.get('http://backend/api'))
aioresponses allows to throw an exception
import asyncio
from aiohttp import ClientSession, HttpProcessingError
from aioresponses import aioresponses
@aioresponses()
def test_how_to_throw_an_exception(m, test_client):
loop = asyncio.get_event_loop()
session = ClientSession()
m.get('http://example.com/api', exception=HttpProcessingError('test'))
# calling
# loop.run_until_complete(session.get('http://example.com/api'))
# will throw an exception.
Features
Easy to mock out HTTP requests made by aiohttp.ClientSession
Disclaimer
Due to the fact that get, post, put, delete methods from aiohttp are in deprecation mode and they are NOT supported by this package.
License
Free software: MIT license
Credits
This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.
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 aioresponses-0.3.2.tar.gz
.
File metadata
- Download URL: aioresponses-0.3.2.tar.gz
- Upload date:
- Size: 30.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5f7884290d7fd13cc3f18e06fd1eef1499697a55bf098be049215f35d05b7e8a |
|
MD5 | 2a4f547b6c9f4447745d9e4588dd6a68 |
|
BLAKE2b-256 | ab76e29338373455d342628415950b345c6a1f4bc7b9ebf991dc79d9adbcc4d0 |
File details
Details for the file aioresponses-0.3.2-py2.py3-none-any.whl
.
File metadata
- Download URL: aioresponses-0.3.2-py2.py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5fa2297030073952a27694c9459c27b23bf0c7393d1ca0f0469334ed234ab5ca |
|
MD5 | ff3a5c7dc9118d055b2f5eaae3cc522f |
|
BLAKE2b-256 | 35caef074795417a84dccdd6c4b766e2787a77867cf83a6e15d5771385f8a29a |