test_server documentation

The test_server packages provides HTTP server that allows you:

  • to see details of HTTP request

  • to set parameters of HTTP response

Basic example:

from test_server import TestServer
from six.moves.urllib.request import urlopen

server = TestServer()
server.start()
server.response['data'] = b'response-data')
req = urlopen(server.get_url(), b'request-data')
assert req.read() == b'response-data'
assert server.request['data'] == b'request-data'

Request object

The request object contains information about HTTP request sent from HTTP client to test server. The request object has dict-like interface and provides these details:

args

query string arguments

headers

HTTP headers

cookies

cookies

path

the path fragmet of requested URL

method

HTTP method

data

data sent with the request

files

files sent with the request

client_ip

IP address the request has been sent from

done

the flag means if the request has been sent already

charset

the character set which data of request are encoded with

See detailed description of request properties at Request object

Response object

The response object controls the data which the HTTP client would received in response from test server. Available keys are:

code

HTTP status code,

data

data part of HTTP response,

headers

HTTP headers,

cookies

cookies,

callback

function that builds completely custom request

sleep

amount of time to wait before send response data

See detailed description of response properties at Response object

HTTP server modes

The test_server can work in two modes: thread (default) and subprocess. In thread mode the actual test server runs in separate thread of the python process which created TestServer instance. In process mode the test server runs in seprate process (started with subprocess.Popen) and communicates with TestServer instance via files.

In both modes you create TestServer instance which controls the HTTP Server running in seperate thread (thread mode) or separate process (subprocess mode).

Thread mode

The test server creates extra thread that runs the HTTP server. Your python HTTP client works in the same process space as the TestServer instance. If your client modifies somehow the standard python socket library then that could affect the test_server behaviour. To avoid this use test_server in subprocess mode.

Subprocess mode

The test server creates files to exchange request/response state with HTTP server, then starts new process that runs HTTP server. To set details of response or see details of request you work with TestServer instance as usual (as in thread mode). Each access to request or response objects causes reading or writing the state files.

Indices and tables