Skip to main content

A py.test plugin providing fixtures and markers to simplify testing of asynchronous tornado applications.

Project description

https://travis-ci.org/eugeniy/pytest-tornado.svg?branch=master https://coveralls.io/repos/eugeniy/pytest-tornado/badge.svg

A py.test plugin providing fixtures and markers to simplify testing of asynchronous tornado applications.

Installation

pip install pytest-tornado

Example

import pytest
import tornado.web

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world")

application = tornado.web.Application([
    (r"/", MainHandler),
])

@pytest.fixture
def app():
    return application

@pytest.mark.gen_test
def test_hello_world(http_client, base_url):
    response = yield http_client.fetch(base_url)
    assert response.code == 200

Running tests

py.test

Fixtures

io_loop

creates an instance of the tornado.ioloop.IOLoop for each test case

http_port

get a port used by the test server

base_url

Get an absolute base url for the test server, for example http://localhost:59828. Can also be used in a test with HTTPS fixture and will then return a corresponding url, for example http://localhost:48372.

http_server

start a tornado HTTP server, you must create an app fixture, which returns the tornado.web.Application to be tested

http_client

get an asynchronous HTTP client

There is also the possibility to test applications with HTTPS. For running a server with HTTPS you need a certificate.

https_port

Get a port used by the test server.

https_server

Start a tornado HTTPS server. You must create an app fixture, which returns the tornado.web.Application to be tested, and an ssl_options fixture which returns the SSL options for the tornado.httpserver.HTTPServer.

https_client

Get an asynchronous HTTP client. In case your test uses an self-signed certificate you can set verify=False on the fetch method.

Show fixtures provided by the plugin:

py.test --fixtures

Markers

A gen_test marker lets you write a coroutine-style tests used with the tornado.gen module:

@pytest.mark.gen_test
def test_tornado(http_client):
    response = yield http_client.fetch('http://www.tornadoweb.org/')
    assert response.code == 200

This marker supports writing tests with async/await syntax as well:

@pytest.mark.gen_test
async def test_tornado(http_client):
    response = await http_client.fetch('http://www.tornadoweb.org/')
    assert response.code == 200

Marked tests will time out after 5 seconds. The timeout can be modified by setting an ASYNC_TEST_TIMEOUT environment variable, --async-test-timeout command line argument or a marker argument.

@pytest.mark.gen_test(timeout=5)
def test_tornado(http_client):
    yield http_client.fetch('http://www.tornadoweb.org/')

The mark can also receive a run_sync flag, which if turned off will, instead of running the test synchronously, will add it as a coroutine and run the IOLoop (until the timeout). For instance, this allows to test things on both a client and a server at the same time.

@pytest.mark.gen_test(run_sync=False)
def test_tornado(http_server, http_client):
    response = yield http_client.fetch('http://localhost:5555/my_local_server_test/')
    assert response.body == 'Run on the same IOLoop!'

Show markers provided by the plugin:

py.test --markers

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

pytest-tornado-0.8.1.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

pytest_tornado-0.8.1-py2.py3-none-any.whl (9.6 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pytest-tornado-0.8.1.tar.gz.

File metadata

  • Download URL: pytest-tornado-0.8.1.tar.gz
  • Upload date:
  • Size: 9.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.1

File hashes

Hashes for pytest-tornado-0.8.1.tar.gz
Algorithm Hash digest
SHA256 b9fa1930c333b9dfe29bde90f9f42e6643278b5d0c95528a8302a7454fd3f1b1
MD5 cbd3ba23ffca0e4ec774c219552d82ef
BLAKE2b-256 f785a7b43fb46dbd7d6c28e798491e5f7dc902e0fbbd1630b03307529faebf79

See more details on using hashes here.

File details

Details for the file pytest_tornado-0.8.1-py2.py3-none-any.whl.

File metadata

  • Download URL: pytest_tornado-0.8.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 9.6 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/47.3.1 requests-toolbelt/0.9.1 tqdm/4.46.1 CPython/3.7.1

File hashes

Hashes for pytest_tornado-0.8.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 8d43f400c64fabc85af58891096d4f93f05e9f9baae2c751e039932a0f62d0b5
MD5 9b24d8bbc0800f1ba96db83d65c779af
BLAKE2b-256 e77f111eb35d4f4ea7a654294b76f3d98eee6c704282fd028ae37bfc259e2216

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