Skip to content
Please note that GitHub no longer supports your web browser.

We recommend upgrading to the latest Google Chrome or Firefox.

Learn more
A mocking library for requests
Python
Branch: master
Clone or download
patrys Merge pull request #58 from dplyakin/persistent-cookies
Prevent session cookies from overwriting
Latest commit a35a35d Jul 30, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.coveragerc
.gitignore Initial commit Mar 19, 2013
.travis.yml Update .travis.yml Mar 28, 2017
LICENSE Add license, cosmetics Apr 5, 2013
MANIFEST.in Include LICENSE Apr 16, 2013
README.md Update README.md Mar 28, 2017
httmock.py
setup.py 1.3.0 maintenance release Jan 28, 2019
tests.py Prevent session cookies from overwriting Jul 30, 2019

README.md

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']
You can’t perform that action at this time.