httmock

by patrys

patrys / httmock

A mocking library for requests

410 Stars 49 Forks Last release: Not found Other 95 Commits 17 Releases

Available items

No Items, yet!

The developer of this repository has not created any items for sale yet. Need a bug fixed? Help with integration? A different license? Create a request here:

httmock

A mocking library for

requests
for Python 2.7 and 3.4+.

Installation

pip install httmock

Or, if you are a Gentoo user:

emerge dev-python/httmock

Usage

You can use it to mock third-party APIs and test libraries that use

requests
internally, conditionally using mocked replies with the
urlmatch
decorator:
from httmock import urlmatch, HTTMock
import requests

@urlmatch(netloc=r'(.*.)?google.com$') def google_mock(url, request): return 'Feeling lucky, punk?'

with HTTMock(google_mock): r = requests.get('http://google.com/') print r.content # 'Feeling lucky, punk?'

The

all_requests
decorator doesn't conditionally block real requests. If you return a dictionary, it will map to the
requests.Response
object returned:
from httmock import all_requests, HTTMock
import requests

@all_requests def response_content(url, request): return {'status_code': 200, 'content': 'Oh hai'}

with HTTMock(response_content): r = requests.get('https://foo_bar')

print r.status_code print r.content

If you pass in

Set-Cookie
headers,
requests.Response.cookies
will contain the values. You can also use
response
method directly instead of returning a dict:
from httmock import all_requests, response, HTTMock
import requests

@all_requests def response_content(url, request): headers = {'content-type': 'application/json', 'Set-Cookie': 'foo=bar;'} content = {'message': 'API rate limit exceeded'} return response(403, content, headers, None, 5, request)

with HTTMock(response_content): r = requests.get('https://api.github.com/users/whatever')

print r.json().get('message') print r.cookies['foo']

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.