Skip to main content

HTTP(s) and SMTP testing server

Project description

Latest Pypi version Documentation Status Last build status

HTTP(s) and SMTP servers which can be run within a Python process. Serving from different thread along with application and tests, exposing a simple thread-safe API, so the calling code can control how the server behaves.

Sometimes integration tests cannot do with mocking the socket.socket function avoiding real networking, this partially solves the problem by providing a real server which is easy to use and can perform real network communication in a controlled and reliable way.

Features:

  • Runs in a different thread along with your tests.

  • Control server responses and behaviour.

  • Access to server internal state and data after or during the request.

  • HTTPs support, it bundles a self-signed certificate useful for testing.

  • SMTP support which will collect and parse all your outgoing email.

  • History of all performed requests/responses.

Supports python 2.7 3.2, 3.3 and 3.4

Functions

Functions that return a running server instance:

>>> server = start_server()
>>> server.host
'127.0.0.1'

Or context managers for limited use:

>>> with http_server() as server:
...     server.host
'127.0.0.1'
>>> with smtp_server() as server:
...     server.inbox
[]

Mixin classes

Mixins that include an working server as self.server.

import requests
from httptestserver import HttpsTestServer

class TestApplication(HttpsTestServer):

    # Test what was actually get by the server
    def test_it_should_send_headers(self):
        headers = {'key': 'value'}

        requests.get(self.default_url, headers=headers)

        assert self.server.data['headers']['key'] == 'value'

    # Control server responses
    def test_it_should_parse_json_response(self):
        self.server.data['headers'] = {'Content-Type': 'application/json'}
        self.server.data['response_content'] = "{'key': 'value'}"

        response = requests.get(self.default_url)

        assert response.json() == {'key': 'value'}

    # Make the server behave as you want
    def test_it_should_raise_timeout_at_2s_wait(self):
        self.server.data['response_timeout'] = 2

        try:
            requests.get(self.default_url, timeout=1)
        except requests.exceptions.Timeout:
            pass
        else:
            assert False

    # Access to server's requests/responses history
    def test_it_should_make_two_requests(self):
        requests.get(self.default_url)
        requests.get(self.default_url + '2')

        assert len(self.server.history) == 2
        assert self.server.history[-1]['path'] == self.default_url + '2'

Development

In order get a development environment, create a virtualenv and install the desired requirements.

virtualenv env
env/bin/activate
pip install -r dev-requirements.txt

The included certificate was generated using SSL:

openssl req -new -x509 -keyout server.pem -out server.pem -days 40000 -nodes

Tests

To run the tests just use tox or nose:

tox
nosetests

Documentation

To generate the documentation change to the docs directory and run make. You need to install the sphinx and changelog packages in order to be able to run the makefile.

cd docs
make html
open build/html/index.html

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

httptestserver-0.3.1.tar.gz (11.2 kB view details)

Uploaded Source

Built Distributions

httptestserver-0.3.1-py3-none-any.whl (14.0 kB view details)

Uploaded Python 3

httptestserver-0.3.1-py2-none-any.whl (14.0 kB view details)

Uploaded Python 2

File details

Details for the file httptestserver-0.3.1.tar.gz.

File metadata

File hashes

Hashes for httptestserver-0.3.1.tar.gz
Algorithm Hash digest
SHA256 80c2bde499afe275ea2327b0c5151efca8080368c22b8bd8ff4aae9d81b65a80
MD5 7501102f820486793ba18e1a9b7d28a7
BLAKE2b-256 2b5a1f9f20104a59083e36ca017ffc793d7fdc02342cb05034e40e8c3f0c0392

See more details on using hashes here.

File details

Details for the file httptestserver-0.3.1-py3-none-any.whl.

File metadata

File hashes

Hashes for httptestserver-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5e26dbc53a0c43408d77a0bf4d031c9bc6a3a7dd6b4a40361ba9bcadff18850c
MD5 4e15ece2eb0481ef5c069466df42cf73
BLAKE2b-256 bc3706b986313cf02a786e617d22520f502e197b36328bc368fb42ab3a88b96f

See more details on using hashes here.

File details

Details for the file httptestserver-0.3.1-py2-none-any.whl.

File metadata

File hashes

Hashes for httptestserver-0.3.1-py2-none-any.whl
Algorithm Hash digest
SHA256 6800ed6bc95ff136062c3053d6696d6f3334cddd33510f708b88d2069384f881
MD5 a7d696207c1525890cd3e9b06fdbf116
BLAKE2b-256 b13817745987a46733728263c42fd01bfc813994eae056b6b8083085990c186c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page